<?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>29095</bug_id>
          
          <creation_ts>2009-09-09 10:38:52 -0700</creation_ts>
          <short_desc>Rename 3D Canvas related classes to use WebGL prefix</short_desc>
          <delta_ts>2009-11-10 02:04:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>145831</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2009-09-09 10:38:52 -0700</bug_when>
    <thetext>This is the official name of the object in the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161489</commentid>
    <comment_count>1</comment_count>
      <attachid>42731</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-08 21:19:44 -0800</bug_when>
    <thetext>Created attachment 42731
Patch

To track the naming convention in the WebGL spec, renamed CanvasRenderingContext3D, CanvasObject and subclasses, CanvasArrayBuffer, and CanvasArray and subclasses to use the WebGL prefix.

Updated WebGL tests (both manual and LayoutTests).

Built and tested WebKit in Debug and Release mode. Built and tested Chromium in Debug mode with WebGL enabled. A checkin is needed to the Chromium tree once the WebKit changes have been committed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161491</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-08 21:21:46 -0800</bug_when>
    <thetext>*** Bug 31170 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161502</commentid>
    <comment_count>3</comment_count>
      <attachid>42731</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-08 22:15:49 -0800</bug_when>
    <thetext>Comment on attachment 42731
Patch

The normal model for changes like these is to rename the class, then moves the files.  It makes it easier to see what is actually changing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161683</commentid>
    <comment_count>4</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 11:48:56 -0800</bug_when>
    <thetext>Ken, I&apos;ve been told that you disagree with my review, however you have made no comments in this bug, nor have you attempted to contact me.  I will try to make this clearer

From the point of view of reviewing a patch, a file move with changes is incredibly difficult.  Therefore we do rename patches in two parts -- the first part is to rename the class, the second is to rename the file.  This means the first patch is simply a whole pile of isolated renames, and the second patch is reported as a move.  This makes reviewing far simpler, and makes it easier to see what is happening in the revision history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161710</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-09 12:42:51 -0800</bug_when>
    <thetext>I&apos;ll resubmit the patch containing only the changes to the files&apos; contents. I&apos;ll need that patch committed before I can do the file renamings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161797</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-09 14:34:48 -0800</bug_when>
    <thetext>Note that splitting this patch in this way will not result in the second patch being a simple move. Because IDL files are changing, references to various headers from the js and v8 bindings will change. I hope that this will not prevent the restructured patch from being approved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161801</commentid>
    <comment_count>7</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 14:38:14 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Note that splitting this patch in this way will not result in the second patch
&gt; being a simple move. Because IDL files are changing, references to various
&gt; headers from the js and v8 bindings will change. I hope that this will not
&gt; prevent the restructured patch from being approved.

I figured that the IDL files would be a pain to rename/move but they tend to be very small anyway (with the exception of the obvious root context class) -- It may be worth doing the rename+move of Canvas/WebGLRenderingContext separately from everything else</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161807</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-09 14:55:08 -0800</bug_when>
    <thetext>There are also interdependencies among the .cpp / .h files in html/canvas, so these will not be a simple renaming either in the second patch.

There is no advantage to renaming CanvasRenderingContext3D in a separate patch. This will only make more work. The majority of the code changes are due to the renaming of the CanvasArray and CanvasObject subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161888</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-09 18:12:15 -0800</bug_when>
    <thetext>I&apos;ve tried to split up this patch as requested. I was able to get WebKit to compile and link. It required the addition of several temporary headers like html/canvas/WebGLArray.h so that the derived sources would compile.

I&apos;m having difficulty making Chromium build. The V8 code generation script (specifically, WebCore/WebCore.gyp/scripts/rule_binding.py) assumes that the IDL file&apos;s name is the same as the class named in the IDL file.

As I see it, there are a few options:

1) Invest even more time hacking on the V8 code generation scripts.

2) Completely disable the WebGL build for Chromium while this non-atomic renaming is being done.

3) Apply my original, atomic patch.

I don&apos;t want to do (1); it is a waste of time.

Oliver, I would prefer to do (3), but if you want, I will disable WebGL in Chromium and upload a new patch to satisfy (2). As I pointed out, this will not result in the second part of the patch being a simple renaming. There are interdependencies between headers like CanvasFloatArray.h and CanvasArray.h which require them to be renamed and updated in a single step. It might be technically possible to do multiple rename / update commits so that no commit contains a renaming of a file that also contains modifications, but this will only prolong the agony of this update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161894</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 18:22:25 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;ve tried to split up this patch as requested. I was able to get WebKit to
&gt; compile and link. It required the addition of several temporary headers like
&gt; html/canvas/WebGLArray.h so that the derived sources would compile.
&gt; 
&gt; I&apos;m having difficulty making Chromium build. The V8 code generation script
&gt; (specifically, WebCore/WebCore.gyp/scripts/rule_binding.py) assumes that the
&gt; IDL file&apos;s name is the same as the class named in the IDL file.
&gt; 
&gt; As I see it, there are a few options:
&gt; 
&gt; 1) Invest even more time hacking on the V8 code generation scripts.
&gt; 
&gt; 2) Completely disable the WebGL build for Chromium while this non-atomic
&gt; renaming is being done.
&gt; 
&gt; 3) Apply my original, atomic patch.
&gt; 
&gt; I don&apos;t want to do (1); it is a waste of time.
&gt; 
&gt; Oliver, I would prefer to do (3), but if you want, I will disable WebGL in
&gt; Chromium and upload a new patch to satisfy (2). As I pointed out, this will not
&gt; result in the second part of the patch being a simple renaming. There are
&gt; interdependencies between headers like CanvasFloatArray.h and CanvasArray.h
&gt; which require them to be renamed and updated in a single step. It might be
&gt; technically possible to do multiple rename / update commits so that no commit
&gt; contains a renaming of a file that also contains modifications, but this will
&gt; only prolong the agony of this update.

*sigh*  this would be immensely easier if chrome didn&apos;t choose to have its own bindings.

I am disinclined to make things worse for the normal webkit builds in the name of not destroying chrome builds, but i may be willing to accept an atomic commit after i see what&apos;s required to do the rename myself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161915</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 19:02:06 -0800</bug_when>
    <thetext>&gt; *sigh*  this would be immensely easier if chrome didn&apos;t choose to have its own
&gt; bindings.
&gt; 
&gt; I am disinclined to make things worse for the normal webkit builds in the name
&gt; of not destroying chrome builds, but i may be willing to accept an atomic
&gt; commit after i see what&apos;s required to do the rename myself.

After playing around it would seem that it is difficult to do this degree a renaming without an ancillary typedef.  I don&apos;t really like that idea so it would appear that the best solution is an atomic rename and move.

That said, each class can be renamed/moved in a separate patch, rather than a single 1.2mb patch which no one can reasonably review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161921</commentid>
    <comment_count>12</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 19:25:25 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; *sigh*  this would be immensely easier if chrome didn&apos;t choose to have its own
&gt; &gt; bindings.
&gt; &gt; 
&gt; &gt; I am disinclined to make things worse for the normal webkit builds in the name
&gt; &gt; of not destroying chrome builds, but i may be willing to accept an atomic
&gt; &gt; commit after i see what&apos;s required to do the rename myself.
&gt; 
&gt; After playing around it would seem that it is difficult to do this degree a
&gt; renaming without an ancillary typedef.  I don&apos;t really like that idea so it
&gt; would appear that the best solution is an atomic rename and move.
&gt; 
&gt; That said, each class can be renamed/moved in a separate patch, rather than a
&gt; single 1.2mb patch which no one can reasonably review

Okay, just had another attempt and it would seem i can rename all the files trivially and not worry about the types contained therein.  I think the correct approach is therefore to rename the files then rename the classes.  This should produce the nicest set of changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161932</commentid>
    <comment_count>13</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 19:57:57 -0800</bug_when>
    <thetext>Maciej has pointed out that we actually have a tool to automatically do renames like this (do-webcore-renames) I&apos;m just seeing if it handles IDL files correctly.  If it does then our historic approach has been to run it and land the patch noting it was done automatically by do-webcore-rename.

If it does i&apos;ll just bang through the patches tonight, though you&apos;ll need to do v8 binding updates manually i suspect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161933</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2009-11-09 20:06:30 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Okay, just had another attempt and it would seem i can rename all the files
&gt; trivially and not worry about the types contained therein.  I think the correct
&gt; approach is therefore to rename the files then rename the classes.  This should
&gt; produce the nicest set of changes.

I don&apos;t understand how this is different from what I&apos;ve already tried.

 - For the WebKit build, it&apos;s still going to be necessary to make some updates to the contents of the files during the renaming. For example, CanvasFloatArray.h moves to WebGLFloatArray.h, but its #include &quot;CanvasArray.h&quot; must be changed to #include &quot;WebGLArray.h&quot;.

 - The Chrome build will break in exactly the same way as before because of the mismatch between the IDL file&apos;s name and contents.

The patch above can be reviewed in the following way. In the &quot;Formatted Diff&quot; view, each of the moved and edited files shows up three times. First, a complete removal of the old file (e.g. &quot;JSCanvasArrayBufferConstructor.cpp&quot;. Second, a complete replacement of the new file (e.g. &quot;JSWebGLArrayBufferConstructor.cpp&quot;. Finally, and the only important one, exactly the edits that need to be reviewed, under the name e.g. JSWebGLArrayBufferConstructor.cpp. The terms that were replaced are highlighted in the third version. The first two can be ignored.

The exceptions to this rule in this review are the following files, which were modified:
WebCore/DerivedSources.make
WebCore/WebCore.gypi
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/bindings/js/JSDOMWindowCustom.cpp
WebCore/bindings/js/JSDocumentCustom.cpp
WebCore/bindings/js/JSHTMLCanvasElementCustom.cpp
WebCore/bindings/scripts/CodeGeneratorV8.pm
WebCore/bindings/v8/DOMObjectsInclude.h
WebCore/bindings/v8/DerivedSourcesAllInOne.cpp
WebCore/bindings/v8/V8DOMWrapper.cpp
WebCore/bindings/v8/V8Index.cpp
WebCore/bindings/v8/V8Index.h
WebCore/bindings/v8/custom/V8CustomBinding.h
WebCore/bindings/v8/custom/V8DocumentCustom.cpp
WebCore/bindings/v8/custom/V8HTMLCanvasElementCustom.cpp
WebCore/html/HTMLCanvasElement.cpp
WebCore/manual-tests/webgl/Earth.html
WebCore/manual-tests/webgl/ManyPlanetsDeep.html
WebCore/manual-tests/webgl/SpinningBox.html
WebCore/manual-tests/webgl/TeapotPerPixel.html
WebCore/manual-tests/webgl/TeapotPerVertex.html
WebCore/manual-tests/webgl/resources/CanvasMatrix.js
WebCore/manual-tests/webgl/resources/utils3d.js
WebCore/page/DOMWindow.idl
WebCore/platform/graphics/GraphicsContext3D.h
WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp
WebCore/rendering/RenderLayerBacking.cpp
LayoutTests/fast/canvas/webgl/array-unit-tests-expected.txt
LayoutTests/fast/canvas/webgl/array-unit-tests.html
LayoutTests/fast/canvas/webgl/gl-get-calls.html
LayoutTests/fast/canvas/webgl/triangle.html
LayoutTests/fast/canvas/webgl/resources/utils3d.js

I just paged through the review, ignoring all of the files that were completely removed or added, and verifying that the only textual changes were renaming of Canvas to WebGL and dropping of the 3D suffix from CanvasRenderingContext3D. This took less than ten minutes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161938</commentid>
    <comment_count>15</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 20:20:57 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; Okay, just had another attempt and it would seem i can rename all the files
&gt; &gt; trivially and not worry about the types contained therein.  I think the correct
&gt; &gt; approach is therefore to rename the files then rename the classes.  This should
&gt; &gt; produce the nicest set of changes.
&gt; 
&gt; I don&apos;t understand how this is different from what I&apos;ve already tried.

My implication there was one file at a time.  But also it resulted in a simple patch that did a rename, followed by a vcs move which is trivial to verify across vcs revisions, rather than a move+changes.

&gt;  - For the WebKit build, it&apos;s still going to be necessary to make some updates
&gt; to the contents of the files during the renaming. For example,
&gt; CanvasFloatArray.h moves to WebGLFloatArray.h, but its #include &quot;CanvasArray.h&quot;
&gt; must be changed to #include &quot;WebGLArray.h&quot;.
&gt; 
&gt;  - The Chrome build will break in exactly the same way as before because of the
&gt; mismatch between the IDL file&apos;s name and contents.
&gt;

This seems like a bug in the V8 bindings codegen -- it&apos;s probably worth fixing on the assumption we&apos;ll hit it again one day, the standard bindings generator script does not have this restriction.
 
&gt; The patch above can be reviewed in the following way. In the &quot;Formatted Diff&quot;
&gt; view, each of the moved and edited files shows up three times. First, a
&gt; complete removal of the old file (e.g. &quot;JSCanvasArrayBufferConstructor.cpp&quot;.
&gt; Second, a complete replacement of the new file (e.g.
&gt; &quot;JSWebGLArrayBufferConstructor.cpp&quot;. Finally, and the only important one,
&gt; exactly the edits that need to be reviewed, under the name e.g.
&gt; JSWebGLArrayBufferConstructor.cpp. The terms that were replaced are highlighted
&gt; in the third version. The first two can be ignored.

In a 1.2mb file that requires tracking them all down.

&gt; I just paged through the review, ignoring all of the files that were completely
&gt; removed or added, and verifying that the only textual changes were renaming of
&gt; Canvas to WebGL and dropping of the 3D suffix from CanvasRenderingContext3D.
&gt; This took less than ten minutes.
1.2Mb in less than 10 minutes is not a review.

Anyhoo, like i said in my last comment, i&apos;m fairly sure that do-webcore-rename can do the required work automatically, and is something we&apos;ve used in the past (i&apos;d forgotten about it due to the length of time since we&apos;ve really needed to rename anything)

--Oliver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161943</commentid>
    <comment_count>16</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 20:30:31 -0800</bug_when>
    <thetext>Okay, in my testing do-webcore-rename updates v8 build scripts as well, so i believe it should be fine to just use it.  I&apos;ll start pushing the individual patches in half an hour or so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161954</commentid>
    <comment_count>17</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-09 22:37:47 -0800</bug_when>
    <thetext>I have a &quot;big&apos; do-webcore-renames patch that automatically renames all of the canvas/webgl types in one swoop, and the v8 bindings that live in the tree, and the manual-tests :D

Just building to verify.

Alas LayoutTests need to be update manually</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161981</commentid>
    <comment_count>18</comment_count>
      <attachid>42852</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-10 01:08:59 -0800</bug_when>
    <thetext>Created attachment 42852
Automatic rename patch

This is the important bit of the rename patch.  All renames inside WebCore happen automatically, including manual-test updates.

A few testcases in the LayoutTests directory need to be updated to handle the change in type name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161982</commentid>
    <comment_count>19</comment_count>
      <attachid>42852</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-11-10 01:12:33 -0800</bug_when>
    <thetext>Comment on attachment 42852
Automatic rename patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161996</commentid>
    <comment_count>20</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-11-10 02:04:56 -0800</bug_when>
    <thetext>Committed r50725</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42731</attachid>
            <date>2009-11-08 21:19:44 -0800</date>
            <delta_ts>2009-11-10 01:08:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>webgl-renaming.patch</filename>
            <type>text/plain</type>
            <size>1332598</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjE5IEBACisyMDA5LTExLTA4ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZW5hbWUgM0QgQ2FudmFzIHJlbGF0ZWQgY2xhc3NlcyB0byB1c2UgV2ViR0wgcHJlZml4CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA5NQorCisgICAg
ICAgIE5vIG5ldyB0ZXN0czsgdXBkYXRlZCBhbmQgcmFuIGV4aXN0aW5nIFdlYkdMIHRlc3RzLgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUN1c3RvbS5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1
Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJy
YXlDb25zdHJ1Y3Rvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFz
Qnl0ZUFycmF5Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Nh
bnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUN1c3RvbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNOdW1iZXJBcnJheUN1
c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0RDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pT
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29u
c3RydWN0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0
QXJyYXlDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheUNvbnN0cnVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlND
YW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRE9NV2luZG93Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9N
V2luZG93Ojp3ZWJHTEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93
Ojp3ZWJHTEJ5dGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6d2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6d2ViR0xJ
bnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpKU0RPTVdpbmRvdzo6d2ViR0xVbnNpZ25lZElu
dEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp3ZWJHTFNob3J0QXJyYXkp
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3c6OndlYkdMVW5zaWduZWRTaG9ydEFycmF5
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NV2luZG93Ojp3ZWJHTEZsb2F0QXJyYXkpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL0pTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpKU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb25zdHJ1Y3RXZWJHTEFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oLgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3RydWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMQXJy
YXlDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJy
YXlDdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDogQ29waWVkIGZyb20gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0
b3I6OkpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25z
dHJ1Y3RXZWJHTEJ5dGVBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMQnl0ZUFycmF5
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pT
V2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpKU1dl
YkdMQnl0ZUFycmF5OjppbmRleFNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rv
ci5jcHAuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTEZs
b2F0QXJyYXlDb25zdHJ1Y3Rvcjo6SlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXZWJHTEZsb2F0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oOiBDb3BpZWQg
ZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmgu
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwOiBDb3Bp
ZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMRmxvYXRBcnJheTo6aW5kZXhTZXR0ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTEludEFy
cmF5Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTEludEFycmF5Q29uc3RydWN0b3I6OkpTV2ViR0xJbnRBcnJheUNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYkdMSW50QXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTEludEFycmF5Q29uc3RydWN0b3I6OmdldENvbnN0cnVj
dERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9y
Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUNvbnN0
cnVjdG9yLmguCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q3VzdG9tLmNw
cDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0ludEFycmF5Q3VzdG9t
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xJbnRBcnJheTo6aW5kZXhTZXR0ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdl
YkNvcmU6OmRhdGFGdW5jdGlvbmYpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uaSk6
CisgICAgICAgIChXZWJDb3JlOjpkYXRhRnVuY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYp
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjFmdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZlcnRleEF0dHJpYjRmdik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFNob3J0
QXJyYXlDb25zdHJ1Y3Rvci5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3I6OkpTV2ViR0xTaG9y
dEFycmF5Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0V2ViR0xTaG9y
dEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFy
cmF5Q29uc3RydWN0b3IuaDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZh
c1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xT
aG9ydEFycmF5Q3VzdG9tLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFNob3J0
QXJyYXk6OmluZGV4U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29u
c3RydWN0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpKU1dlYkdMVW5zaWduZWRCeXRlQXJy
YXlDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dl
YkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oLgorICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3Rv
bS5jcHAuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmluZGV4
U2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMVW5zaWduZWRJ
bnRBcnJheUNvbnN0cnVjdG9yOjpKU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFdlYkdMVW5zaWduZWRJbnRBcnJheSk6CisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJh
eUNvbnN0cnVjdG9yLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dl
YkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNv
cmU6OkpTV2ViR0xVbnNpZ25lZEludEFycmF5OjppbmRleFNldHRlcik6CisgICAgICAgIChXZWJD
b3JlOjp0b0pTKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZTo6
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rv
cjo6SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbnN0cnVjdFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YSk6
CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVj
dG9yLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmluZGV4U2V0dGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvSlMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
c2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6
VjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4LmNw
cDoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEluZGV4Lmg6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5Q3VzdG9tLmg6IFJlbW92ZWQuCisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNGbG9hdEFycmF5
Q3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNJbnRBcnJheUN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheUN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
QXJyYXlCdWZmZXJDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xB
cnJheUN1c3RvbS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc0FycmF5Q3VzdG9tLmguCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1Y3RXZWJHTEFycmF5
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFy
cmF5Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJD
b3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRF
Uik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5j
cHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzSW50QXJy
YXlDdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAg
ICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNv
cmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAu
CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29y
ZTo6dmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYpOgorICAgICAgICAoV2ViQ29yZTo6dW5p
Zm9ybUhlbHBlcmkpOgorICAgICAgICAoV2ViQ29yZTo6dW5pZm9ybU1hdHJpeEhlbHBlcik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcDog
Q29waWVkIGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5
Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAg
ICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3Jl
OjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6
OklOREVYRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJP
UEVSVFlfU0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2ln
bmVkSW50QXJyYXlDdXN0b20uY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVS
VFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OklOREVYRURfUFJPUEVSVFlfU0VUVEVSKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1
c3RvbS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNL
X0ZVTkNfREVDTCk6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX0dFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6cGFpbnQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0FjdGl2ZUluZm8uaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNBY3RpdmVJbmZvLmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNBcnJheS5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzQXJyYXlCdWZmZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc0FycmF5QnVmZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFz
QXJyYXlCdWZmZXIuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0J1
ZmZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmlkbDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGw6IFJlbW92ZWQuCisgICAgICAgICog
aHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFz
L0NhbnZhc0ZyYW1lYnVmZmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9D
YW52YXNGcmFtZWJ1ZmZlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c0ZyYW1lYnVmZmVyLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNJ
bnRBcnJheS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzSW50QXJy
YXkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5pZGw6
IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzTnVtYmVyQXJyYXkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc051bWJlckFycmF5Lmg6IFJlbW92
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzTnVtYmVyQXJyYXkuaWRsOiBSZW1vdmVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRt
bC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUHJvZ3JhbS5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1Byb2dyYW0uaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmJ1ZmZlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
YnVmZmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVm
ZmVyLmlkbDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2Fu
dmFzU2hhZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTaGFk
ZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuaWRsOiBS
ZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTaG9ydEFycmF5LmlkbDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzVGV4dHVyZS5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMv
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmg6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9j
YW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaWRsOiBSZW1vdmVkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmlkbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oOiBSZW1vdmVk
LgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5pZGw6IFJl
bW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQWN0aXZlSW5mby5oLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xB
Y3RpdmVJbmZvOjpXZWJHTEFjdGl2ZUluZm8pOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
QWN0aXZlSW5mby5pZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQWN0
aXZlSW5mby5pZGwuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHA6IENvcGll
ZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xBcnJheTo6V2ViR0xBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFy
cmF5Ojp+V2ViR0xBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5OjphbGlnbmVk
U2l6ZUluQnl0ZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQXJyYXkuaDogQ29waWVk
IGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5oLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xBcnJheTo6YnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5
LmlkbDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwuCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHA6IENvcGllZCBmcm9tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJy
YXlCdWZmZXI6OldlYkdMQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xBcnJh
eUJ1ZmZlcjo6ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEFycmF5QnVmZmVyOjpieXRl
TGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXlCdWZmZXI6On5XZWJHTEFycmF5
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmg6IENvcGll
ZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaC4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmlkbDogQ29waWVkIGZyb20gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5pZGwuCisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xCdWZmZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J1
ZmZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTEJ1ZmZlcjo6X2RlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xCdWZmZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIu
aC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjp+V2ViR0xCdWZmZXIpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNCdWZmZXIuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0
ZUFycmF5LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJy
YXkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCeXRlQXJyYXk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTEJ5dGVBcnJheTo6V2ViR0xCeXRlQXJyYXkpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCeXRlQXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TEJ5dGVBcnJheTo6c2l6ZUluQnl0ZXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0
ZUFycmF5Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5
LmguCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaWRsOiBDb3BpZWQgZnJv
bSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGwuCisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNGbG9hdEFycmF5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRB
cnJheTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRBcnJheTo6V2ViR0xG
bG9hdEFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRBcnJheTo6bGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRmxvYXRBcnJheTo6c2l6ZUluQnl0ZXMpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TEZsb2F0QXJyYXkuaWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Zs
b2F0QXJyYXkuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmNwcC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMRnJhbWVidWZmZXI6Ol9kZWxldGVPYmplY3QpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNGcmFtZWJ1ZmZlci5oLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZl
cjo6fldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVm
ZmVyLmlkbC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcDogQ29waWVk
IGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTEludEFycmF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xJ
bnRBcnJheTo6V2ViR0xJbnRBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTEludEFycmF5
OjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xJbnRBcnJheTo6c2l6ZUluQnl0ZXMp
OgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMSW50QXJyYXkuaWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0ludEFycmF5LmlkbC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6IENv
cGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMT2JqZWN0OjpXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTE9iamVjdDo6fldlYkdMT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMT2JqZWN0
OjpzZXRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xPYmplY3Q6OmRlbGV0ZU9iamVj
dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
T2JqZWN0Ojpjb250ZXh0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3Bw
OiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xQcm9ncmFtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xQcm9n
cmFtOjpfZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNQcm9ncmFtLmguCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFByb2dyYW06On5XZWJHTFByb2dyYW0pOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5pZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUHJvZ3JhbS5pZGwuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJi
dWZmZXIuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1
ZmZlci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6X2RlbGV0ZU9iamVjdCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyYnVmZmVyOjp+V2ViR0xSZW5kZXJidWZmZXIpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0Q2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmRQYWludCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmNTZXBhcmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVBy
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVS
ZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
dWxsRmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmFibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpl
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmZpbmlzaCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdlbmVyYXRlTWlwbWFwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEludGVnZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UHJvZ3JhbWl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJpKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyaXYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9n
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0VW5pZm9ybWYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRVbmlmb3JtaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFVuaWZvcm1pdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFVuaWZvcm1Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYmkpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGlua1Byb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTNpdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm00ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlT2JqZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cyk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IENvcGllZCBm
cm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmguCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDogQ29waWVkIGZyb20g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNTaGFkZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFkZXI6Ol9kZWxldGVPYmplY3QpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmg6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzU2hhZGVyLmguCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6fldlYkdM
U2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGw6IENvcGllZCBm
cm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmlkbC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFy
cmF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpXZWJHTFNo
b3J0QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpsZW5ndGgpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpzaXplSW5CeXRlcyk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5Lmg6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
U2hvcnRBcnJheS5pZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hv
cnRBcnJheS5pZGwuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDogQ29w
aWVkIGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmNwcC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6
X2RlbGV0ZU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmg6IENv
cGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5oLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xUZXh0dXJlOjp+V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFRleHR1cmUuaWRsOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1RleHR1cmUuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRl
QXJyYXkuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRCeXRlQXJyYXk6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRCeXRl
QXJyYXk6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
OjpzaXplSW5CeXRlcyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheS5oOiBDb3BpZWQgZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmguCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5p
ZGw6IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHA6
IENvcGllZCBmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OldlYkdMVW5zaWduZWRJbnRB
cnJheSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNpemVJbkJ5dGVzKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaDogQ29waWVkIGZy
b20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmguCisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmlkbC4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHA6IENvcGllZCBmcm9tIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpsZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNpemVJbkJ5dGVzKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oOiBDb3BpZWQgZnJvbSBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oLgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmlkbDogQ29waWVkIGZyb20gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsLgorICAgICAgICAq
IG1hbnVhbC10ZXN0cy93ZWJnbC9FYXJ0aC5odG1sOgorICAgICAgICAqIG1hbnVhbC10ZXN0cy93
ZWJnbC9NYW55UGxhbmV0c0RlZXAuaHRtbDoKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvd2ViZ2wv
U3Bpbm5pbmdCb3guaHRtbDoKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvd2ViZ2wvVGVhcG90UGVy
UGl4ZWwuaHRtbDoKKyAgICAgICAgKiBtYW51YWwtdGVzdHMvd2ViZ2wvVGVhcG90UGVyVmVydGV4
Lmh0bWw6CisgICAgICAgICogbWFudWFsLXRlc3RzL3dlYmdsL3Jlc291cmNlcy9DYW52YXNNYXRy
aXguanM6CisgICAgICAgIChDYW52YXNNYXRyaXg0LnByb3RvdHlwZS5nZXRBc1dlYkdMRmxvYXRB
cnJheSk6CisgICAgICAgICogbWFudWFsLXRlc3RzL3dlYmdsL3Jlc291cmNlcy91dGlsczNkLmpz
OgorICAgICAgICAobWFrZUJveCk6CisgICAgICAgIChtYWtlU3BoZXJlKToKKyAgICAgICAgKGRv
TG9hZE9iaik6CisgICAgICAgIChGcmFtZXJhdGUucHJvdG90eXBlLnNuYXBzaG90KToKKyAgICAg
ICAgKiBwYWdlL0RPTVdpbmRvdy5pZGw6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0M0QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJlZ2luUGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFj
aFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEF0dHJp
YkxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb21waWxlU2hhZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmlzU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Omxp
bmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZWFkUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVzZVByb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpzaXplRm9yR2V0UGFyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRGbG9hdHYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRC
dWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRVbmlmb3JtZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlm
b3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c2l6ZUZvckdldFZlcnRleEF0dHJpYlBh
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0
cmliaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0xheWVyQ29uZmlndXJhdGlv
bik6CisKIDIwMDktMTEtMDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDI3ICs3MCwxMCBAQCBET01fQ0xBU1NFUyA9IFwKICAgICBDU1NWYWx1ZUxpc3Qg
XAogICAgIENTU1ZhcmlhYmxlc1J1bGUgXAogICAgIENTU1ZhcmlhYmxlc0RlY2xhcmF0aW9uIFwK
LSAgICBDYW52YXNBY3RpdmVJbmZvIFwKLSAgICBDYW52YXNBcnJheSBcCi0gICAgQ2FudmFzQXJy
YXlCdWZmZXIgXAotICAgIENhbnZhc0J1ZmZlciBcCi0gICAgQ2FudmFzQnl0ZUFycmF5IFwKLSAg
ICBDYW52YXNGbG9hdEFycmF5IFwKLSAgICBDYW52YXNGcmFtZWJ1ZmZlciBcCiAgICAgQ2FudmFz
R3JhZGllbnQgXAotICAgIENhbnZhc0ludEFycmF5IFwKICAgICBDYW52YXNQYXR0ZXJuIFwKLSAg
ICBDYW52YXNQcm9ncmFtIFwKLSAgICBDYW52YXNSZW5kZXJidWZmZXIgXAogICAgIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQgXAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCBcCi0gICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEIFwKLSAgICBDYW52YXNTaGFkZXIgXAotICAgIENhbnZhc1No
b3J0QXJyYXkgXAotICAgIENhbnZhc1RleHR1cmUgXAotICAgIENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5IFwKLSAgICBDYW52YXNVbnNpZ25lZEludEFycmF5IFwKLSAgICBDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXkgXAogICAgIENoYXJhY3RlckRhdGEgXAogICAgIENsaWVudFJlY3QgXAogICAgIENs
aWVudFJlY3RMaXN0IFwKQEAgLTM5NCw2ICszNzcsMjMgQEAgRE9NX0NMQVNTRVMgPSBcCiAgICAg
VHJlZVdhbGtlciBcCiAgICAgVUlFdmVudCBcCiAgICAgVmFsaWRpdHlTdGF0ZSBcCisgICAgV2Vi
R0xBY3RpdmVJbmZvIFwKKyAgICBXZWJHTEFycmF5IFwKKyAgICBXZWJHTEFycmF5QnVmZmVyIFwK
KyAgICBXZWJHTEJ1ZmZlciBcCisgICAgV2ViR0xCeXRlQXJyYXkgXAorICAgIFdlYkdMRmxvYXRB
cnJheSBcCisgICAgV2ViR0xGcmFtZWJ1ZmZlciBcCisgICAgV2ViR0xJbnRBcnJheSBcCisgICAg
V2ViR0xQcm9ncmFtIFwKKyAgICBXZWJHTFJlbmRlcmJ1ZmZlciBcCisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IFwKKyAgICBXZWJHTFNoYWRlciBcCisgICAgV2ViR0xTaG9ydEFycmF5IFwKKyAg
ICBXZWJHTFRleHR1cmUgXAorICAgIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgXAorICAgIFdlYkdM
VW5zaWduZWRJbnRBcnJheSBcCisgICAgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgXAogICAgIFdl
YktpdEFuaW1hdGlvbkV2ZW50IFwKICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUgXAogICAgIFdl
YktpdENTU0tleWZyYW1lc1J1bGUgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29y
ZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTc2LDI4ICs3NiwyOCBAQAogICAgICAg
ICAgICAgJ2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5pZGwnLAogICAgICAgICAgICAgJ2RvbS9X
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsJywKICAgICAgICAgICAgICdkb20vV2hlZWxFdmVudC5p
ZGwnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FjdGl2ZUluZm8uaWRsJywKLSAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwnLAotICAgICAgICAgICAgJ2h0
bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzQnVmZmVyLmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQnl0
ZUFycmF5LmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5p
ZGwnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmlkbCcsCiAg
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuaWRsJywKLSAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc1BhdHRlcm4uaWRsJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQ
aXhlbEFycmF5LmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5p
ZGwnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGwnLAog
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsJywKICAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsJywKLSAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsJywKLSAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuaWRsJywKLSAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9DYW52YXNTaG9ydEFycmF5LmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaWRsJywKLSAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNVbnNpZ25lZEludEFycmF5LmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMv
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMv
Q2FudmFzVGV4dHVyZS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQWN0aXZl
SW5mby5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaWRsJywKKyAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmlkbCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTEJ5dGVBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRmxv
YXRBcnJheS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
aWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmlkbCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCcsCisgICAgICAgICAgICAnaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9X
ZWJHTFNoYWRlci5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJh
eS5pZGwnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwnLAorICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsJywKKyAgICAg
ICAgICAgICdodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5pZGwnLAogICAgICAgICAg
ICAgJ2h0bWwvRGF0YUdyaWRDb2x1bW4uaWRsJywKICAgICAgICAgICAgICdodG1sL0RhdGFHcmlk
Q29sdW1uTGlzdC5pZGwnLAogICAgICAgICAgICAgJ2h0bWwvRmlsZS5pZGwnLApAQCAtNjM1LDE3
ICs2MzUsMTcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhBYnN0cmFjdFdv
cmtlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNQaXhl
bEFycmF5Q3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzQXJyYXlDdXN0b20uaCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2Fu
dmFzQXJyYXlCdWZmZXJDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0
b20vVjhDYW52YXNCeXRlQXJyYXlDdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNJbnRBcnJheUN1c3RvbS5jcHAnLAotICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwJywKLSAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCi0gICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0
b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25l
ZEludEFycmF5Q3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCcsCi0gICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3Vz
dG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1
c3RvbS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5QnVm
ZmVyQ3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xC
eXRlQXJyYXlDdXN0b20uY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhX
ZWJHTEludEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCcsCisgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCisgICAgICAg
ICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5j
cHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRB
cnJheUN1c3RvbS5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5n
cy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9uQ3VzdG9tLmNwcCcsCkBAIC0xMjY4LDUy
ICsxMjY4LDUyIEBACiAgICAgICAgICAgICAnaGlzdG9yeS9IaXN0b3J5SXRlbS5oJywKICAgICAg
ICAgICAgICdoaXN0b3J5L1BhZ2VDYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2hpc3RvcnkvUGFn
ZUNhY2hlLmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmNwcCcsCi0g
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaCcsCi0gICAgICAgICAgICAnaHRt
bC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuY3BwJywKLSAgICAgICAgICAgICdodG1sL2NhbnZh
cy9DYW52YXNBcnJheUJ1ZmZlci5oJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNC
dWZmZXIuY3BwJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaCcsCi0g
ICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmNwcCcsCi0gICAgICAgICAg
ICAnaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmgnLAotICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc0Zsb2F0QXJyYXkuY3BwJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52
YXNGbG9hdEFycmF5LmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVm
ZmVyLmNwcCcsCi0gICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaCcs
CiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzR3JhZGllbnQuY3BwJywKICAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9DYW52YXNHcmFkaWVudC5oJywKLSAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNJbnRBcnJheS5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZh
c0ludEFycmF5LmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5jcHAn
LAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oJywKICAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9DYW52YXNQYXR0ZXJuLmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52
YXMvQ2FudmFzUGF0dGVybi5oJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQaXhl
bEFycmF5LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUGl4ZWxBcnJheS5o
JywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNQcm9ncmFtLmNwcCcsCi0gICAgICAg
ICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5oJywKLSAgICAgICAgICAgICdodG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJidWZmZXIuY3BwJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJidWZmZXIuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuY3BwJywK
LSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuaCcsCi0gICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvY2Fu
dmFzL0NhbnZhc1Nob3J0QXJyYXkuaCcsCiAgICAgICAgICAgICAnaHRtbC9jYW52YXMvQ2FudmFz
U3R5bGUuY3BwJywKICAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oJywKLSAg
ICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmNwcCcsCi0gICAgICAgICAgICAn
aHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5oJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9D
YW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXkuY3BwJywKLSAgICAgICAgICAgICdodG1sL2NhbnZhcy9DYW52YXNV
bnNpZ25lZEludEFycmF5LmgnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5jcHAnLAotICAgICAgICAgICAgJ2h0bWwvY2FudmFzL0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEFycmF5LmNw
cCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oJywKKyAgICAgICAgICAg
ICdodG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xBcnJheUJ1ZmZlci5oJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJH
TEJ1ZmZlci5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgnLAor
ICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xGbG9hdEFycmF5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xG
bG9hdEFycmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
Y3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgnLAorICAg
ICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dl
YkdMT2JqZWN0LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuaCcs
CisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyYnVmZmVyLmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcCcsCisgICAg
ICAgICAgICAnaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaCcsCisgICAgICAgICAgICAnaHRtbC9j
YW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcCcsCisgICAgICAgICAgICAnaHRtbC9jYW52YXMvV2Vi
R0xTaG9ydEFycmF5LmgnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5j
cHAnLAorICAgICAgICAgICAgJ2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oJywKKyAgICAgICAg
ICAgICdodG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCcsCisgICAgICAgICAg
ICAnaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oJywKKyAgICAgICAgICAgICdo
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwJywKKyAgICAgICAgICAgICdodG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaCcsCisgICAgICAgICAgICAnaHRtbC9jYW52
YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3BwJywKKyAgICAgICAgICAgICdodG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oJywKICAgICAgICAgICAgICdodG1sL0NvbGxlY3Rp
b25DYWNoZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgnLAogICAg
ICAgICAgICAgJ2h0bWwvQ29sbGVjdGlvblR5cGUuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNzczLDcg
Kzc3Myw2IEBACiAJCTQ2RjlENUREMEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ2RjlENURB
MEIwRDYwMTcwMDI4RUUzNiAvKiBhbGlhc0N1cnNvci5wbmcgKi87IH07CiAJCTQ2RjlENURFMEIw
RDYwMTcwMDI4RUUzNiAvKiBub0Ryb3BDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NkY5RDVEQjBCMEQ2MDE3MDAyOEVFMzYgLyogbm9E
cm9wQ3Vyc29yLnBuZyAqLzsgfTsKIAkJNDZGOUQ1REYwQjBENjAxNzAwMjhFRTM2IC8qIHByb2dy
ZXNzQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDZGOUQ1REMwQjBENjAxNzAwMjhFRTM2IC8qIHByb2dyZXNzQ3Vyc29yLnBuZyAqLzsg
fTsKLQkJNDkyMjczQTMxMDgzQjNCMTAwRUU1Qzg0IC8qIEpTQ2FudmFzQXJyYXlDdXN0b20uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDkyMjczQTIx
MDgzQjNCMTAwRUU1Qzg0IC8qIEpTQ2FudmFzQXJyYXlDdXN0b20uY3BwICovOyB9OwogCQk0OTQ4
NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0ODRGQjMxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc0dyYWRpZW50LmNwcCAqLzsgfTsKIAkJNDk0ODRGQzIxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OTQ4NEZCNDEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuaCAq
LzsgfTsKIAkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk0ODRGQjYxMDJD
RjIzQzAwMTg3REQzIC8qIENhbnZhc1BhdHRlcm4uY3BwICovOyB9OwpAQCAtNzk4LDQwICs3OTcs
OCBAQAogCQk0OTgzOTE1OTBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgzOTE1NjBGMUU3
NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CiAJCTQ5ODM5MTYzMEYxRThF
RTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYxMEYxRThFRTEwMEMy
Mzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcCAqLzsgfTsKIAkJNDk4Mzkx
NjQwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTYyMEYxRThF
RTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmggKi87IH07Ci0JCTQ5
QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwICovOyB9OwotCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5o
ICovOyB9OwotCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCAqLzsgfTsKLQkJNDlD
N0I5OTYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MzEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuaCAqLzsgfTsKLQkJNDlDN0I5OTcxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
RnJhbWVidWZmZXIuY3BwICovOyB9OwotCQk0OUM3Qjk5ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlND
YW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5ODUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIu
aCAqLzsgfTsKLQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4
ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLzsgfTsKLQkJNDlDN0I5
OUMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODkxMDQyRDJEMzAwMDlENDQ3IC8q
IEpTQ2FudmFzUHJvZ3JhbS5oICovOyB9OwotCQk0OUM3Qjk5RDEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVy
YnVmZmVyLmNwcCAqLzsgfTsKLQkJNDlDN0I5OUUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFz
UmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuaCAq
LzsgfTsKLQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOThGMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAgKi87IH07Ci0JCTQ5QzdCOUEzMTA0
MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2Fu
dmFzU2hhZGVyLmggKi87IH07Ci0JCTQ5QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZh
c1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5OTExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAgKi87IH07
Ci0JCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTkyMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCAqLzsgfTsKLQkJNDlDN0I5QzgxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBODEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVy
LmNwcCAqLzsgfTsKLQkJNDlDN0I5QzkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QTkx
MDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5oICovOyB9OwotCQk0OUM3QjlDQjEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFCMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52
YXNCeXRlQXJyYXkuY3BwICovOyB9OwotCQk0OUM3QjlDQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUM3QjlBQzEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi87IH07
Ci0JCTQ5QzdCOUNFMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlBRTEwNDJE
MzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuY3BwICovOyB9OwotCQk0OUM3QjlDRjEw
NDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUFGMTA0MkQzMkUwMDA5RDQ0NyAvKiBD
YW52YXNGcmFtZWJ1ZmZlci5oICovOyB9OwotCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyog
Q2FudmFzT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3BwICovOyB9
OwotCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCNTEwNDJEMzJGMDAw
OUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi87IH07Ci0JCTQ5QzdCOUQ2MTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmNw
cCAqLzsgfTsKLQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUI3MTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQcm9ncmFtLmggKi87IH07Ci0JCTQ5QzdCOUQ5MTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1JlbmRlcmJ1ZmZlci5jcHAgKi87IH07Ci0JCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUJBMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJidWZm
ZXIuaCAqLzsgfTsKIAkJNDlDN0I5REMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlDN0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
ICovOyB9OwogCQk0OUM3QjlERDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlD
N0I5QkQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsK
LQkJNDlDN0I5REYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlC
RjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLzsgfTsK
LQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovOyB9OwotCQk0
OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNTaGFkZXIuY3BwICovOyB9OwotCQk0OUM3QjlFMzEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggKi87IH07
Ci0JCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUM1MTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmNwcCAqLzsgfTsKLQkJNDlDN0I5RTYxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUM2MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJl
LmggKi87IH07CiAJCTQ5QzdCOUZDMTA0MkQzNjUwMDA5RDQ0NyAvKiBHcmFwaGljc0NvbnRleHQz
RC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5
RkIxMDQyRDM2NTAwMDlENDQ3IC8qIEdyYXBoaWNzQ29udGV4dDNELmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlDN0JBMDAxMDQyRDM4QzAwMDlE
NDQ3IC8qIENhbnZhczNETGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5QzdCOUZEMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLmgg
Ki87IH07CiAJCTQ5QzdCQTAxMTA0MkQzOEMwMDA5RDQ0NyAvKiBDYW52YXMzRExheWVyLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5RkUxMDQy
RDM4QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIubW0gKi87IH07CkBAIC04NjMsNjkgKzgzMCwx
MSBAQAogCQk0OUU5MTJBQzBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBNzBFRkFD
OTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5jcHAgKi87IH07CiAJCTQ5RTkxMkFEMEVGQUM5
MDYwMDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUU5MTJBODBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9u
TGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTQ5RTkxMkFFMEVGQUM5MDYwMDlEMENBRiAvKiBUaW1pbmdGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFOTEyQTkwRUZBQzkwNjAwOUQw
Q0FGIC8qIFRpbWluZ0Z1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNDlFRUNEREYxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc0FycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
REM3MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDREUw
MTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNEQzgxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZh
c0FycmF5LmggKi87IH07Ci0JCTQ5RUVDREUyMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNBcnJh
eUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0OUVFQ0RDQTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuY3BwICovOyB9
OwotCQk0OUVFQ0RFMzEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRENCMTA1MDND
MjMwMDA5OUZBQiAvKiBDYW52YXNBcnJheUJ1ZmZlci5oICovOyB9OwotCQk0OUVFQ0RFNTEwNTAz
QzI0MDAwOTlGQUIgLyogQ2FudmFzRmxvYXRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0RDRDEwNTAzQzIzMDAwOTlGQUIgLyogQ2Fu
dmFzRmxvYXRBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDREU2MTA1MDNDMjQwMDA5OUZBQiAvKiBD
YW52YXNGbG9hdEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFQ0RDRTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzRmxvYXRBcnJheS5oICov
OyB9OwotCQk0OUVFQ0RFODEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNERDAxMDUw
M0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNERTkxMDUw
M0MyNDAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0REMTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFz
SW50QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNERUIxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1No
b3J0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNERDMxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Nob3J0QXJyYXkuY3BwICovOyB9
OwotCQk0OUVFQ0RFQzEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNERDQxMDUwM0My
MzAwMDk5RkFCIC8qIENhbnZhc1Nob3J0QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNERUUxMDUwM0My
NDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ2MTA1MDNDMjMwMDA5OUZBQiAv
KiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDREVGMTA1MDNDMjQw
MDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNERDcxMDUwM0MyMzAwMDk5RkFCIC8qIENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggKi87IH07Ci0JCTQ5RUVDREYxMTA1MDNDMjQwMDA5OUZB
QiAvKiBDYW52YXNVbnNpZ25lZEludEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDREQ5MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZEludEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNERjIxMDUwM0MyNDAwMDk5RkFCIC8q
IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRERBMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25l
ZEludEFycmF5LmggKi87IH07Ci0JCTQ5RUVDREY0MTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFRUNEREMxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheS5jcHAgKi87IH07Ci0JCTQ5RUVDREY1MTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDREREMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuaCAqLzsgfTsKLQkJNDlFRUNGMDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJy
YXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUNFRjIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuY3BwICov
OyB9OwotCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjMx
MDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuaCAqLzsgfTsKLQkJNDlFRUNG
MDIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNDEwNTA3MEM0MDAwOTlG
QUIgLyogSlNDYW52YXNGbG9hdEFycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDMxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFz
RmxvYXRBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52
YXNJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFQ0VGNjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5jcHAgKi87
IH07Ci0JCTQ5RUVDRjA1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0VGNzEwNTA3
MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5oICovOyB9OwotCQk0OUVFQ0YwNjEwNTA3
MEM0MDAwOTlGQUIgLyogSlNDYW52YXNTaG9ydEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAvKiBK
U0NhbnZhc1Nob3J0QXJyYXkuY3BwICovOyB9OwotCQk0OUVFQ0YwNzEwNTA3MEM0MDAwOTlGQUIg
LyogSlNDYW52YXNTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFQ0VGOTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNTaG9ydEFy
cmF5LmggKi87IH07Ci0JCTQ5RUVDRjA4MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUZBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNGMDkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmggKi87IH07Ci0JCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRkMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJh
eS5jcHAgKi87IH07Ci0JCTQ5RUVDRjBCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUZEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXku
aCAqLzsgfTsKLQkJNDlFRUNGMEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVDRUZFMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eS5jcHAgKi87IH07Ci0JCTQ5RUVDRjBEMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNFRkYxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmggKi87IH07Ci0JCTQ5RUVDRjFCMTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVD
RjE5MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmNwcCAqLzsgfTsKLQkJNDlFRUNG
MUMxMDUwNzJGMzAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjFBMTA1MDcyRjMwMDA5OUZBQiAvKiBK
U0NhbnZhc0FycmF5LmggKi87IH07Ci0JCTQ5RUVDRjc4MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Nh
bnZhc0J5dGVBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFQ0Y3MTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNCeXRlQXJy
YXlDdXN0b20uY3BwICovOyB9OwotCQk0OUVFQ0Y3OTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52
YXNGbG9hdEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJy
YXlDdXN0b20uY3BwICovOyB9OwotCQk0OUVFQ0Y3QTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52
YXNJbnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0OUVFQ0Y3MzEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUN1
c3RvbS5jcHAgKi87IH07Ci0JCTQ5RUVDRjdCMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1No
b3J0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUN1
c3RvbS5jcHAgKi87IH07Ci0JCTQ5RUVDRjdDMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjc1MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDlFRUNGN0QxMDUwOEQ5QzAwMDk5RkFC
IC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFQ0Y3NjEwNTA4RDlDMDAwOTlGQUIgLyog
SlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKLQkJNDlFRUNGN0UxMDUw
OEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjc3MTA1MDhE
OUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAgKi87IH07
Ci0JCTQ5RUVDRkFCMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUNGOTkxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHAgKi87IH07Ci0JCTQ5RUVDRkFDMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVDRjlBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCAqLzsgfTsKLQkJNDlFRUNGQUQxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2Fu
dmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUIxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0
ZUFycmF5Q29uc3RydWN0b3IuY3BwICovOyB9OwotCQk0OUVFQ0ZBRTEwNTA5MzgyMDAwOTlGQUIg
LyogSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2Fu
dmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLzsgfTsKLQkJNDlFRUNGQUYxMDUwOTM4MjAwMDk5
RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRjlEMTA1MDkzODIwMDA5OUZBQiAv
KiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07Ci0JCTQ5RUVDRkIwMTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUUxMDUwOTM4MjAw
MDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07Ci0JCTQ5RUVD
RkIxMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGOUYxMDUw
OTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07Ci0J
CTQ5RUVDRkIyMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkEw
MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaCAqLzsgfTsK
LQkJNDlFRUNGQjUxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVDRkEzMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAgKi87IH07Ci0JCTQ5RUVDRkI2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJy
YXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlFRUNGQTQxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0
cnVjdG9yLmggKi87IH07Ci0JCTQ5RUVDRkI3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGQTUxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07Ci0JCTQ5RUVDRkI4MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkE2MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLzsg
fTsKLQkJNDlFRUNGQjkxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJh
eUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5RUVDRkE3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07Ci0JCTQ5RUVDRkJBMTA1MDkzODIwMDA5OUZBQiAvKiBK
U0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUNGQTgxMDUwOTM4MjAwMDk5RkFCIC8qIEpT
Q2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07Ci0JCTQ5RUVDRkJCMTA1
MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkE5
MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
LmNwcCAqLzsgfTsKLQkJNDlFRUNGQkMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVDRkFBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CiAJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0MxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi87IH07CiAJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi87IH07Ci0JCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyog
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICovOyB9OwogCQk0OUVFRDE0RTEwNTE5NzFB
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEIxMDUxOTcxOTAw
MDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAqLzsgfTsKLQkJ
NDlFRUQxNEYxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3Vz
dG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3Rv
bS5jcHAgKi87IH07CiAJCTQ5RUVEMTUwMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlFRUQxNEQxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAgKi87IH07CiAJCTRBOEM5NkVCMEJFNjkwMzIwMDRFRUZGMCAvKiBT
ZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEE4Qzk2RUEwQkU2OTAzMjAwNEVFRkYwIC8qIFNlbGVjdGlvbkNvbnRy
b2xsZXJNYWMubW0gKi87IH07CiAJCTRCMjcwOEM3MEFGMTlFRTQwMDY1MTI3RiAvKiBQYXN0ZWJv
YXJkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjI3
MDhDNTBBRjE5RUU0MDA2NTEyN0YgLyogUGFzdGVib2FyZC5oICovOyB9OwpAQCAtMTE5OSw2ICsx
MTA4LDExNyBAQAogCQk2NURGMzIzQzA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJu
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NURGMzIz
NjA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNQYXR0ZXJuLmggKi87IH07CiAJCTY1REYzMjYx
MDlEMUUxOTkwMDBCRTMyNSAvKiBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2NTgxQUYwOUQxNEVFNjAw
MEU2MUQ3IC8qIFVzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgKi87IH07CiAJCTY1RkVBODY5
MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkVBODY4MDk4MzNBREUwMEJFRDRBQiAvKiBQYWdlLmNwcCAq
LzsgfTsKKwkJNkU4MjBDM0IxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xBcnJheUN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTgyMEMy
MjEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTEFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNkU4
MjBDM0UxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4MjBDMjUxMEEzQjJD
MDAwQzZCRTE2IC8qIEpTV2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwICovOyB9OworCQk2RTgyMEM0
MTEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkU4MjBDMjgxMEEzQjJDMDAw
QzZCRTE2IC8qIEpTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNkU4MjBDNDQx
MEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xJbnRBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTgyMEMyQjEwQTNCMkMwMDBDNkJF
MTYgLyogSlNXZWJHTEludEFycmF5Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNkU4MjBDNDUxMEEzQjJD
MDAwQzZCRTE2IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODIwQzJDMTBBM0IyQzAwMEM2
QkUxNiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CisJCTZFODIw
QzQ4MTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RTgyMEMyRjEwQTNCMkMw
MDBDNkJFMTYgLyogSlNXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwICovOyB9OworCQk2RTgyMEM0
QjEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFODIwQzMyMTBB
M0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwICovOyB9
OworCQk2RTgyMEM0RTEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlD
dXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NkU4MjBDMzUxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9t
LmNwcCAqLzsgfTsKKwkJNkU4MjBDNTExMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkU4MjBDMzgxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXlDdXN0b20uY3BwICovOyB9OworCQk2RUEzN0RERjEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xBY3RpdmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUEzN0RBODEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBY3RpdmVJbmZvLmggKi87
IH07CisJCTZFQTM3REUwMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFjdGl2ZUluZm8uaWRsIGlu
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RBOTEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBY3RpdmVJbmZvLmlkbCAqLzsgfTsKKwkJNkVBMzdERTEx
MEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQUExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
QXJyYXkuY3BwICovOyB9OworCQk2RUEzN0RFMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBcnJh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdE
QUIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuaCAqLzsgfTsKKwkJNkVBMzdERTMxMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RBQzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xB
cnJheS5pZGwgKi87IH07CisJCTZFQTM3REU0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFQTM3REFEMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVyLmNwcCAqLzsgfTsK
KwkJNkVBMzdERTUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXlCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REFFMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVyLmggKi87IH07CisJCTZFQTM3REU2MTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQUYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
QXJyYXlCdWZmZXIuaWRsICovOyB9OworCQk2RUEzN0RFNzEwQTNBMDU0MDA0MUYwOUYgLyogV2Vi
R0xCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVBMzdEQjAxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnVmZmVyLmNwcCAqLzsgfTsKKwkJ
NkVBMzdERTgxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RCMTEwQTNBMDU0MDA0MUYwOUYg
LyogV2ViR0xCdWZmZXIuaCAqLzsgfTsKKwkJNkVBMzdERTkxMEEzQTA1NDAwNDFGMDlGIC8qIFdl
YkdMQnVmZmVyLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVBMzdEQjIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnVmZmVyLmlkbCAqLzsgfTsK
KwkJNkVBMzdERUExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnl0ZUFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REIzMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEJ5dGVBcnJheS5jcHAgKi87IH07CisJCTZFQTM3REVCMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQjQxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnl0ZUFy
cmF5LmggKi87IH07CisJCTZFQTM3REVDMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEJ5dGVBcnJh
eS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QTM3REI1MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEJ5dGVBcnJheS5pZGwgKi87IH07CisJCTZF
QTM3REVEMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEZsb2F0QXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQjYxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMRmxvYXRBcnJheS5jcHAgKi87IH07CisJCTZFQTM3REVFMTBBM0EwNTQwMDQx
RjA5RiAvKiBXZWJHTEZsb2F0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFQTM3REI3MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEZsb2F0QXJy
YXkuaCAqLzsgfTsKKwkJNkVBMzdERUYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRmxvYXRBcnJh
eS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QTM3REI4MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEZsb2F0QXJyYXkuaWRsICovOyB9OworCQk2
RUEzN0RGMDEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RCOTEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi87IH07CisJCTZFQTM3REYxMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RCQTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGcmFt
ZWJ1ZmZlci5oICovOyB9OworCQk2RUEzN0RGMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGcmFt
ZWJ1ZmZlci5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFQTM3REJCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEZyYW1lYnVmZmVyLmlkbCAqLzsg
fTsKKwkJNkVBMzdERjMxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMSW50QXJyYXkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQkMxMEEzQTA1
NDAwNDFGMDlGIC8qIFdlYkdMSW50QXJyYXkuY3BwICovOyB9OworCQk2RUEzN0RGNDEwQTNBMDU0
MDA0MUYwOUYgLyogV2ViR0xJbnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQkQxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMSW50QXJy
YXkuaCAqLzsgfTsKKwkJNkVBMzdERjUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMSW50QXJyYXku
aWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEz
N0RCRTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xJbnRBcnJheS5pZGwgKi87IH07CisJCTZFQTM3
REY2MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTE9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RCRjEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xPYmplY3QuY3BwICovOyB9OworCQk2RUEzN0RGNzEwQTNBMDU0MDA0MUYwOUYgLyogV2Vi
R0xPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFQTM3REMwMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTE9iamVjdC5oICovOyB9OworCQk2RUEz
N0RGODEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REMxMTBBM0EwNTQwMDQxRjA5RiAv
KiBXZWJHTFByb2dyYW0uY3BwICovOyB9OworCQk2RUEzN0RGOTEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUEzN0RDMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xQcm9ncmFtLmggKi87IH07CisJ
CTZFQTM3REZBMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFByb2dyYW0uaWRsIGluIFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RDMzEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xQcm9ncmFtLmlkbCAqLzsgfTsKKwkJNkVBMzdERkIxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REM0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRl
cmJ1ZmZlci5jcHAgKi87IH07CisJCTZFQTM3REZDMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJl
bmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVBMzdEQzUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi87IH07
CisJCTZFQTM3REZEMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5pZGwgaW4g
UmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REM2MTBB
M0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5pZGwgKi87IH07CisJCTZFQTM3REZF
MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdEQzcxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCTZFQTM3RTAwMTBBM0Ew
NTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REM5MTBBM0EwNTQwMDQxRjA5RiAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNkVBMzdFMDIxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3RENCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaWRsICovOyB9OworCQk2RUEzN0UwNDEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVBMzdEQ0QxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmNwcCAqLzsgfTsK
KwkJNkVBMzdFMDUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RDRTEwQTNBMDU0MDA0MUYw
OUYgLyogV2ViR0xTaGFkZXIuaCAqLzsgfTsKKwkJNkVBMzdFMDYxMEEzQTA1NDAwNDFGMDlGIC8q
IFdlYkdMU2hhZGVyLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVBMzdEQ0YxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmlkbCAqLzsg
fTsKKwkJNkVBMzdFMDcxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hvcnRBcnJheS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0REMDEwQTNB
MDU0MDA0MUYwOUYgLyogV2ViR0xTaG9ydEFycmF5LmNwcCAqLzsgfTsKKwkJNkVBMzdFMDgxMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hvcnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdERDExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
U2hvcnRBcnJheS5oICovOyB9OworCQk2RUEzN0UwOTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xT
aG9ydEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVBMzdERDIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hvcnRBcnJheS5pZGwgKi87
IH07CisJCTZFQTM3RTBBMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFRleHR1cmUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVBMzdERDMxMEEzQTA1
NDAwNDFGMDlGIC8qIFdlYkdMVGV4dHVyZS5jcHAgKi87IH07CisJCTZFQTM3RTBCMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTFRleHR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDZFQTM3REQ0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFRleHR1cmUu
aCAqLzsgfTsKKwkJNkVBMzdFMEMxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVGV4dHVyZS5pZGwg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REQ1
MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFRleHR1cmUuaWRsICovOyB9OworCQk2RUEzN0UwRDEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RENjEwQTNBMDU0MDA0MUYw
OUYgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgKi87IH07CisJCTZFQTM3RTBFMTBBM0Ew
NTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0RENzEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oICovOyB9OworCQk2RUEzN0UwRjEwQTNBMDU0MDA0MUYw
OUYgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFQTM3REQ4MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbCAqLzsgfTsKKwkJNkVBMzdFMTAxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEzN0REOTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNp
Z25lZEludEFycmF5LmNwcCAqLzsgfTsKKwkJNkVBMzdFMTExMEEzQTA1NDAwNDFGMDlGIC8qIFdl
YkdMVW5zaWduZWRJbnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkVBMzdEREExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRJbnRB
cnJheS5oICovOyB9OworCQk2RUEzN0UxMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25l
ZEludEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVBMzdEREIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRJbnRBcnJheS5p
ZGwgKi87IH07CisJCTZFQTM3RTEzMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2RUEzN0REQzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3Bw
ICovOyB9OworCQk2RUEzN0UxNDEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
QTM3REREMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oICovOyB9
OworCQk2RUEzN0UxNTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
aWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUEz
N0RERTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsICovOyB9
OworCQk2RUQ3MDEzRjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFjdGl2ZUluZm8uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVENzAxMUQxMEEz
Qjg3RTAwRjBENjE2IC8qIEpTV2ViR0xBY3RpdmVJbmZvLmNwcCAqLzsgfTsKKwkJNkVENzAxNDAx
MEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xBY3RpdmVJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ3MDExRTEwQTNCODdFMDBGMEQ2MTYgLyog
SlNXZWJHTEFjdGl2ZUluZm8uaCAqLzsgfTsKKwkJNkVENzAxNDExMEEzQjg3RTAwRjBENjE2IC8q
IEpTV2ViR0xBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUQ3MDExRjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFycmF5LmNwcCAqLzsg
fTsKKwkJNkVENzAxNDIxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xBcnJheS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVENzAxMjAxMEEzQjg3RTAw
RjBENjE2IC8qIEpTV2ViR0xBcnJheS5oICovOyB9OworCQk2RUQ3MDE0MzEwQTNCODdFMDBGMEQ2
MTYgLyogSlNXZWJHTEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTIxMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJy
YXlCdWZmZXIuY3BwICovOyB9OworCQk2RUQ3MDE0NDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TEFycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RUQ3MDEyMjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFycmF5QnVmZmVyLmggKi87
IH07CisJCTZFRDcwMTQ1MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTIzMTBBM0I4
N0UwMEYwRDYxNiAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLzsgfTsKKwkJNkVENzAxNDYxMEEzQjg3
RTAwRjBENjE2IC8qIEpTV2ViR0xCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTI0MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQnVm
ZmVyLmggKi87IH07CisJCTZFRDcwMTQ3MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQnl0ZUFy
cmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZF
RDcwMTI1MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQnl0ZUFycmF5LmNwcCAqLzsgfTsKKwkJ
NkVENzAxNDgxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xCeXRlQXJyYXkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTI2MTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMQnl0ZUFycmF5LmggKi87IH07CisJCTZFRDcwMTQ5MTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMRmxvYXRBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ3MDEyNzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZs
b2F0QXJyYXkuY3BwICovOyB9OworCQk2RUQ3MDE0QTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TEZsb2F0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZFRDcwMTI4MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMRmxvYXRBcnJheS5oICovOyB9
OworCQk2RUQ3MDE0QjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTI5MTBB
M0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwICovOyB9OworCQk2RUQ3MDE0
QzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ3MDEyQTEwQTNCODdFMDBGMEQ2MTYg
LyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi87IH07CisJCTZFRDcwMTREMTBBM0I4N0UwMEYwRDYx
NiAvKiBKU1dlYkdMSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNkVENzAxMkIxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xJbnRBcnJh
eS5jcHAgKi87IH07CisJCTZFRDcwMTRFMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMSW50QXJy
YXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcw
MTJDMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMSW50QXJyYXkuaCAqLzsgfTsKKwkJNkVENzAx
NEYxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTJEMTBBM0I4N0UwMEYwRDYxNiAv
KiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi87IH07CisJCTZFRDcwMTUwMTBBM0I4N0UwMEYwRDYxNiAv
KiBKU1dlYkdMUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkVENzAxMkUxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xQcm9ncmFtLmggKi87
IH07CisJCTZFRDcwMTUxMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTJG
MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcCAqLzsgfTsKKwkJNkVE
NzAxNTIxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTMwMTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmggKi87IH07CisJCTZFRDcwMTUzMTBBM0I4N0Uw
MEYwRDYxNiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ3MDEzMTEwQTNCODdFMDBGMEQ2MTYgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk2RUQ3MDE1NDEwQTNCODdFMDBG
MEQ2MTYgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTMyMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQk2RUQ3MDE1NTEwQTNCODdFMDBGMEQ2MTYg
LyogSlNXZWJHTFNoYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RUQ3MDEzMzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFNoYWRlci5jcHAg
Ki87IH07CisJCTZFRDcwMTU2MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMU2hhZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RUQ3MDEzNDEwQTNC
ODdFMDBGMEQ2MTYgLyogSlNXZWJHTFNoYWRlci5oICovOyB9OworCQk2RUQ3MDE1NzEwQTNCODdF
MDBGMEQ2MTYgLyogSlNXZWJHTFNob3J0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVENzAxMzUxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xTaG9ydEFycmF5LmNwcCAqLzsgfTsKKwkJNkVENzAxNTgxMEEzQjg3RTAwRjBENjE2IC8qIEpT
V2ViR0xTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2RUQ3MDEzNjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFNob3J0QXJyYXkuaCAq
LzsgfTsKKwkJNkVENzAxNTkxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xUZXh0dXJlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRDcwMTM3MTBB
M0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgKi87IH07CisJCTZFRDcwMTVBMTBB
M0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVGV4dHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVENzAxMzgxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xUZXh0dXJlLmggKi87IH07CisJCTZFRDcwMTVCMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdM
VW5zaWduZWRCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNkVENzAxMzkxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5jcHAgKi87IH07CisJCTZFRDcwMTVDMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdM
VW5zaWduZWRCeXRlQXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDZFRDcwMTNBMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRCeXRl
QXJyYXkuaCAqLzsgfTsKKwkJNkVENzAxNUQxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNp
Z25lZEludEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFRDcwMTNCMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJh
eS5jcHAgKi87IH07CisJCTZFRDcwMTVFMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNkVENzAxM0MxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Lmgg
Ki87IH07CisJCTZFRDcwMTVGMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFRDcwMTNEMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNw
cCAqLzsgfTsKKwkJNkVENzAxNjAxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZFRDcwMTNFMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmgg
Ki87IH07CisJCTZFREY2RkIyMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2RURGNkZBMjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEFycmF5QnVmZmVyQ29uc3Ry
dWN0b3IuY3BwICovOyB9OworCQk2RURGNkZCMzEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZFREY2RkEzMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oICovOyB9OworCQk2RURGNkZCNDEwQTNDQTEwMDA5REREQTcgLyogSlNX
ZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZFREY2RkE0MTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMQnl0
ZUFycmF5Q29uc3RydWN0b3IuY3BwICovOyB9OworCQk2RURGNkZCNTEwQTNDQTEwMDA5REREQTcg
LyogSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZBNTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJH
TEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCTZFREY2RkI2MTBBM0NBMTAwMDlERERB
NyAvKiBKU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFREY2RkE2MTBBM0NBMTAwMDlERERBNyAvKiBK
U1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNkVERjZGQjcxMEEzQ0Ex
MDAwOUREREE3IC8qIEpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFREY2RkE3MTBBM0NBMTAwMDlERERB
NyAvKiBKU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmggKi87IH07CisJCTZFREY2RkI4MTBB
M0NBMTAwMDlERERBNyAvKiBKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZBODEwQTNDQTEwMDA5
REREQTcgLyogSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwICovOyB9OworCQk2RURGNkZC
OTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFREY2RkE5MTBBM0NBMTAw
MDlERERBNyAvKiBKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5oICovOyB9OworCQk2RURGNkZC
QTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZBQTEwQTND
QTEwMDA5REREQTcgLyogSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi87IH07CisJ
CTZFREY2RkJCMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZB
QjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovOyB9
OworCQk2RURGNkZCQzEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVERjZGQUMxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNkVERjZGQkQxMEEzQ0ExMDAwOUREREE3IC8qIEpT
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZBRDEwQTNDQTEwMDA5REREQTcgLyogSlNX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNkVERjZGQkUxMEEz
Q0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVERjZGQUUxMEEz
Q0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwICov
OyB9OworCQk2RURGNkZCRjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkVERjZGQUYxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5
Q29uc3RydWN0b3IuaCAqLzsgfTsKKwkJNkVERjZGQzAxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RURGNkZCMDEwQTNDQTEwMDA5REREQTcgLyogSlNX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLzsgfTsKKwkJNkVERjZGQzEx
MEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkVERjZGQjEx
MEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5o
ICovOyB9OwogCQk3MjYyNkUwMjBFRjAyMkZFMDBBMDdFMjAgLyogRm9udEZhc3RQYXRoLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNjI2RTAxMEVG
MDIyRkUwMEEwN0UyMCAvKiBGb250RmFzdFBhdGguY3BwICovOyB9OwogCQk3NTQxMzNBODEwMkUw
MEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU0MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8q
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQuaCAqLzsgfTsKIAkJNzU0MTMzQUExMDJFMDBGNDAwMDc1
RDAwIC8qIEluc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU0MTMzQTkxMDJFMDBGNDAwMDc1RDAwIC8qIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuY3BwICovOyB9OwpAQCAtMjQxMyw5ICsyNDMzLDYgQEAKIAkJQTdD
RkIzRDIwQjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDRkIzRDAwQjdFRDEwQTAwNzBDMzJEIC8qIERy
YWdJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0NGQjNENDBCN0VEMTE4MDA3
MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tICovOyB9OwogCQlBN0QwMzE4RTBFOTM1NDAzMDBFMjRB
Q0QgLyogSlNJbWFnZURhdGFDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdEMDMxOEQwRTkzNTQwMzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRh
Q3VzdG9tLmNwcCAqLzsgfTsKLQkJQTdEMjBGNjIxMDdGNDA2OTAwQTgwMzkyIC8qIEpTQ2FudmFz
QWN0aXZlSW5mby5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0QyMEY2MDEwN0Y0MDY5MDBBODAzOTIgLyogSlNDYW52YXNBY3RpdmVJbmZvLmNwcCAq
LzsgfTsKLQkJQTdEMjBGNjMxMDdGNDA2OTAwQTgwMzkyIC8qIEpTQ2FudmFzQWN0aXZlSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjBGNjEx
MDdGNDA2OTAwQTgwMzkyIC8qIEpTQ2FudmFzQWN0aXZlSW5mby5oICovOyB9OwotCQlBN0QyMEY2
RDEwN0Y0MzhCMDBBODAzOTIgLyogQ2FudmFzQWN0aXZlSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEMjBGNkIxMDdGNDM4QjAwQTgwMzkyIC8q
IENhbnZhc0FjdGl2ZUluZm8uaCAqLzsgfTsKIAkJQTdEMjdGQzQwRTBBNTk5RjAwNzlBRDJCIC8q
IFNWR0ZFVGlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0QyN0ZDMzBFMEE1OTlGMDA3OUFEMkIgLyogU1ZHRkVUaWxlLmNwcCAqLzsgfTsKIAkJ
QTdEM0M1MjQwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RDNDNTIzMEI1NzZCNEIwMDJD
QTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdENkIzNDkwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNj
cmlwdExvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdENkIzNDcwRjYxMTA0NTAwQjc5RkQxIC8qIFdvcmtlclNjcmlwdExvYWRlci5oICovOyB9
OwpAQCAtNjAwOSw3ICs2MDI2LDYgQEAKIAkJNDZGOUQ1REEwQjBENjAxNzAwMjhFRTM2IC8qIGFs
aWFzQ3Vyc29yLnBuZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IGltYWdlLnBuZzsgcGF0aCA9IGFsaWFzQ3Vyc29yLnBuZzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDZGOUQ1REIwQjBENjAxNzAwMjhFRTM2IC8qIG5vRHJvcEN1cnNvci5w
bmcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBpbWFn
ZS5wbmc7IHBhdGggPSBub0Ryb3BDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NkY5RDVEQzBCMEQ2MDE3MDAyOEVFMzYgLyogcHJvZ3Jlc3NDdXJzb3IucG5nICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gaW1hZ2UucG5nOyBw
YXRoID0gcHJvZ3Jlc3NDdXJzb3IucG5nOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OTIyNzNBMjEwODNCM0IxMDBFRTVDODQgLyogSlNDYW52YXNBcnJheUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0FycmF5Q3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk0ODRGQjMxMDJDRjIzQzAwMTg3REQzIC8q
IENhbnZhc0dyYWRpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IENhbnZhc0dyYWRpZW50LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNHcmFkaWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5NDg0RkI0MTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNHcmFkaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNH
cmFkaWVudC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0dyYWRpZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ5NDg0RkI1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzR3JhZGllbnQuaWRsOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0dyYWRpZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYwNDAsNDkgKzYwNTYsOSBAQAogCQk0OTgzOTE1NzBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0
Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NNYXRyaXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTgzOTE2MTBGMUU4RUUxMDBDMjM3ODIg
LyogSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU1dlYktpdENTU01hdHJpeENvbnN0cnVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4MzkxNjIwRjFFOEVFMTAwQzIzNzgyIC8qIEpTV2Vi
S2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNCdWZmZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyog
SlNDYW52YXNCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52
YXNCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5ODIxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2FudmFzRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0ZyYW1lYnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTg4MTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U0NhbnZhc1Byb2dyYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5
ODkxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Byb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVy
YnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5OEIxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyYnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1NoYWRlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc1NoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nh
bnZhc1NoYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3Qjk5MTEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNDYW52YXNUZXh0dXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzVGV4dHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNUZXh0dXJlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52
YXNCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFz
QnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUM3QjlBOTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0J1ZmZlci5oOyBwYXRo
ID0gY2FudmFzL0NhbnZhc0J1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OUM3QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IG5hbWUgPSBDYW52YXNCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc0J1ZmZlci5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdCOUFCMTA0MkQzMkUwMDA5RDQ0
NyAvKiBDYW52YXNCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQ2FudmFzQnl0ZUFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNCeXRlQXJyYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlBQzEwNDJEMzJFMDAwOUQ0
NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IENhbnZhc0J5dGVBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlBRDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNCeXRlQXJyYXku
aWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTQ5QzdCOUFFMTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNGcmFtZWJ1
ZmZlci5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlBRjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJh
bWVidWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzRnJhbWVi
dWZmZXIuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUM3QjlCMDEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzRnJhbWVi
dWZmZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0ZyYW1lYnVmZmVyLmlkbDsg
cGF0aCA9IGNhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOUI0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzT2JqZWN0LmNwcDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUM3QjlCNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzT2JqZWN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc09iamVjdC5oOyBwYXRoID0gY2FudmFzL0NhbnZh
c09iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlCNjEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBDYW52YXNQcm9ncmFtLmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNQcm9ncmFt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QjcxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1Byb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2FudmFzUHJvZ3JhbS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1Byb2dyYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QjgxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1By
b2dyYW0uaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1Byb2dyYW0uaWRsOyBwYXRo
ID0gY2FudmFzL0NhbnZhc1Byb2dyYW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUM3QjlCOTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRlcmJ1ZmZlci5jcHA7
IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52YXNSZW5kZXJidWZmZXIu
aDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlDN0I5QkIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZl
ci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzUmVuZGVyYnVmZmVyLmlkbDsgcGF0
aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0OUM3QjlCQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QkQxMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5QkUxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
bmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlC
RjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5j
cHA7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzExMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBu
YW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3
QjlDMjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1NoYWRlci5jcHA7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzU2hhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzMxMDQy
RDMyRjAwMDlENDQ3IC8qIENhbnZhc1NoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBDYW52YXNTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNTaGFkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzQxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1NoYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gQ2FudmFzU2hhZGVyLmlkbDsg
cGF0aCA9IGNhbnZhcy9DYW52YXNTaGFkZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUM3QjlDNTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNUZXh0dXJlLmNwcDsgcGF0aCA9
IGNhbnZhcy9DYW52YXNUZXh0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlDN0I5QzYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzVGV4dHVyZS5oOyBwYXRoID0gY2FudmFzL0NhbnZh
c1RleHR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QzcxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENh
bnZhc1RleHR1cmUuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1RleHR1cmUuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlGQjEwNDJEMzY1MDAwOUQ0NDcgLyogR3JhcGhp
Y3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3ND
b250ZXh0M0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5RkQxMDQyRDM4
QzAwMDlENDQ3IC8qIENhbnZhczNETGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ2FudmFzM0RMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3
QjlGRTEwNDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IENhbnZhczNETGF5ZXIubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MTE0LDc3ICs2MDkwLDExIEBACiAJCTQ5RTkxMkE3MEVGQUM5MDYw
MDlEMENBRiAvKiBBbmltYXRpb25MaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFuaW1hdGlvbkxpc3QuY3BwOyBwYXRoID0gYW5pbWF0aW9uL0FuaW1hdGlvbkxp
c3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUU5MTJBODBFRkFDOTA2MDA5
RDBDQUYgLyogQW5pbWF0aW9uTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBbmltYXRpb25MaXN0Lmg7IHBhdGggPSBhbmltYXRpb24vQW5pbWF0aW9uTGlzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUU5MTJBOTBFRkFDOTA2MDA5RDBDQUYgLyogVGlt
aW5nRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGltaW5nRnVu
Y3Rpb24uaDsgcGF0aCA9IGFuaW1hdGlvbi9UaW1pbmdGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0RDNzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXku
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzQXJyYXkuY3Bw
OyBwYXRoID0gY2FudmFzL0NhbnZhc0FycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNEQzgxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0FycmF5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0FycmF5Lmg7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQzkxMDUwM0My
MzAwMDk5RkFCIC8qIENhbnZhc0FycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0RDQTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXlC
dWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzQXJy
YXlCdWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0IxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZh
c0FycmF5QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0Fy
cmF5QnVmZmVyLmg7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0MxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Fy
cmF5QnVmZmVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNBcnJheUJ1ZmZlci5p
ZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0RDRDEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzRmxvYXRBcnJh
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNGbG9hdEFy
cmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNGbG9hdEFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEQ0UxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0
QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2FudmFzRmxvYXRBcnJh
eS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNEQ0YxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJyYXku
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0Zsb2F0QXJyYXkuaWRsOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0REMDEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzSW50QXJyYXkuY3BwOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0ludEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlFRUNERDExMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0ludEFycmF5Lmg7IHBhdGggPSBjYW52YXMvQ2Fu
dmFzSW50QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDIxMDUw
M0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUg
PSBDYW52YXNJbnRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFzSW50QXJyYXkuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0REMzEwNTAzQzIzMDAwOTlGQUIgLyog
Q2FudmFzU2hvcnRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBDYW52YXNTaG9ydEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNTaG9ydEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDQxMDUwM0MyMzAwMDk5RkFC
IC8qIENhbnZhc1Nob3J0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2FudmFzU2hvcnRBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDUxMDUwM0MyMzAwMDk5RkFCIC8qIENh
bnZhc1Nob3J0QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc1Nob3J0QXJy
YXkuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0RENjEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNERDcxMDUwM0My
MzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Lmg7IHBhdGggPSBjYW52YXMv
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NDlFRUNERDgxMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGw7IHBhdGgg
PSBjYW52YXMvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFQ0REOTEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRJbnRB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDYW52YXNVbnNp
Z25lZEludEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREExMDUwM0MyMzAwMDk5RkFC
IC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oOyBwYXRoID0gY2FudmFzL0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREIxMDUw
M0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsOyBwYXRoID0gY2FudmFzL0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0REQzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eS5jcHA7IHBhdGggPSBjYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREQxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBD
YW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNEREUxMDUwM0My
NDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52
YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OUVFQ0VGMjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0FycmF5QnVmZmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRjMxMDUwNzBDNDAwMDk5RkFCIC8q
IEpTQ2FudmFzQXJyYXlCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYW52YXNBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVF
Q0VGNDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNGbG9hdEFycmF5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzRmxvYXRBcnJheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY1MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0Nh
bnZhc0Zsb2F0QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52
YXNGbG9hdEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY2MTA1
MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzSW50QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJh
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0ludEFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRUY4MTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0NhbnZhc1Nob3J0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYW52YXNTaG9ydEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Nob3J0QXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkExMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDRUZCMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNFRkMxMDUw
NzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIgLyog
SlNDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OUVFQ0VGRTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0VG
RjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGMTkxMDUwNzJGMzAwMDk5RkFCIC8q
IEpTQ2FudmFzQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjFB
MTA1MDcyRjMwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTQ2FudmFzQXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNDlFRUNGNzExMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5
Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGNzIxMDUwOEQ5
QzAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Y3MzEwNTA4RDlDMDAwOTlGQUIgLyogSlND
YW52YXNJbnRBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0NhbnZhc0ludEFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Nob3J0
QXJyYXlDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Y3NTEw
NTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUNGNzYxMDUw
OEQ5QzAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Y3NzEwNTA4RDlD
MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Y5OTEwNTA5Mzgy
MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjlBMTA1MDkzODIwMDA5
OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRjlCMTA1MDkzODIwMDA5OUZBQiAvKiBKU0Nh
bnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OUVFQ0Y5QzEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nh
bnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5RUVDRjlEMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rv
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc0Zsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVD
RjlFMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0Y5RjEwNTA5MzgyMDAw
OTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVDRkEwMTA1MDkzODIwMDA5OUZBQiAvKiBK
U0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5RUVDRkEzMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlD
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRkE0MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Nob3J0QXJy
YXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFQ0ZBNTEw
NTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
RUVDRkE2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3Ry
dWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
RUVDRkE3MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1
Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5RUVDRkE4MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUVFQ0ZBOTEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlD
b25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNDlFRUNGQUExMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAv
KiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0
OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5
Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxNEIxMDUxOTcxOTAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxNEQxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QThDOTZFQTBCRTY5MDMyMDA0RUVGRjAgLyogU2VsZWN0aW9u
Q29udHJvbGxlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBTZWxlY3Rpb25Db250cm9sbGVyTWFjLm1tOyBwYXRoID0gbWFjL1NlbGVjdGlvbkNvbnRyb2xs
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCMjcwOEM1MEFGMTlFRTQw
MDY1MTI3RiAvKiBQYXN0ZWJvYXJkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhc3RlYm9hcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0OTgsNiArNjQw
OCwxMTcgQEAKIAkJNjVERjMyMzYwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYW52YXNQYXR0ZXJuLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1RjgwNjk3MDU0RDlGODYwMDhCRjc3NiAvKiBC
bG9ja0V4Y2VwdGlvbnMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBCbG9ja0V4Y2VwdGlvbnMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk2NUZFQTg2ODA5ODMzQURF
MDBCRUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFODIwQzIyMTBBM0Iy
QzAwMEM2QkUxNiAvKiBKU1dlYkdMQXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkU4MjBDMjUxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xCeXRlQXJy
YXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJH
TEJ5dGVBcnJheUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFODIw
QzI4MTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMRmxvYXRBcnJheUN1c3RvbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFODIwQzJCMTBBM0IyQzAwMEM2QkUx
NiAvKiBKU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTEludEFycmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkU4MjBDMkMxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkU4MjBDMkYxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xTaG9ydEFycmF5Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xTaG9ydEFy
cmF5Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkU4MjBDMzIxMEEz
QjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTgyMEMzNTEwQTNCMkMw
MDBDNkJFMTYgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RTgyMEMzODEwQTNCMkMwMDBDNkJF
MTYgLyogSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQTgxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMQWN0aXZlSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
ZWJHTEFjdGl2ZUluZm8uaDsgcGF0aCA9IGNhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQTkxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
QWN0aXZlSW5mby5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xBY3RpdmVJbmZvLmlk
bDsgcGF0aCA9IGNhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk2RUEzN0RBQTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBcnJheS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEFycmF5LmNwcDsgcGF0aCA9
IGNhbnZhcy9XZWJHTEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVB
MzdEQUIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViR0xBcnJheS5oOyBwYXRoID0gY2FudmFzL1dlYkdMQXJyYXkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQUMxMEEzQTA1NDAwNDFGMDlGIC8q
IFdlYkdMQXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMQXJyYXkuaWRsOyBw
YXRoID0gY2FudmFzL1dlYkdMQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2RUEzN0RBRDEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBcnJheUJ1ZmZlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEFycmF5QnVmZmVyLmNwcDsgcGF0
aCA9IGNhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNkVBMzdEQUUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXlCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xBcnJheUJ1ZmZlci5oOyBwYXRoID0g
Y2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkVBMzdEQUYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXlCdWZmZXIuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFdlYkdMQXJyYXlCdWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdM
QXJyYXlCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUEzN0RCMDEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gV2ViR0xCdWZmZXIuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQjExMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkdMQnVmZmVyLmg7IHBhdGggPSBjYW52YXMvV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQjIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnVmZmVyLmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTEJ1ZmZlci5pZGw7IHBhdGggPSBjYW52YXMv
V2ViR0xCdWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUEzN0RCMzEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xCeXRlQXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xCeXRlQXJyYXkuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
Qnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQjQxMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMQnl0ZUFycmF5Lmg7IHBhdGggPSBjYW52YXMvV2ViR0xCeXRlQXJyYXku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQjUxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMQnl0ZUFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTEJ5dGVB
cnJheS5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xCeXRlQXJyYXkuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2RUEzN0RCNjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGbG9hdEFy
cmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMRmxvYXRB
cnJheS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQjcxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRmxvYXRB
cnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTEZsb2F0QXJyYXku
aDsgcGF0aCA9IGNhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVBMzdEQjgxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRmxvYXRBcnJheS5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xGbG9hdEFycmF5LmlkbDsgcGF0aCA9IGNhbnZh
cy9XZWJHTEZsb2F0QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUEz
N0RCOTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTEZyYW1lYnVmZmVyLmNwcDsgcGF0aCA9IGNh
bnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NkVBMzdEQkExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xGcmFtZWJ1ZmZlci5oOyBwYXRoID0gY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdE
QkIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFdlYkdMRnJhbWVidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMRnJhbWVi
dWZmZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUEzN0RCQzEwQTNBMDU0
MDA0MUYwOUYgLyogV2ViR0xJbnRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJHTEludEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTEludEFycmF5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQkQxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMSW50QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViR0xJbnRBcnJheS5oOyBwYXRoID0gY2FudmFzL1dlYkdMSW50QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQkUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMSW50
QXJyYXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMSW50QXJyYXkuaWRsOyBwYXRo
ID0gY2FudmFzL1dlYkdMSW50QXJyYXkuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2RUEzN0RCRjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xPYmplY3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xPYmplY3QuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQzAx
MEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMT2JqZWN0Lmg7IHBhdGggPSBjYW52YXMvV2ViR0xPYmplY3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQzExMEEzQTA1NDAwNDFGMDlGIC8qIFdl
YkdMUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJH
TFByb2dyYW0uY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REMyMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFByb2dy
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xQcm9ncmFtLmg7IHBh
dGggPSBjYW52YXMvV2ViR0xQcm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFQTM3REMzMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFByb2dyYW0uaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgbmFtZSA9IFdlYkdMUHJvZ3JhbS5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xQcm9ncmFt
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQzQxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMUmVuZGVyYnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFdlYkdMUmVuZGVyYnVmZmVyLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REM1MTBBM0Ew
NTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTFJlbmRlcmJ1ZmZlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVy
YnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REM2MTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0g
V2ViR0xSZW5kZXJidWZmZXIuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdEQzcxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3
REM5MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBj
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTZFQTM3RENCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGgg
PSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVBMzdEQ0QxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVyLmNwcDsgcGF0aCA9
IGNhbnZhcy9XZWJHTFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
QTM3RENFMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXZWJHTFNoYWRlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3RENGMTBBM0EwNTQwMDQxRjA5
RiAvKiBXZWJHTFNoYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xTaGFkZXIu
aWRsOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVBMzdERDAxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hvcnRBcnJheS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFNob3J0QXJyYXkuY3Bw
OyBwYXRoID0gY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZFQTM3REQxMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNob3J0QXJyYXkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xTaG9ydEFycmF5Lmg7IHBhdGgg
PSBjYW52YXMvV2ViR0xTaG9ydEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFQTM3REQyMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNob3J0QXJyYXkuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgbmFtZSA9IFdlYkdMU2hvcnRBcnJheS5pZGw7IHBhdGggPSBjYW52YXMvV2ViR0xT
aG9ydEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdERDMxMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMVGV4dHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBXZWJHTFRleHR1cmUuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMVGV4dHVy
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REQ0MTBBM0EwNTQwMDQx
RjA5RiAvKiBXZWJHTFRleHR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V2ViR0xUZXh0dXJlLmg7IHBhdGggPSBjYW52YXMvV2ViR0xUZXh0dXJlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REQ1MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFRleHR1
cmUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVGV4dHVyZS5pZGw7IHBhdGggPSBj
YW52YXMvV2ViR0xUZXh0dXJlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVB
MzdERDYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5j
cHA7IHBhdGggPSBjYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REQ3MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMVW5z
aWduZWRCeXRlQXJyYXkuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REQ4MTBBM0EwNTQwMDQxRjA5RiAv
KiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVBMzdERDkxMEEzQTA1NDAw
NDFGMDlGIC8qIFdlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFQTM3RERBMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkSW50QXJyYXkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xVbnNpZ25lZEludEFycmF5Lmg7IHBh
dGggPSBjYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTZFQTM3RERCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkSW50QXJy
YXkuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMVW5zaWduZWRJbnRBcnJheS5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkVBMzdEREMxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5LmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRB
cnJheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFQTM3REREMTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oOyBwYXRoID0gY2FudmFzL1dl
YkdMVW5zaWduZWRTaG9ydEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
QTM3RERFMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsOyBwYXRoID0g
Y2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVENzAxMUQxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xBY3RpdmVJbmZvLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xBY3RpdmVJbmZv
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMUUxMEEzQjg3RTAwRjBE
NjE2IC8qIEpTV2ViR0xBY3RpdmVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTV2ViR0xBY3RpdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZF
RDcwMTFGMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJyYXkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkVENzAxMjAxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xBcnJheS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMQXJyYXkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMjExMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xBcnJheUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1dlYkdMQXJyYXlCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3
MDEyMjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFycmF5QnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xBcnJheUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk2RUQ3MDEyMzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQnVmZmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMjQxMEEzQjg3RTAwRjBE
NjE2IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEyNTEw
QTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEJ5dGVBcnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMQnl0ZUFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkVENzAxMjYxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xCeXRlQXJy
YXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEJ5dGVBcnJheS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEyNzEwQTNCODdFMDBGMEQ2MTYg
LyogSlNXZWJHTEZsb2F0QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJHTEZsb2F0QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2RUQ3MDEyODEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZsb2F0QXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEZsb2F0QXJyYXkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMjkxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xG
cmFtZWJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dl
YkdMRnJhbWVidWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEy
QTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xGcmFtZWJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RUQ3MDEyQjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEludEFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xJbnRBcnJh
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcwMTJDMTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMSW50QXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXZWJHTEludEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcw
MTJEMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTZFRDcwMTJFMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMUHJvZ3Jh
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMUHJvZ3JhbS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEyRjEwQTNCODdFMDBGMEQ2MTYgLyog
SlNXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNkVENzAxMzAxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xSZW5kZXJidWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFJlbmRlcmJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEzMTEwQTNCODdFMDBGMEQ2MTYgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RUQ3MDEzMjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMzMxMEEzQjg3RTAw
RjBENjE2IC8qIEpTV2ViR0xTaGFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNXZWJHTFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFRDcwMTM0MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMU2hhZGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNkVENzAxMzUxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xTaG9ydEFycmF5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xTaG9ydEFy
cmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAxMzYxMEEzQjg3RTAw
RjBENjE2IC8qIEpTV2ViR0xTaG9ydEFycmF5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTV2ViR0xTaG9ydEFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTZFRDcwMTM3MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVGV4dHVyZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcwMTM4MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdM
VGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMVGV4dHVy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RUQ3MDEzOTEwQTNCODdFMDBGMEQ2
MTYgLyogSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFRDcwMTNBMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcw
MTNCMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFRDcwMTNDMTBBM0I4N0UwMEYwRDYx
NiAvKiBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk2RUQ3MDEzRDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVENzAx
M0UxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RURGNkZBMjEwQTNDQTEwMDA5REREQTcgLyog
SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RURGNkZBMzEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJH
TEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNkVERjZGQTQxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xCeXRlQXJyYXlDb25z
dHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
Qnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2
RURGNkZBNTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1
Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RURGNkZBNjEwQTNDQTEwMDA5
REREQTcgLyogSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVERjZGQTcxMEEzQ0ExMDAwOUREREE3IC8q
IEpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk2RURGNkZBODEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEludEFycmF5
Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk2RURGNkZBOTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTEludEFycmF5Q29uc3Ry
dWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVERjZGQUExMEEzQ0ExMDAw
OUREREE3IC8qIEpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZFREY2RkFCMTBBM0NBMTAwMDlERERBNyAv
KiBKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNkVERjZGQUMxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVERjZGQUQxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFREY2RkFFMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMVW5z
aWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk2RURGNkZBRjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJH
TFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTZFREY2RkIwMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNkVERjZGQjExMEEzQ0ExMDAwOUREREE3IC8qIEpT
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2MjZFMDEwRUYwMjJGRTAwQTA3RTIwIC8qIEZv
bnRGYXN0UGF0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250
RmFzdFBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NTQxMzNBNzEwMkUw
MEU4MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc1NDEzM0E5MTAyRTAwRjQwMDA3NUQwMCAvKiBJbnNwZWN0b3JUaW1l
bGluZUFnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzY0
MiwxMCArNzY2Myw2IEBACiAJCUE3Q0ZCM0QwMEI3RUQxMEEwMDcwQzMyRCAvKiBEcmFnSW1hZ2Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdJbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0lt
YWdlTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERyYWdJ
bWFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEMDMxOEQwRTkzNTQw
MzAwRTI0QUNEIC8qIEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpTSW1hZ2VEYXRhQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQTdEMjBGM0IxMDdGMzczODAwQTgwMzkyIC8qIENhbnZhc0FjdGl2ZUluZm8u
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IENhbnZhc0FjdGl2ZUluZm8uaWRsOyBwYXRoID0g
Y2FudmFzL0NhbnZhc0FjdGl2ZUluZm8uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBN0QyMEY2MDEwN0Y0MDY5MDBBODAzOTIgLyogSlNDYW52YXNBY3RpdmVJbmZvLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzQWN0aXZlSW5mby5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3RDIwRjYxMTA3RjQwNjkwMEE4MDM5MiAv
KiBKU0NhbnZhc0FjdGl2ZUluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNDYW52YXNBY3RpdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3RDIw
RjZCMTA3RjQzOEIwMEE4MDM5MiAvKiBDYW52YXNBY3RpdmVJbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc0FjdGl2ZUluZm8uaDsgcGF0aCA9IGNhbnZhcy9DYW52
YXNBY3RpdmVJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDI3RkMzMEUw
QTU5OUYwMDc5QUQyQiAvKiBTVkdGRVRpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHRkVUaWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFzdGVib2FyZEhlbHBlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBN0Q2QjM0NzBGNjExMDQ1MDBCNzlGRDEgLyogV29ya2VyU2NyaXB0
TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdvcmtlclNjcmlwdExv
YWRlci5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2FkZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNjAxLDc1ICsxMDYxOCw3NSBAQAogCQk0OTQ4NEZBRTEwMkNG
MDFFMDAxODdERDMgLyogY2FudmFzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKLQkJCQlBN0QyMEY2QjEwN0Y0MzhCMDBBODAzOTIgLyogQ2FudmFzQWN0aXZlSW5m
by5oICovLAotCQkJCUE3RDIwRjNCMTA3RjM3MzgwMEE4MDM5MiAvKiBDYW52YXNBY3RpdmVJbmZv
LmlkbCAqLywKLQkJCQk0OUVFQ0RDNzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXkuY3Bw
ICovLAotCQkJCTQ5RUVDREM4MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5oICovLAot
CQkJCTQ5RUVDREM5MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5pZGwgKi8sCi0JCQkJ
NDlFRUNEQ0ExMDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0FycmF5QnVmZmVyLmNwcCAqLywKLQkJ
CQk0OUVFQ0RDQjEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuaCAqLywKLQkJ
CQk0OUVFQ0RDQzEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuaWRsICovLAot
CQkJCTQ5QzdCOUE4MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuY3BwICovLAotCQkJ
CTQ5QzdCOUE5MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNCdWZmZXIuaCAqLywKLQkJCQk0OUM3
QjlBQTEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnVmZmVyLmlkbCAqLywKLQkJCQk0OUM3QjlB
QjEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmNwcCAqLywKLQkJCQk0OUM3QjlB
QzEwNDJEMzJFMDAwOUQ0NDcgLyogQ2FudmFzQnl0ZUFycmF5LmggKi8sCi0JCQkJNDlDN0I5QUQx
MDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNEQ0Qx
MDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRENF
MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNGbG9hdEFycmF5LmggKi8sCi0JCQkJNDlFRUNEQ0Yx
MDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0Zsb2F0QXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUFF
MTA0MkQzMkUwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgKi8sCi0JCQkJNDlDN0I5
QUYxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmggKi8sCi0JCQkJNDlDN0I5
QjAxMDQyRDMyRTAwMDlENDQ3IC8qIENhbnZhc0ZyYW1lYnVmZmVyLmlkbCAqLywKIAkJCQk0OTQ4
NEZCMzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwICovLAogCQkJCTQ5NDg0
RkI0MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5oICovLAogCQkJCTQ5NDg0RkI1
MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNHcmFkaWVudC5pZGwgKi8sCi0JCQkJNDlFRUNERDAx
MDUwM0MyMzAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0REMTEw
NTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuaCAqLywKLQkJCQk0OUVFQ0REMjEwNTAz
QzIzMDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUI0MTA0MkQz
MkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuY3BwICovLAotCQkJCTQ5QzdCOUI1MTA0MkQzMkYw
MDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuaCAqLywKIAkJCQk0OTQ4NEZCNjEwMkNGMjNDMDAxODdE
RDMgLyogQ2FudmFzUGF0dGVybi5jcHAgKi8sCiAJCQkJNDk0ODRGQjcxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1BhdHRlcm4uaCAqLywKIAkJCQk0OTQ4NEZCODEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzUGF0dGVybi5pZGwgKi8sCiAJCQkJNDk0ODRGQjkxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1BpeGVsQXJyYXkuY3BwICovLAogCQkJCTQ5NDg0RkJBMTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNQaXhlbEFycmF5LmggKi8sCiAJCQkJNDk0ODRGQkIxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1BpeGVsQXJyYXkuaWRsICovLAotCQkJCTQ5QzdCOUI2MTA0MkQzMkYwMDA5RDQ0NyAvKiBD
YW52YXNQcm9ncmFtLmNwcCAqLywKLQkJCQk0OUM3QjlCNzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzUHJvZ3JhbS5oICovLAotCQkJCTQ5QzdCOUI4MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNQ
cm9ncmFtLmlkbCAqLywKLQkJCQk0OUM3QjlCOTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVu
ZGVyYnVmZmVyLmNwcCAqLywKLQkJCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
UmVuZGVyYnVmZmVyLmggKi8sCi0JCQkJNDlDN0I5QkIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZh
c1JlbmRlcmJ1ZmZlci5pZGwgKi8sCiAJCQkJNDlDN0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovLAogCQkJCTQ5QzdCOUJEMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNDlDN0I5QkUxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaWRsICovLAogCQkJCTQ5NDg0RkJDMTAy
Q0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwICovLAogCQkJCTQ5
NDg0RkJEMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywK
IAkJCQk0OTQ4NEZCRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmlkbCAqLywKLQkJCQk0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELmNwcCAqLywKLQkJCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmggKi8sCi0JCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8q
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5pZGwgKi8sCi0JCQkJNDlDN0I5QzIxMDQyRDMyRjAw
MDlENDQ3IC8qIENhbnZhc1NoYWRlci5jcHAgKi8sCi0JCQkJNDlDN0I5QzMxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1NoYWRlci5oICovLAotCQkJCTQ5QzdCOUM0MTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNTaGFkZXIuaWRsICovLAotCQkJCTQ5RUVDREQzMTA1MDNDMjMwMDA5OUZBQiAvKiBD
YW52YXNTaG9ydEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0RENDEwNTAzQzIzMDAwOTlGQUIgLyog
Q2FudmFzU2hvcnRBcnJheS5oICovLAotCQkJCTQ5RUVDREQ1MTA1MDNDMjMwMDA5OUZBQiAvKiBD
YW52YXNTaG9ydEFycmF5LmlkbCAqLywKIAkJCQk0OTQ4NEZCRjEwMkNGMjNDMDAxODdERDMgLyog
Q2FudmFzU3R5bGUuY3BwICovLAogCQkJCTQ5NDg0RkMwMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52
YXNTdHlsZS5oICovLAotCQkJCTQ5QzdCOUM1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0
dXJlLmNwcCAqLywKLQkJCQk0OUM3QjlDNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVy
ZS5oICovLAotCQkJCTQ5QzdCOUM3MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNUZXh0dXJlLmlk
bCAqLywKLQkJCQk0OUVFQ0RENjEwNTAzQzIzMDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDREQ3MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheS5oICovLAotCQkJCTQ5RUVDREQ4MTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwgKi8sCi0JCQkJNDlFRUNERDkxMDUwM0MyMzAwMDk5RkFC
IC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwICovLAotCQkJCTQ5RUVDRERBMTA1MDNDMjMw
MDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8sCi0JCQkJNDlFRUNEREIxMDUw
M0MyMzAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaWRsICovLAotCQkJCTQ5RUVD
RERDMTA1MDNDMjMwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwICovLAot
CQkJCTQ5RUVDREREMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXku
aCAqLywKLQkJCQk0OUVFQ0RERTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzVW5zaWduZWRTaG9y
dEFycmF5LmlkbCAqLywKKwkJCQk2RUEzN0RBODEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBY3Rp
dmVJbmZvLmggKi8sCisJCQkJNkVBMzdEQTkxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQWN0aXZl
SW5mby5pZGwgKi8sCisJCQkJNkVBMzdEQUExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXku
Y3BwICovLAorCQkJCTZFQTM3REFCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5LmggKi8s
CisJCQkJNkVBMzdEQUMxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuaWRsICovLAorCQkJ
CTZFQTM3REFEMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVyLmNwcCAqLywKKwkJ
CQk2RUEzN0RBRTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xBcnJheUJ1ZmZlci5oICovLAorCQkJ
CTZFQTM3REFGMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVyLmlkbCAqLywKKwkJ
CQk2RUEzN0RCMDEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xCdWZmZXIuY3BwICovLAorCQkJCTZF
QTM3REIxMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEJ1ZmZlci5oICovLAorCQkJCTZFQTM3REIy
MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEJ1ZmZlci5pZGwgKi8sCisJCQkJNkVBMzdEQjMxMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMQnl0ZUFycmF5LmNwcCAqLywKKwkJCQk2RUEzN0RCNDEwQTNB
MDU0MDA0MUYwOUYgLyogV2ViR0xCeXRlQXJyYXkuaCAqLywKKwkJCQk2RUEzN0RCNTEwQTNBMDU0
MDA0MUYwOUYgLyogV2ViR0xCeXRlQXJyYXkuaWRsICovLAorCQkJCTZFQTM3REI2MTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEZsb2F0QXJyYXkuY3BwICovLAorCQkJCTZFQTM3REI3MTBBM0EwNTQw
MDQxRjA5RiAvKiBXZWJHTEZsb2F0QXJyYXkuaCAqLywKKwkJCQk2RUEzN0RCODEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xGbG9hdEFycmF5LmlkbCAqLywKKwkJCQk2RUEzN0RCOTEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xGcmFtZWJ1ZmZlci5jcHAgKi8sCisJCQkJNkVBMzdEQkExMEEzQTA1NDAw
NDFGMDlGIC8qIFdlYkdMRnJhbWVidWZmZXIuaCAqLywKKwkJCQk2RUEzN0RCQjEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xGcmFtZWJ1ZmZlci5pZGwgKi8sCisJCQkJNkVBMzdEQkMxMEEzQTA1NDAw
NDFGMDlGIC8qIFdlYkdMSW50QXJyYXkuY3BwICovLAorCQkJCTZFQTM3REJEMTBBM0EwNTQwMDQx
RjA5RiAvKiBXZWJHTEludEFycmF5LmggKi8sCisJCQkJNkVBMzdEQkUxMEEzQTA1NDAwNDFGMDlG
IC8qIFdlYkdMSW50QXJyYXkuaWRsICovLAorCQkJCTZFQTM3REJGMTBBM0EwNTQwMDQxRjA5RiAv
KiBXZWJHTE9iamVjdC5jcHAgKi8sCisJCQkJNkVBMzdEQzAxMEEzQTA1NDAwNDFGMDlGIC8qIFdl
YkdMT2JqZWN0LmggKi8sCisJCQkJNkVBMzdEQzExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMUHJv
Z3JhbS5jcHAgKi8sCisJCQkJNkVBMzdEQzIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMUHJvZ3Jh
bS5oICovLAorCQkJCTZFQTM3REMzMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFByb2dyYW0uaWRs
ICovLAorCQkJCTZFQTM3REM0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5j
cHAgKi8sCisJCQkJNkVBMzdEQzUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMUmVuZGVyYnVmZmVy
LmggKi8sCisJCQkJNkVBMzdEQzYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMUmVuZGVyYnVmZmVy
LmlkbCAqLywKKwkJCQk2RUEzN0RDNzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcCAqLywKKwkJCQk2RUEzN0RDOTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmggKi8sCisJCQkJNkVBMzdEQ0IxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
UmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCisJCQkJNkVBMzdEQ0QxMEEzQTA1NDAwNDFGMDlGIC8q
IFdlYkdMU2hhZGVyLmNwcCAqLywKKwkJCQk2RUEzN0RDRTEwQTNBMDU0MDA0MUYwOUYgLyogV2Vi
R0xTaGFkZXIuaCAqLywKKwkJCQk2RUEzN0RDRjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xTaGFk
ZXIuaWRsICovLAorCQkJCTZFQTM3REQwMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNob3J0QXJy
YXkuY3BwICovLAorCQkJCTZFQTM3REQxMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNob3J0QXJy
YXkuaCAqLywKKwkJCQk2RUEzN0REMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xTaG9ydEFycmF5
LmlkbCAqLywKKwkJCQk2RUEzN0REMzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xUZXh0dXJlLmNw
cCAqLywKKwkJCQk2RUEzN0RENDEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xUZXh0dXJlLmggKi8s
CisJCQkJNkVBMzdERDUxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVGV4dHVyZS5pZGwgKi8sCisJ
CQkJNkVBMzdERDYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3Bw
ICovLAorCQkJCTZFQTM3REQ3MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5LmggKi8sCisJCQkJNkVBMzdERDgxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkuaWRsICovLAorCQkJCTZFQTM3REQ5MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVu
c2lnbmVkSW50QXJyYXkuY3BwICovLAorCQkJCTZFQTM3RERBMTBBM0EwNTQwMDQxRjA5RiAvKiBX
ZWJHTFVuc2lnbmVkSW50QXJyYXkuaCAqLywKKwkJCQk2RUEzN0REQjEwQTNBMDU0MDA0MUYwOUYg
LyogV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbCAqLywKKwkJCQk2RUEzN0REQzEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3BwICovLAorCQkJCTZFQTM3REREMTBB
M0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oICovLAorCQkJCTZFQTM3
RERFMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5pZGwgKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IGNhbnZhczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0x
Mjc3MCw0OCArMTI3ODcsMTQgQEAKIAkJQTgzQjc5MDgwQ0NBRkYyQjAwMEIwODI1IC8qIEhUTUwg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUE3RDIwRjYw
MTA3RjQwNjkwMEE4MDM5MiAvKiBKU0NhbnZhc0FjdGl2ZUluZm8uY3BwICovLAotCQkJCUE3RDIw
RjYxMTA3RjQwNjkwMEE4MDM5MiAvKiBKU0NhbnZhc0FjdGl2ZUluZm8uaCAqLywKLQkJCQk0OUVF
Q0YxOTEwNTA3MkYzMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheS5jcHAgKi8sCi0JCQkJNDlFRUNG
MUExMDUwNzJGMzAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXkuaCAqLywKLQkJCQk0OUVFQ0VGMjEw
NTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5jcHAgKi8sCi0JCQkJNDlFRUNF
RjMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzQXJyYXlCdWZmZXIuaCAqLywKLQkJCQk0OUM3
Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCdWZmZXIuY3BwICovLAotCQkJCTQ5QzdC
OTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5oICovLAotCQkJCTQ5QzdCOTgy
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J5dGVBcnJheS5jcHAgKi8sCi0JCQkJNDlDN0I5
ODMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzQnl0ZUFycmF5LmggKi8sCi0JCQkJNDlFRUNF
RjQxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5jcHAgKi8sCi0JCQkJNDlF
RUNFRjUxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzRmxvYXRBcnJheS5oICovLAotCQkJCTQ5
QzdCOTg0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0ZyYW1lYnVmZmVyLmNwcCAqLywKLQkJ
CQk0OUM3Qjk4NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNGcmFtZWJ1ZmZlci5oICovLAog
CQkJCTY1REYzMjMzMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dyYWRpZW50LmNwcCAqLywK
IAkJCQk2NURGMzIzNDA5RDFERTY1MDAwQkUzMjUgLyogSlNDYW52YXNHcmFkaWVudC5oICovLAot
CQkJCTQ5RUVDRUY2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5LmNwcCAqLywK
LQkJCQk0OUVFQ0VGNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5oICovLAog
CQkJCTY1REYzMjM1MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uY3BwICovLAog
CQkJCTY1REYzMjM2MDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc1BhdHRlcm4uaCAqLywKLQkJ
CQk0OUM3Qjk4ODEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmNwcCAqLywKLQkJ
CQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNQcm9ncmFtLmggKi8sCi0JCQkJ
NDlDN0I5OEExMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCAqLywK
LQkJCQk0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNSZW5kZXJidWZmZXIuaCAq
LywKIAkJCQk0OUVFRDEzQzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLywKIAkJCQk0OUVFRDEzRDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywKIAkJCQk0OUVFRDEzRjEwNTE5Njk0MDAwOTlG
QUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKLQkJCQk0OUVFRDE0MDEwNTE5
Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwICovLAotCQkJCTQ5
RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oICov
LAotCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1NoYWRlci5jcHAgKi8s
Ci0JCQkJNDlDN0I5OTAxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVyLmggKi8sCi0J
CQkJNDlFRUNFRjgxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheS5jcHAgKi8s
Ci0JCQkJNDlFRUNFRjkxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheS5oICov
LAotCQkJCTQ5QzdCOTkxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuY3BwICov
LAotCQkJCTQ5QzdCOTkyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCAqLywK
LQkJCQk0OUVFQ0VGQTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eS5jcHAgKi8sCi0JCQkJNDlFRUNFRkIxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuaCAqLywKLQkJCQk0OUVFQ0VGQzEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52
YXNVbnNpZ25lZEludEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VGRDEwNTA3MEM0MDAwOTlGQUIg
LyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5LmggKi8sCi0JCQkJNDlFRUNFRkUxMDUwNzBDNDAw
MDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCAqLywKLQkJCQk0OUVFQ0VG
RjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCAqLywKIAkJ
CQlCQzc3RDE2NTBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbi5jcHAgKi8sCiAJ
CQkJQkM3N0QxNjYwRkYxOUY1NTAwNzA4ODdCIC8qIEpTRGF0YUdyaWRDb2x1bW4uaCAqLywKIAkJ
CQlCQzc3RDE2NzBGRjE5RjU1MDA3MDg4N0IgLyogSlNEYXRhR3JpZENvbHVtbkxpc3QuY3BwICov
LApAQCAtMTI5NzAsNiArMTI5NTMsNDAgQEAKIAkJCQlFNDQ2MTQxMzBDRDY4MjY5MDBGQURBNzUg
LyogSlNUaW1lUmFuZ2VzLmggKi8sCiAJCQkJMTVDNzcwOTIxMDBEM0NBODAwNUJBMjY3IC8qIEpT
VmFsaWRpdHlTdGF0ZS5jcHAgKi8sCiAJCQkJMTVDNzcwOTExMDBEM0NBODAwNUJBMjY3IC8qIEpT
VmFsaWRpdHlTdGF0ZS5oICovLAorCQkJCTZFRDcwMTFEMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dl
YkdMQWN0aXZlSW5mby5jcHAgKi8sCisJCQkJNkVENzAxMUUxMEEzQjg3RTAwRjBENjE2IC8qIEpT
V2ViR0xBY3RpdmVJbmZvLmggKi8sCisJCQkJNkVENzAxMUYxMEEzQjg3RTAwRjBENjE2IC8qIEpT
V2ViR0xBcnJheS5jcHAgKi8sCisJCQkJNkVENzAxMjAxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xBcnJheS5oICovLAorCQkJCTZFRDcwMTIxMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJy
YXlCdWZmZXIuY3BwICovLAorCQkJCTZFRDcwMTIyMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdM
QXJyYXlCdWZmZXIuaCAqLywKKwkJCQk2RUQ3MDEyMzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TEJ1ZmZlci5jcHAgKi8sCisJCQkJNkVENzAxMjQxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xC
dWZmZXIuaCAqLywKKwkJCQk2RUQ3MDEyNTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEJ5dGVB
cnJheS5jcHAgKi8sCisJCQkJNkVENzAxMjYxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xCeXRl
QXJyYXkuaCAqLywKKwkJCQk2RUQ3MDEyNzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZsb2F0
QXJyYXkuY3BwICovLAorCQkJCTZFRDcwMTI4MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMRmxv
YXRBcnJheS5oICovLAorCQkJCTZFRDcwMTI5MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMRnJh
bWVidWZmZXIuY3BwICovLAorCQkJCTZFRDcwMTJBMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdM
RnJhbWVidWZmZXIuaCAqLywKKwkJCQk2RUQ3MDEyQjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TEludEFycmF5LmNwcCAqLywKKwkJCQk2RUQ3MDEyQzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TEludEFycmF5LmggKi8sCisJCQkJNkVENzAxMkQxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xQ
cm9ncmFtLmNwcCAqLywKKwkJCQk2RUQ3MDEyRTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFBy
b2dyYW0uaCAqLywKKwkJCQk2RUQ3MDEyRjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFJlbmRl
cmJ1ZmZlci5jcHAgKi8sCisJCQkJNkVENzAxMzAxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xS
ZW5kZXJidWZmZXIuaCAqLywKKwkJCQk2RUQ3MDEzMTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJCTZFRDcwMTMyMTBBM0I4N0UwMEYwRDYxNiAv
KiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCTZFRDcwMTMzMTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywKKwkJCQk2RUQ3MDEzNDEwQTNCODdFMDBGMEQ2
MTYgLyogSlNXZWJHTFNoYWRlci5oICovLAorCQkJCTZFRDcwMTM1MTBBM0I4N0UwMEYwRDYxNiAv
KiBKU1dlYkdMU2hvcnRBcnJheS5jcHAgKi8sCisJCQkJNkVENzAxMzYxMEEzQjg3RTAwRjBENjE2
IC8qIEpTV2ViR0xTaG9ydEFycmF5LmggKi8sCisJCQkJNkVENzAxMzcxMEEzQjg3RTAwRjBENjE2
IC8qIEpTV2ViR0xUZXh0dXJlLmNwcCAqLywKKwkJCQk2RUQ3MDEzODEwQTNCODdFMDBGMEQ2MTYg
LyogSlNXZWJHTFRleHR1cmUuaCAqLywKKwkJCQk2RUQ3MDEzOTEwQTNCODdFMDBGMEQ2MTYgLyog
SlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCAqLywKKwkJCQk2RUQ3MDEzQTEwQTNCODdFMDBG
MEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmggKi8sCisJCQkJNkVENzAxM0IxMEEz
Qjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcCAqLywKKwkJCQk2RUQ3
MDEzQzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXkuaCAqLywKKwkJ
CQk2RUQ3MDEzRDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5j
cHAgKi8sCisJCQkJNkVENzAxM0UxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXkuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gSFRNTDsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CkBAIC0xNDM5MiwxNyArMTQ0MDksOCBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJ
NDE1QjdDNTQwRkY1OThFNjAwNjc3MEY3IC8qIEpTQWJzdHJhY3RXb3JrZXJDdXN0b20uY3BwICov
LAogCQkJCUJDMkVENkJCMEM2QkQyRjAwMDkyMEJGRiAvKiBKU0F0dHJDdXN0b20uY3BwICovLAot
CQkJCTQ5MjI3M0EyMTA4M0IzQjEwMEVFNUM4NCAvKiBKU0NhbnZhc0FycmF5Q3VzdG9tLmNwcCAq
LywKLQkJCQk0OUVFQ0Y3MTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNCeXRlQXJyYXlDdXN0
b20uY3BwICovLAotCQkJCTQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0
QXJyYXlDdXN0b20uY3BwICovLAotCQkJCTQ5RUVDRjczMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Nh
bnZhc0ludEFycmF5Q3VzdG9tLmNwcCAqLywKIAkJCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwICovLAotCQkJCTQ5RUVEMTRD
MTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAg
Ki8sCiAJCQkJNDlFRUQxNEQxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUNGNzQxMDUwOEQ5QzAwMDk5RkFCIC8qIEpTQ2Fu
dmFzU2hvcnRBcnJheUN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUNGNzUxMDUwOEQ5QzAwMDk5RkFC
IC8qIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwICovLAotCQkJCTQ5RUVDRjc2
MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwICov
LAotCQkJCTQ5RUVDRjc3MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJOTNCQTU5QjEwRjJBQTVGRTAwOEU4RTk5IC8qIEpTQ0RB
VEFTZWN0aW9uQ3VzdG9tLmNwcCAqLywKIAkJCQk5M0JBNTlCMTBGMkFBNUZFMDA4RThFOTkgLyog
SlNDREFUQVNlY3Rpb25DdXN0b20uY3BwICovLAogCQkJCUJDQTgzRTUxMEQ3Q0UyMDUwMDM0MjFB
OCAvKiBKU0NsaXBib2FyZEN1c3RvbS5jcHAgKi8sCkBAIC0xNDQ5NCw2ICsxNDUwMiwxNSBAQAog
CQkJCUIyRDNGQzg5MEMyMjEyQ0IwMENGMzYxOCAvKiBKU1NWR1RyYW5zZm9ybUxpc3RDdXN0b20u
Y3BwICovLAogCQkJCTFBMkM0MEFBMERFQjU1QUEwMDVBRjE5RSAvKiBKU1RleHRDdXN0b20uY3Bw
ICovLAogCQkJCTUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJDdXN0b20u
Y3BwICovLAorCQkJCTZFODIwQzIyMTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMQXJyYXlDdXN0
b20uY3BwICovLAorCQkJCTZFODIwQzI1MTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMQnl0ZUFy
cmF5Q3VzdG9tLmNwcCAqLywKKwkJCQk2RTgyMEMyODEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJH
TEZsb2F0QXJyYXlDdXN0b20uY3BwICovLAorCQkJCTZFODIwQzJCMTBBM0IyQzAwMEM2QkUxNiAv
KiBKU1dlYkdMSW50QXJyYXlDdXN0b20uY3BwICovLAorCQkJCTZFODIwQzJDMTBBM0IyQzAwMEM2
QkUxNiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8sCisJCQkJNkU4MjBD
MkYxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCAqLywKKwkJ
CQk2RTgyMEMzMjEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3Vz
dG9tLmNwcCAqLywKKwkJCQk2RTgyMEMzNTEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTFVuc2ln
bmVkSW50QXJyYXlDdXN0b20uY3BwICovLAorCQkJCTZFODIwQzM4MTBBM0IyQzAwMEM2QkUxNiAv
KiBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcCAqLywKIAkJCQk1MThBMzRDNjEw
MjZDOEM5MDAxQjY4OTYgLyogSlNXZWJTb2NrZXRDdXN0b20uY3BwICovLAogCQkJCUUxODI1OEFC
MEVGM0NENzAwMDkzMzI0MiAvKiBKU1dvcmtlckNvbnRleHRDdXN0b20uY3BwICovLAogCQkJCUUx
Q0E1Q0JCMEU4Q0RDQUYwMEU4RUY5MCAvKiBKU1dvcmtlckN1c3RvbS5jcHAgKi8sCkBAIC0xNDc2
NCwyMiArMTQ3ODEsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTRFRUZGQzYwRDM0NTUwQzAw
NDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgKi8sCiAJCQkJRTRFRUZGQzcwRDM0NTUw
QzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5oICovLAotCQkJCTQ5RUVDRjk5MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwICovLAotCQkJ
CTQ5RUVDRjlBMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaCAqLywKLQkJCQk0OUVFQ0Y5QjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNCeXRlQXJy
YXlDb25zdHJ1Y3Rvci5jcHAgKi8sCi0JCQkJNDlFRUNGOUMxMDUwOTM4MjAwMDk5RkFCIC8qIEpT
Q2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLywKLQkJCQk0OUVFQ0Y5RDEwNTA5MzgyMDAw
OTlGQUIgLyogSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IuY3BwICovLAotCQkJCTQ5RUVD
RjlFMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oICov
LAotCQkJCTQ5RUVDRjlGMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0ludEFycmF5Q29uc3Ry
dWN0b3IuY3BwICovLAotCQkJCTQ5RUVDRkEwMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0lu
dEFycmF5Q29uc3RydWN0b3IuaCAqLywKLQkJCQk0OUVFQ0ZBMzEwNTA5MzgyMDAwOTlGQUIgLyog
SlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwICovLAotCQkJCTQ5RUVDRkE0MTA1MDkz
ODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovLAotCQkJCTQ5
RUVDRkE1MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3Ry
dWN0b3IuY3BwICovLAotCQkJCTQ5RUVDRkE2MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLywKLQkJCQk0OUVFQ0ZBNzEwNTA5MzgyMDAw
OTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwICovLAotCQkJ
CTQ5RUVDRkE4MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25z
dHJ1Y3Rvci5oICovLAotCQkJCTQ5RUVDRkE5MTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vu
c2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLywKLQkJCQk0OUVFQ0ZBQTEwNTA5Mzgy
MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oICovLAog
CQkJCUUwRkVGMzcxQjc3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29uc3RydWN0b3Iu
Y3BwICovLAogCQkJCUUwRkVGMzcxQjY3QzUzRUFDMUMxRkJFRSAvKiBKU0V2ZW50U291cmNlQ29u
c3RydWN0b3IuaCAqLywKIAkJCQlCQzZDNDlGMTBEN0RCQTA1MDBGRkE1NTggLyogSlNJbWFnZUNv
bnN0cnVjdG9yLmNwcCAqLywKQEAgLTE0NzkwLDYgKzE0NzkxLDIyIEBACiAJCQkJQTgyNkU4QUMw
QTFBOEYyMzAwQ0QxQkI2IC8qIEpTT3B0aW9uQ29uc3RydWN0b3IuaCAqLywKIAkJCQk0MTVCN0M1
NTBGRjU5OEU2MDA2NzcwRjcgLyogSlNTaGFyZWRXb3JrZXJDb25zdHJ1Y3Rvci5jcHAgKi8sCiAJ
CQkJNDE1QjdDNjIwRkY1QTc2NzAwNjc3MEY3IC8qIEpTU2hhcmVkV29ya2VyQ29uc3RydWN0b3Iu
aCAqLywKKwkJCQk2RURGNkZBMjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEFycmF5QnVmZmVy
Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTZFREY2RkEzMTBBM0NBMTAwMDlERERBNyAvKiBKU1dl
YkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oICovLAorCQkJCTZFREY2RkE0MTBBM0NBMTAwMDlE
RERBNyAvKiBKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTZFREY2RkE1
MTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuaCAqLywKKwkJ
CQk2RURGNkZBNjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rv
ci5jcHAgKi8sCisJCQkJNkVERjZGQTcxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xGbG9hdEFy
cmF5Q29uc3RydWN0b3IuaCAqLywKKwkJCQk2RURGNkZBODEwQTNDQTEwMDA5REREQTcgLyogSlNX
ZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwICovLAorCQkJCTZFREY2RkE5MTBBM0NBMTAwMDlE
RERBNyAvKiBKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5oICovLAorCQkJCTZFREY2RkFBMTBB
M0NBMTAwMDlERERBNyAvKiBKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCAqLywKKwkJ
CQk2RURGNkZBQjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rv
ci5oICovLAorCQkJCTZFREY2RkFDMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMVW5zaWduZWRC
eXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJNkVERjZGQUQxMEEzQ0ExMDAwOUREREE3
IC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggKi8sCisJCQkJNkVERjZG
QUUxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3Iu
Y3BwICovLAorCQkJCTZFREY2RkFGMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMVW5zaWduZWRJ
bnRBcnJheUNvbnN0cnVjdG9yLmggKi8sCisJCQkJNkVERjZGQjAxMEEzQ0ExMDAwOUREREE3IC8q
IEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAgKi8sCisJCQkJNkVERjZG
QjExMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rv
ci5oICovLAogCQkJCTQ5ODM5MTYxMEYxRThFRTEwMEMyMzc4MiAvKiBKU1dlYktpdENTU01hdHJp
eENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQk0OTgzOTE2MjBGMUU4RUUxMDBDMjM3ODIgLyogSlNX
ZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rvci5oICovLAogCQkJCTQ5NEJENzk3MEY1NUM5MEUwMDc0
NzgyOCAvKiBKU1dlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwICovLApAQCAtMTU3NzksMzAgKzE1
Nzk2LDEyIEBACiAJCQkJQkNCMTZDMjgwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlZFhTTFN0eWxl
U2hlZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFCQyAvKiBD
YWNoZVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0JBMDAxMDQyRDM4QzAwMDlENDQ3
IC8qIENhbnZhczNETGF5ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCUE3RDIwRjZEMTA3RjQzOEIw
MEE4MDM5MiAvKiBDYW52YXNBY3RpdmVJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0RF
MDEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5
RUVDREUzMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNBcnJheUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDlDN0I5QzkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlDN0I5Q0MxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J5dGVBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNERTYxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZh
c0Zsb2F0QXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOUNGMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQzIxMDJD
RjIzQzAwMTg3REQzIC8qIENhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVF
Q0RFOTEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzSW50QXJyYXkuaCBpbiBIZWFkZXJzICovLAot
CQkJCTQ5QzdCOUQ1MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5NDg0RkM1MTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNQYXR0ZXJuLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0OTQ4NEZDODEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxB
cnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8qIENh
bnZhc1Byb2dyYW0uaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0
NyAvKiBDYW52YXNSZW5kZXJidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUREMTA0
MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk0OTQ4NEZDQjEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlFMzEwNDJEMzJG
MDAwOUQ0NDcgLyogQ2FudmFzU2hhZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0RFQzEw
NTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzU2hvcnRBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk0OUM3QjlFNjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzVGV4dHVyZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNDlFRUNERUYxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0RGMjEwNTAzQzI0MDAwOTlGQUIgLyog
Q2FudmFzVW5zaWduZWRJbnRBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNERjUxMDUw
M0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjU1MEI2OUUwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE0MTg1RUUwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFw
cGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBMDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hh
cmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNjkzNSwzNSArMTY5MzQsMTAgQEAKIAkJ
CQlCQzEyNEYwMDBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJJbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzk0NjM0ODEwN0E5MzY2MDA4NTcxOTMgLyogSlNCZWZvcmVMb2FkRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NDlFMjRDMTA3RDRBODQwMEI1NzkzRiAvKiBKU0NhbGxiYWNrRGF0
YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTdEMjBGNjMxMDdGNDA2OTAwQTgwMzkyIC8qIEpTQ2Fu
dmFzQWN0aXZlSW5mby5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGMUMxMDUwNzJGMzAwMDk5
RkFCIC8qIEpTQ2FudmFzQXJyYXkuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjAxMTA1MDcw
QzQwMDA5OUZBQiAvKiBKU0NhbnZhc0FycmF5QnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0
OUVFQ0ZBQzEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52
YXNCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QzdCOTk2MTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU0NhbnZhc0J5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGQUUxMDUwOTM4
MjAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAotCQkJCTQ5RUVDRjAzMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXkuaCBp
biBIZWFkZXJzICovLAotCQkJCTQ5RUVDRkIwMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc0Zs
b2F0QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5OTgxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
REYzMjNBMDlEMURFNjUwMDBCRTMyNSAvKiBKU0NhbnZhc0dyYWRpZW50LmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUVFQ0YwNTEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNDlFRUNGQjIxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzSW50
QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVERjMyM0MwOUQxREU2NTAw
MEJFMzI1IC8qIEpTQ2FudmFzUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlDN0I5OUMx
MDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlDN0I5OUUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0OUVFRDE0MzEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVFRDE0NTEwNTE5Njk0MDAwOTlGQUIg
LyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVE
MTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlDN0I5QTMxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0YwNzEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52
YXNTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0ZCNjEwNTA5MzgyMDAwOTlG
QUIgLyogSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc1RleHR1cmUuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTQ5RUVDRjA5MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5LmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0ZCODEwNTA5MzgyMDAwOTlGQUIgLyog
SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0OUVFQ0YwQjEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEludEFycmF5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk0OUVFQ0ZCQTEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUVDRjBE
MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJNDlFRUNGQkMxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjlCN0ExMEJBNjAz
MjYwMDg1NDA2NCAvKiBKU0NEQVRBU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVERjMx
RjQwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNDMDY1ODgwRjNDRTJBNzAwQ0QyRDg3IC8qIEpTQ2xpZW50UmVjdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0xODA5OSw2ICsxODA3Myw0OSBAQAogCQkJCTE0NzlGQUYwMTA5QUUzNzUwMERFRDY1
NSAvKiBSZW5kZXJSdWJ5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3OUZBRjIxMDlBRTM3
NTAwREVENjU1IC8qIFJlbmRlclJ1YnlSdW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzlGQUY0
MTA5QUUzNzUwMERFRDY1NSAvKiBSZW5kZXJSdWJ5VGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NkVBMzdEREYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQWN0aXZlSW5mby5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNkVBMzdERTIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZFQTM3REU1MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5QnVmZmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUEzN0RFODEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFQTM3REVCMTBBM0EwNTQwMDQxRjA5RiAvKiBX
ZWJHTEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdERUUxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMRmxvYXRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdERjExMEEz
QTA1NDAwNDFGMDlGIC8qIFdlYkdMRnJhbWVidWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
QTM3REY0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEludEFycmF5LmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RUEzN0RGNzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTZFQTM3REY5MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFByb2dyYW0uaCBpbiBI
ZWFkZXJzICovLAorCQkJCTZFQTM3REZDMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJlbmRlcmJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdFMDAxMEEzQTA1NDAwNDFGMDlGIC8qIFdl
YkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdFMDUxMEEzQTA1
NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUEzN0UwODEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2
RUEzN0UwQjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RUEzN0UwRTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdFMTExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5z
aWduZWRJbnRBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVBMzdFMTQxMEEzQTA1NDAwNDFG
MDlGIC8qIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUQ3
MDE0MDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFjdGl2ZUluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTZFRDcwMTQyMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJyYXkuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZFRDcwMTQ0MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJyYXlCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTZFRDcwMTQ2MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dl
YkdMQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUQ3MDE0ODEwQTNCODdFMDBGMEQ2MTYg
LyogSlNXZWJHTEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVENzAxNEExMEEzQjg3
RTAwRjBENjE2IC8qIEpTV2ViR0xGbG9hdEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUQ3
MDE0QzEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEZyYW1lYnVmZmVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2RUQ3MDE0RTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEludEFycmF5LmggaW4g
SGVhZGVycyAqLywKKwkJCQk2RUQ3MDE1MDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFByb2dy
YW0uaCBpbiBIZWFkZXJzICovLAorCQkJCTZFRDcwMTUyMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dl
YkdMUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RUQ3MDE1NDEwQTNCODdFMDBG
MEQ2MTYgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTZF
RDcwMTU2MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RUQ3MDE1ODEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFNob3J0QXJyYXkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTZFRDcwMTVBMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMVGV4dHVy
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVENzAxNUMxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVENzAxNUUxMEEzQjg3
RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk2RUQ3MDE2MDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNkVERjZGQjMxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RURGNkZCNTEwQTND
QTEwMDA5REREQTcgLyogSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQk2RURGNkZCNzEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTEZsb2F0QXJyYXlDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkVERjZGQjkxMEEzQ0ExMDAwOUREREE3IC8q
IEpTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RURGNkZC
QjEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkVERjZGQkQxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RURGNkZCRjEwQTND
QTEwMDA5REREQTcgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNkVERjZGQzExMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xODIwMCw2ICsxODIx
NywyMyBAQAogCQkJCTg1MTM2Q0E4MEFFRDY2NTkwMEY5MEEzRCAvKiB3ZXN0UmVzaXplQ3Vyc29y
LnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpv
b21JbkN1cnNvci5wbmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEz
OUY0RiAvKiB6b29tT3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNkVBMzdERTAx
MEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQWN0aXZlSW5mby5pZGwgaW4gUmVzb3VyY2VzICovLAor
CQkJCTZFQTM3REUzMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEFycmF5LmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCisJCQkJNkVBMzdERTYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXlCdWZmZXIu
aWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0RFOTEwQTNBMDU0MDA0MUYwOUYgLyogV2Vi
R0xCdWZmZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0RFQzEwQTNBMDU0MDA0MUYw
OUYgLyogV2ViR0xCeXRlQXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0RFRjEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xGbG9hdEFycmF5LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJ
CQkJNkVBMzdERjIxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMRnJhbWVidWZmZXIuaWRsIGluIFJl
c291cmNlcyAqLywKKwkJCQk2RUEzN0RGNTEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xJbnRBcnJh
eS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTZFQTM3REZBMTBBM0EwNTQwMDQxRjA5RiAvKiBX
ZWJHTFByb2dyYW0uaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0RGRDEwQTNBMDU0MDA0
MUYwOUYgLyogV2ViR0xSZW5kZXJidWZmZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEz
N0UwMjEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCBpbiBSZXNv
dXJjZXMgKi8sCisJCQkJNkVBMzdFMDYxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMU2hhZGVyLmlk
bCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJNkVBMzdFMDkxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdM
U2hvcnRBcnJheS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTZFQTM3RTBDMTBBM0EwNTQwMDQx
RjA5RiAvKiBXZWJHTFRleHR1cmUuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0UwRjEw
QTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5pZGwgaW4gUmVzb3VyY2Vz
ICovLAorCQkJCTZFQTM3RTEyMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFVuc2lnbmVkSW50QXJy
YXkuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk2RUEzN0UxNTEwQTNBMDU0MDA0MUYwOUYgLyog
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE4NDA5LDI5
ICsxODQ0MywxMiBAQAogCQkJCUJDQjE2QzI1MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZWRYQkxE
b2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMyNzA5NzlDM0JEMDA0Njc3NDEg
LyogQ2FjaGVkWFNMU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QkEwMTEw
NDJEMzhDMDAwOUQ0NDcgLyogQ2FudmFzM0RMYXllci5tbSBpbiBTb3VyY2VzICovLAotCQkJCTQ5
RUVDRERGMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0OUVFQ0RFMjEwNTAzQzI0MDAwOTlGQUIgLyogQ2FudmFzQXJyYXlCdWZmZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5QzgxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc0J1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3QjlDQjEwNDJEMzJGMDAwOUQ0NDcgLyogQ2Fu
dmFzQnl0ZUFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDREU1MTA1MDNDMjQwMDA5
OUZBQiAvKiBDYW52YXNGbG9hdEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOUNF
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNGcmFtZWJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0OTQ4NEZDMTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzR3JhZGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCi0JCQkJNDlFRUNERTgxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc0ludEFycmF5
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52
YXNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzQxMDJDRjIzQzAwMTg3REQz
IC8qIENhbnZhc1BhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDk0ODRGQzcxMDJDRjIz
QzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlD
N0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNDlDN0I5RDkxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmJ1ZmZlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEQzEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDQTEwMkNGMjNDMDAx
ODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTQ5QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuY3Bw
IGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1No
YWRlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0RFQjEwNTAzQzI0MDAwOTlGQUIgLyog
Q2FudmFzU2hvcnRBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDRDEwMkNGMjND
MDAxODdERDMgLyogQ2FudmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5RTUx
MDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1RleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
NDlFRUNERUUxMDUwM0MyNDAwMDk5RkFCIC8qIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTQ5RUVDREYxMTA1MDNDMjQwMDA5OUZBQiAvKiBDYW52YXNVbnNp
Z25lZEludEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDREY0MTA1MDNDMjQwMDA5
OUZBQiAvKiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjU1MEI2OUQwOTlERjAyNzAwOTBENzgxIC8qIENEQVRBU2VjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTQxODVFRjBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2OUYwOTlERjAyNzAwOTBENzgxIC8qIENoYXJh
Y3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xOTA3OCw0NiArMTkwOTUsMTIgQEAKIAkJ
CQlCQzEyNEVGRjBDMjY0NDdBMDA5RTIzNDkgLyogSlNCYXJJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDOTQ2MzQ2MTA3QTkzNEIwMDg1NzE5MyAvKiBKU0JlZm9yZUxvYWRFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ5RTI4NzEwN0Q0REI0MDBCNTc5M0YgLyogSlNDYWxsYmFj
a0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTdEMjBGNjIxMDdGNDA2OTAwQTgwMzkyIC8q
IEpTQ2FudmFzQWN0aXZlSW5mby5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0YxQjEwNTA3
MkYzMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVF
Q0YwMDEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0OUVFQ0ZBQjEwNTA5MzgyMDAwOTlGQUIgLyogSlNDYW52YXNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5MjI3M0EzMTA4M0IzQjEwMEVF
NUM4NCAvKiBKU0NhbnZhc0FycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdC
OTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU0NhbnZhc0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk0OUM3Qjk5NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNDYW52YXNCeXRlQXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGQUQxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0
ZUFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGNzgxMDUwOEQ5
QzAwMDk5RkFCIC8qIEpTQ2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjAyMTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGQUYxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzRmxv
YXRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjc5MTA1MDhE
OUMwMDA5OUZBQiAvKiBKU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNDlDN0I5OTcxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzRnJhbWVidWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNjVERjMyMzkwOUQxREU2NTAwMEJFMzI1IC8qIEpTQ2FudmFz
R3JhZGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGMDQxMDUwNzBDNDAwMDk5RkFC
IC8qIEpTQ2FudmFzSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNGQjExMDUw
OTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk0OUVFQ0Y3QTEwNTA4RDlDMDAwOTlGQUIgLyogSlNDYW52YXNJbnRBcnJheUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzIzQjA5RDFERTY1MDAwQkUzMjUgLyog
SlNDYW52YXNQYXR0ZXJuLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QzdCOTlCMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU0NhbnZhc1Byb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5
OUQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTQ5RUVEMTQyMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8q
IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5RUVE
MTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUQxNEYxMDUx
OTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTQ5RUVEMTUwMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5QTIxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTQ2FudmFzU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVD
RjA2MTA1MDcwQzQwMDA5OUZBQiAvKiBKU0NhbnZhc1Nob3J0QXJyYXkuY3BwIGluIFNvdXJjZXMg
Ki8sCi0JCQkJNDlFRUNGQjUxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzU2hvcnRBcnJheUNv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjdCMTA1MDhEOUMwMDA5OUZB
QiAvKiBKU0NhbnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlD
N0I5QTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTQ2FudmFzVGV4dHVyZS5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFQ0YwODEwNTA3MEM0MDAwOTlGQUIgLyogSlNDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUVFQ0ZCNzEwNTA5MzgyMDAwOTlGQUIgLyog
SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5RUVDRjdDMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjBBMTA1MDcwQzQwMDA5OUZBQiAv
KiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
QjkxMDUwOTM4MjAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9y
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjdEMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Nh
bnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUNG
MEMxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTQ5RUVDRkJCMTA1MDkzODIwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2ln
bmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVDRjdF
MTA1MDhEOUMwMDA5OUZBQiAvKiBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5M0Y5QjdBMDBCQTYwMzI2MDA4NTQwNjQgLyogSlNDREFUQVNl
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNCQTU5QjIwRjJBQTVGRTAwOEU4RTk5IC8q
IEpTQ0RBVEFTZWN0aW9uQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REYzMUYzMDlE
MUNDNjAwMDBCRTMyNSAvKiBKU0NoYXJhY3RlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0y
MDIzOSw2ICsyMDIyMiw1NyBAQAogCQkJCTE0NzlGQUVGMTA5QUUzNzUwMERFRDY1NSAvKiBSZW5k
ZXJSdWJ5QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDc5RkFGMTEwOUFFMzc1MDBERUQ2
NTUgLyogUmVuZGVyUnVieVJ1bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDc5RkFGMzEwOUFF
Mzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieVRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVB
MzdERTExMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNkVBMzdERTQxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQXJyYXlCdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNkVBMzdERTcxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMQnVmZmVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTZFQTM3REVBMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEJ5
dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUEzN0RFRDEwQTNBMDU0MDA0MUYwOUYg
LyogV2ViR0xGbG9hdEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFQTM3REYwMTBBM0Ew
NTQwMDQxRjA5RiAvKiBXZWJHTEZyYW1lYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZF
QTM3REYzMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTEludEFycmF5LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTZFQTM3REY2MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTE9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk2RUEzN0RGODEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xQcm9ncmFtLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTZFQTM3REZCMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUEzN0RGRTEwQTNBMDU0MDA0MUYw
OUYgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFQTM3
RTA0MTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFNoYWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk2RUEzN0UwNzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xTaG9ydEFycmF5LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTZFQTM3RTBBMTBBM0EwNTQwMDQxRjA5RiAvKiBXZWJHTFRleHR1cmUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNkVBMzdFMEQxMEEzQTA1NDAwNDFGMDlGIC8qIFdlYkdMVW5z
aWduZWRCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVBMzdFMTAxMEEzQTA1NDAw
NDFGMDlGIC8qIFdlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2
RUEzN0UxMzEwQTNBMDU0MDA0MUYwOUYgLyogV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNkU4MjBDM0IxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xBcnJh
eUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTgyMEMzRTEwQTNCMkMwMDBDNkJFMTYg
LyogSlNXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTgyMEM0
MTEwQTNCMkMwMDBDNkJFMTYgLyogSlNXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNkU4MjBDNDQxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xJbnRBcnJheUN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RTgyMEM0NTEwQTNCMkMwMDBDNkJFMTYgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkU4
MjBDNDgxMEEzQjJDMDAwQzZCRTE2IC8qIEpTV2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTZFODIwQzRCMTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMVW5zaWdu
ZWRCeXRlQXJyYXlDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkU4MjBDNEUxMEEzQjJD
MDAwQzZCRTE2IC8qIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTZFODIwQzUxMTBBM0IyQzAwMEM2QkUxNiAvKiBKU1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFRDcwMTNGMTBBM0I4N0UwMEYw
RDYxNiAvKiBKU1dlYkdMQWN0aXZlSW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUQ3MDE0
MTEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTZFRDcwMTQzMTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMQXJyYXlCdWZmZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNkVENzAxNDUxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNDcxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2Vi
R0xCeXRlQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNDkxMEEzQjg3RTAwRjBE
NjE2IC8qIEpTV2ViR0xGbG9hdEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFRDcwMTRC
MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMRnJhbWVidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNkVENzAxNEQxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xJbnRBcnJheS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk2RUQ3MDE0RjEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFByb2dy
YW0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNTExMEEzQjg3RTAwRjBENjE2IC8qIEpT
V2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNTMxMEEzQjg3
RTAwRjBENjE2IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTZFRDcwMTU1MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMU2hhZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTZFRDcwMTU3MTBBM0I4N0UwMEYwRDYxNiAvKiBKU1dlYkdMU2hvcnRBcnJh
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RUQ3MDE1OTEwQTNCODdFMDBGMEQ2MTYgLyogSlNX
ZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNUIxMEEzQjg3RTAwRjBE
NjE2IC8qIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2
RUQ3MDE1RDEwQTNCODdFMDBGMEQ2MTYgLyogSlNXZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNkVENzAxNUYxMEEzQjg3RTAwRjBENjE2IC8qIEpTV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVERjZGQjIxMEEzQ0ExMDAw
OUREREE3IC8qIEpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTZFREY2RkI0MTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMQnl0ZUFycmF5Q29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVERjZGQjYxMEEzQ0ExMDAwOUREREE3IC8q
IEpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNkVE
RjZGQjgxMEEzQ0ExMDAwOUREREE3IC8qIEpTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTZFREY2RkJBMTBBM0NBMTAwMDlERERBNyAvKiBKU1dlYkdMU2hv
cnRBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTZFREY2RkJDMTBBM0NB
MTAwMDlERERBNyAvKiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk2RURGNkZCRTEwQTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFVuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk2RURGNkZDMDEw
QTNDQTEwMDA5REREQTcgLyogSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5
QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBX
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotY29uc3QgQ2xhc3NJ
bmZvIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FudmFzQXJy
YXlCdWZmZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKLQotSlNDYW52YXNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yOjpKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JP
YmplY3QoSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xv
YmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXRE
aXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNBcnJheUJ1ZmZl
clByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKLSAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRP
bmx5fERvbnREZWxldGV8RG9udEVudW0pOwotfQotCi1zdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVj
dENhbnZhc0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1
Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLQotICAgIHVuc2lnbmVkIGludCBzaXplID0gMDsKLSAg
ICBpZiAoYXJncy5zaXplKCkgPT0gMSkgewotICAgICAgICBzaXplID0gKHVuc2lnbmVkIGludClh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChpc25hbihzaXplKSkKLSAgICAg
ICAgICAgIHNpemUgPSAwOwotICAgIH0KLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBq
c0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShz
aXplKSkpOwotfQotCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0
YSkKLXsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdENhbnZh
c0FycmF5QnVmZmVyOwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5l
IEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcl9oCi0KLSNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1
ZmZlci5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgQ2FudmFzQXJyYXk7Ci0KLSAgICAvLyBUZW1wbGF0ZSBmdW5jdGlvbiB1
c2VkIGJ5IENhbnZhc1hYWEFycmF5Q29uc3RydWN0b3JzCi0gICAgdGVtcGxhdGU8Y2xhc3MgQywg
dHlwZW5hbWUgVD4KLSAgICBQYXNzUmVmUHRyPENhbnZhc0FycmF5PiBjb25zdHJ1Y3QoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLSAgICB7Ci0gICAgICAg
IC8vIFRoZXJlIGFyZSAzIGNvbnN0cnVjdG9yczoKLSAgICAgICAgLy8KLSAgICAgICAgLy8gIDEp
IChpbiBpbnQgc2l6ZSkKLSAgICAgICAgLy8gIDIpIChpbiBDYW52YXNBcnJheUJ1ZmZlciBidWZm
ZXIsIFtPcHRpb25hbF0gaW4gaW50IG9mZnNldCwgW09wdGlvbmFsXSBpbiB1bnNpZ25lZCBpbnQg
bGVuZ3RoKQotICAgICAgICAvLyAgMykgKGluIHNlcXVlbmNlPFQ+KSAtIFRoaXMgZW5kcyB1cCBi
ZWluZyBhIEpTICJhcnJheS1saWtlIiBvYmplY3QKLSAgICAgICAgLy8KLSAgICAgICAgUmVmUHRy
PEM+IGFycmF5T2JqZWN0OwotICAgICAgICAKLSAgICAgICAgLy8gRm9yIHRoZSAwIGFyZ3MgY2Fz
ZSwganVzdCBjcmVhdGUgYW4gb2JqZWN0IHdpdGhvdXQgYSBidWZmZXIgCi0gICAgICAgIGlmIChh
cmdzLnNpemUoKSA8IDEpCi0gICAgICAgICAgICByZXR1cm4gQzo6Y3JlYXRlKDAsIDAsIDApOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGFyZ3MuYXQoMCkuaXNPYmplY3QoKSkgewotICAgICAgICAg
ICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIgPSB0b0NhbnZhc0FycmF5QnVmZmVy
KGFyZ3MuYXQoMCkpOwotICAgICAgICAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICAgICAgICAg
IGludCBvZmZzZXQgPSAoYXJncy5zaXplKCkgPiAxKSA/IGFyZ3MuYXQoMSkudG9JbnQzMihleGVj
KSA6IDA7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IChhcmdzLnNpemUo
KSA+IDIpID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihhcmdzLmF0KDIpLnRvSW50MzIoZXhl
YykpIDogMDsKLSAgICAgICAgICAgICAgICByZXR1cm4gQzo6Y3JlYXRlKGJ1ZmZlciwgb2Zmc2V0
LCBsZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBKU0M6
OkpTT2JqZWN0KiBhcnJheSA9IGFzT2JqZWN0KGFyZ3MuYXQoMCkpOwotICAgICAgICAgICAgaW50
IGxlbmd0aCA9IGFycmF5LT5nZXQoZXhlYywgSlNDOjpJZGVudGlmaWVyKGV4ZWMsICJsZW5ndGgi
KSkudG9JbnQzMihleGVjKTsKLSAgICAgICAgICAgIHZvaWQqIHRlbXBWYWx1ZXM7Ci0gICAgICAg
ICAgICBpZiAoIXRyeUZhc3RNYWxsb2MobGVuZ3RoICogc2l6ZW9mKFQpKS5nZXRWYWx1ZSh0ZW1w
VmFsdWVzKSkgewotICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgSlNDOjpHZW5lcmFs
RXJyb3IpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBPd25GYXN0TWFsbG9jUHRyPFQ+IHZhbHVlcyhzdGF0aWNfY2Fz
dDxUKj4odGVtcFZhbHVlcykpOwotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gYXJyYXktPmdldChl
eGVjLCBpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIHZhbHVlcy5nZXQoKVtp
XSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gQzo6Y3JlYXRlKHZhbHVlcy5nZXQoKSwgbGVu
Z3RoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihhcmdzLmF0KDApLnRvSW50MzIoZXhlYykpOwotICAgICAgICByZXR1
cm4gQzo6Y3JlYXRlKHNpemUpOwotICAgIH0KLQotICAgIGNsYXNzIEpTQ2FudmFzQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci0gICAgcHVibGlj
OgotICAgICAgICBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUq
LCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0lu
Zm8gc19pbmZvOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVj
dFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgdmly
dHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNf
aW5mbzsgfQotICAgIH07Ci0KLX0KLQotI2VuZGlmIC8vIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Fy
cmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZh
c0J5dGVBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNp
bmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKLSNpbmNsdWRlICJK
U0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXku
aCIKLQotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc0FycmF5KiBvYmpl
Y3QpCi17Ci0gICAgaWYgKG9iamVjdC0+aXNGbG9hdEFycmF5KCkpCi0gICAgICAgIHJldHVybiBn
ZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzRmxvYXRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxDYW52YXNGbG9hdEFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVj
dC0+aXNVbnNpZ25lZEJ5dGVBcnJheSgpKQotICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3Jh
cHBlcjxKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVj
dC0+aXNCeXRlQXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlND
YW52YXNCeXRlQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzQnl0
ZUFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVjdC0+aXNJbnRBcnJheSgpKQotICAgICAg
ICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc0ludEFycmF5PihleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc0ludEFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYg
KG9iamVjdC0+aXNVbnNpZ25lZEludEFycmF5KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmpl
Y3RXcmFwcGVyPEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZEludEFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9i
amVjdC0+aXNTaG9ydEFycmF5KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVy
PEpTQ2FudmFzU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52
YXNTaG9ydEFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgaWYgKG9iamVjdC0+aXNVbnNpZ25lZFNob3J0
QXJyYXkoKSkKLSAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzVW5z
aWduZWRTaG9ydEFycmF5Kj4ob2JqZWN0KSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMp
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNCeXRlQXJyYXlD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2NyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NB
TlZBUykKLQotI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCIKLQotI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCi0jaW5jbHVk
ZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5LmgiCi0jaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFj
ZSBKU0M7Ci0KLWNvbnN0IENsYXNzSW5mbyBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yOjpz
X2luZm8gPSB7ICJDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5Ojpz
X2luZm8sIDAsIDAgfTsKLQotSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6SlNDYW52YXNC
eXRlQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0NhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSksIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNDYW52YXNCeXRlQXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgTm9uZSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsK
LX0KLQotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52YXNCeXRlQXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCi17Ci0g
ICAgSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19j
YXN0PEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7Ci0gICAgUmVm
UHRyPENhbnZhc0J5dGVBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxDYW52YXNCeXRlQXJyYXkq
Pihjb25zdHJ1Y3Q8Q2FudmFzQnl0ZUFycmF5LCBzaWduZWQgY2hhcj4oZXhlYywgYXJncykuZ2V0
KCkpOwotICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOwotfQotCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERh
dGEmIGNvbnN0cnVjdERhdGEpCi17Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24g
PSBjb25zdHJ1Y3RDYW52YXNCeXRlQXJyYXk7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVj
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCi0j
ZGVmaW5lIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3JfaAotCi0jaW5jbHVkZSAiSlNET01C
aW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNEb2N1bWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSAgICBjbGFzcyBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNv
bnN0cnVjdG9yT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEpTQ2FudmFzQnl0ZUFycmF5
Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgICAg
ICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNv
bnN0cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xh
c3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQotICAgIH07Ci0KLX0KLQotI2VuZGlm
IC8vIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjM0KQor
KysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJKU0NhbnZhc0J5dGVBcnJheS5o
IgotCi0jaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBKU0NhbnZhc0J5dGVBcnJheTo6aW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUg
dmFsdWUpCi17Ci0gICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy
Pih2YWx1ZS50b0ludDMyKGV4ZWMpKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNCeXRl
QXJyYXkqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZh
c0J5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNp
bmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIgotCi0jaW5jbHVkZSAiRG9j
dW1lbnQuaCIKLSNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52
YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzRmxvYXRBcnJheS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUv
RXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwot
Ci1jb25zdCBDbGFzc0luZm8gSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9
IHsgIkNhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8s
IDAsIDAgfTsKLQotSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3I6OkpTQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzRmxvYXRBcnJheUNv
bnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUo
KSksIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygp
LnByb3RvdHlwZSwgSlNDYW52YXNGbG9hdEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2Jh
bE9iamVjdCksIE5vbmUpOwotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Ci19
Ci0KLXN0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFzRmxvYXRBcnJheShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKLXsKLSAg
ICBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19j
YXN0PEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAgIFJl
ZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZhc0Zsb2F0QXJy
YXkqPihjb25zdHJ1Y3Q8Q2FudmFzRmxvYXRBcnJheSwgZmxvYXQ+KGV4ZWMsIGFyZ3MpLmdldCgp
KTsKLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKLX0KLQotSlNDOjpDb25zdHJ1Y3RUeXBlIEpTQ2FudmFz
RmxvYXRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9
IGNvbnN0cnVjdENhbnZhc0Zsb2F0QXJyYXk7Ci0gICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1
Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFy
cmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNDYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3Jf
aAotI2RlZmluZSBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcl9oCi0KLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50LmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGNsYXNzIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEpTQ2FudmFzRmxv
YXRBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
LSAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KLSAgICB9OwotCi19Ci0K
LSNlbmRpZiAvLyBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lv
biA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNGbG9hdEFycmF5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkpTQ2FudmFz
RmxvYXRBcnJheS5oIgotCi0jaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgSlNDYW52YXNGbG9h
dEFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgs
IEpTQzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENh
bnZhc0Zsb2F0QXJyYXkqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBl
cjxKU0NhbnZhc0Zsb2F0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1
Y3Rvci5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZh
c0ludEFycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY3ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQot
Ci0jaW5jbHVkZSAiSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkNhbnZhc0ludEFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52
YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQot
Y29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAi
Q2FudmFzSW50QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAg
fTsKLQotSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc0ludEFycmF5Q29uc3Ry
dWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQot
ICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9i
amVjdCkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNDYW52YXNJbnRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25l
KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIo
ZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwotfQotCi1zdGF0aWMgSlNP
YmplY3QqIGNvbnN0cnVjdENhbnZhc0ludEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3Qq
IGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTQ2FudmFzSW50QXJy
YXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzSW50QXJy
YXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzSW50QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzSW50
QXJyYXksIGludD4oZXhlYywgYXJncykuZ2V0KCkpOwotICAgIHJldHVybiBhc09iamVjdCh0b0pT
KGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOwotfQot
Ci1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25z
dHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKLXsKLSAgICBjb25z
dHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdENhbnZhc0ludEFycmF5OwotICAg
IHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNTA2MzQpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ2FudmFzSW50
QXJyYXlDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcl9o
Ci0KLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RvY3VtZW50LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1
Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAg
ICBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2Jh
bE9iamVjdCopOwotICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBKU0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29u
c3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsKLSAgICAgICAgdmlydHVhbCBjb25zdCBK
U0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQotICAg
IH07Ci0KLX0KLQotI2VuZGlmIC8vIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcl9oCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzSW50QXJyYXlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUN1c3RvbS5jcHAJKHJl
dmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0ludEFycmF5Q3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkpTQ2Fu
dmFzSW50QXJyYXkuaCIKLQotI2luY2x1ZGUgIkNhbnZhc0ludEFycmF5LmgiCi0KLXVzaW5nIG5h
bWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBKU0NhbnZhc0ludEFy
cmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nhc3Q8
c2lnbmVkIGludD4odmFsdWUudG9JbnQzMihleGVjKSkpOwotfQotCi1KU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
Q2FudmFzSW50QXJyYXkqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBl
cjxKU0NhbnZhc0ludEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzTnVtYmVyQXJyYXlDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNOdW1iZXJBcnJheUN1c3RvbS5j
cHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc051bWJl
ckFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1
ZGUgIkpTQ2FudmFzTnVtYmVyQXJyYXkuaCIKLQotI2luY2x1ZGUgIkNhbnZhc051bWJlckFycmF5
LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSlNW
YWx1ZSBKU0NhbnZhc051bWJlckFycmF5OjpnZXRCeUluZGV4KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCB1bnNpZ25lZCBpbnQgaW5kZXgpCi17Ci0gICAgSlNDOjpKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKGV4ZWMsIGltcGwoKS0+aXRlbShpbmRleCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEQ3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw0NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5o
IgotCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiRXhj
ZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTQ2FudmFzRmxvYXRBcnJheS5oIgotI2lu
Y2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKLSNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXguaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvT3duRmFzdE1hbGxvY1B0ci5oPgotCi11c2luZyBu
YW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6
QXJnTGlzdCBjb25zdCYgYXJncykKLXsKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKLSAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwotCi0gICAgdW5zaWduZWQg
dGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAgIHVuc2lnbmVkIHVzYWdlID0g
YXJncy5hdCgyKS50b0ludDMyKGV4ZWMpOwotCi0gICAgLy8gSWYgYXJndW1lbnQgMSBpcyBhIG51
bWJlciwgd2UgYXJlIGluaXRpYWxpemluZyB0aGlzIGJ1ZmZlciB0byB0aGF0IHNpemUKLSAgICBp
ZiAoIWFyZ3MuYXQoMSkuaXNPYmplY3QoKSkgewotICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQg
PSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSktPmJ1ZmZlckRhdGEodGFyZ2V0LCBjb3VudCwgdXNh
Z2UpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBDYW52YXNB
cnJheSogYXJyYXkgPSB0b0NhbnZhc0FycmF5KGFyZ3MuYXQoMSkpOwotICAgIAotICAgIHN0YXRp
Y19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSktPmJ1ZmZlckRhdGEodGFy
Z2V0LCBhcnJheSwgdXNhZ2UpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU1Zh
bHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Muc2l6
ZSgpICE9IDMpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsK
LQotICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICB1
bnNpZ25lZCBvZmZzZXQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgCi0gICAgQ2Fu
dmFzQXJyYXkqIGFycmF5ID0gdG9DYW52YXNBcnJheShhcmdzLmF0KDIpKTsKLSAgICAKLSAgICBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpLT5idWZmZXJTdWJE
YXRhKHRhcmdldCwgb2Zmc2V0LCBhcnJheSk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19
Ci0KLS8vIHZvaWQgdGV4SW1hZ2UyREhUTUwoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVu
c2lnbmVkIGxvbmcgbGV2ZWwsIGluIEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UpOwotSlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MpCi17IAotICAgIGlmIChhcmdzLnNpemUoKSA8IDMpCi0gICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLQotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9IHN0YXRp
Y19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSk7ICAgIAotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAg
Ci0gICAgdW5zaWduZWQgbGV2ZWwgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgCi0gICAgaWYgKGFyZ3Muc2l6ZSgpID4gNSkgewotICAgICAgICAvLyBUaGlzIG11c3Qg
YmUgdGhlIGJhcmUgYXJyYXkgY2FzZS4KLSAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQgPSBhcmdzLmF0KDIpLnRvSW50
MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgICAgICB1bnNpZ25lZCB3aWR0aCA9IGFy
Z3MuYXQoMykudG9JbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSAgICAKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgIHVuc2ln
bmVkIGhlaWdodCA9IGFyZ3MuYXQoNCkudG9JbnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
Ci0gICAgICAgIHVuc2lnbmVkIGJvcmRlciA9IGFyZ3MuYXQoNSkudG9JbnQzMihleGVjKTsKLSAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotCi0gICAgICAgIHVuc2lnbmVkIGZvcm1hdCA9IGFyZ3MuYXQoNikudG9J
bnQzMihleGVjKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotCi0gICAgICAgIHVuc2lnbmVkIHR5cGUgPSBh
cmdzLmF0KDcpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgICAgCi0gICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLQotICAgICAgICBDYW52
YXNBcnJheSogYXJyYXkgPSB0b0NhbnZhc0FycmF5KGFyZ3MuYXQoOCkpOwotICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAotICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFhcnJheSkKLSAgICAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0gICAgICAgIAotICAgICAgICAvLyBGSVhN
RTogTmVlZCB0byBjaGVjayB0byBtYWtlIHN1cmUgQ2FudmFzQXJyYXkgaXMgYSBDYW52YXNCeXRl
QXJyYXkgb3IgQ2FudmFzU2hvcnRBcnJheSwKLSAgICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSBw
YXNzZWQgdHlwZSBwYXJhbWV0ZXIuCi0gICAgICAgIAotICAgICAgICBjb250ZXh0LT50ZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgYXJyYXksIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgfQotICAgIAotICAgIC8vIFRoZSBpbWFnZSBwYXJhbWV0ZXIgY2FuIGJlIGEgPGltZz4g
b3IgPGNhbnZhcz4gZWxlbWVudC4KLSAgICBKU1ZhbHVlIHZhbHVlID0gYXJncy5hdCgyKTsKLSAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7Ci0gICAgSlNPYmplY3QqIG8gPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgCi0g
ICAgYm9vbCBmbGlwWSA9IChhcmdzLnNpemUoKSA+IDMpID8gYXJncy5hdCgzKS50b0Jvb2xlYW4o
ZXhlYykgOiBmYWxzZTsKLSAgICBib29sIHByZW11bHRpcGx5QWxwaGEgPSAoYXJncy5zaXplKCkg
PiA0KSA/IGFyZ3MuYXQoMykudG9Cb29sZWFuKGV4ZWMpIDogZmFsc2U7Ci0gICAgCi0gICAgaWYg
KG8tPmluaGVyaXRzKCZKU0hUTUxJbWFnZUVsZW1lbnQ6OnNfaW5mbykpIHsKLSAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1nRWx0ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KHN0
YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKLSAgICAgICAgY29udGV4dC0+
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbWdFbHQsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhh
LCBlYyk7Ci0gICAgfSBlbHNlIGlmIChvLT5pbmhlcml0cygmSlNIVE1MQ2FudmFzRWxlbWVudDo6
c19pbmZvKSkgewotICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gc3RhdGljX2Nh
c3Q8SFRNTENhbnZhc0VsZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmlt
cGwoKSk7Ci0gICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2FudmFz
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOyAgICAKLX0KLQotLy8gdm9pZCB0ZXhTdWJJbWFnZTJESFRN
TChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBsZXZlbCwgaW4gdW5z
aWduZWQgbG9uZyB4b2ZmLCBpbiB1bnNpZ25lZCBsb25nIHlvZmYsIGluIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdl
KTsKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoteyAKLSAgICBpZiAoYXJncy5zaXpl
KCkgPCA3IHx8IGFyZ3Muc2l6ZSgpID4gOSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgU3ludGF4RXJyb3IpOwotCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCi0g
ICAgdW5zaWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwotICAgIHVuc2ln
bmVkIGxldmVsID0gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpOwotICAgIHVuc2lnbmVkIHhvZmYg
PSBhcmdzLmF0KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgdW5zaWduZWQgeW9mZiA9IGFyZ3MuYXQo
MykudG9JbnQzMihleGVjKTsKLSAgICB1bnNpZ25lZCB3aWR0aCA9IGFyZ3MuYXQoNCkudG9JbnQz
MihleGVjKTsKLSAgICB1bnNpZ25lZCBoZWlnaHQgPSBhcmdzLmF0KDUpLnRvSW50MzIoZXhlYyk7
Ci0gICAgCi0gICAgLy8gVGhlIGltYWdlIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2Fu
dmFzPiBlbGVtZW50LgotICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDYpOwotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVy
cm9yKTsKLSAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICAKLSAgICBib29s
IGZsaXBZID0gKGFyZ3Muc2l6ZSgpID4gMykgPyBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKSA6
IGZhbHNlOwotICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IChhcmdzLnNpemUoKSA+IDQpID8g
YXJncy5hdCgzKS50b0Jvb2xlYW4oZXhlYykgOiBmYWxzZTsKLSAgICAKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBpZiAoby0+aW5oZXJpdHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19p
bmZvKSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWdFbHQgPSBzdGF0aWNfY2FzdDxI
VE1MSW1hZ2VFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkp
OwotICAgICAgICBjb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlv
ZmYsIHdpZHRoLCBoZWlnaHQsIGltZ0VsdCwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsK
LSAgICB9IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2luZm8p
KSB7Ci0gICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1M
Q2FudmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsK
LSAgICAgICAgY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2ZmLCB5b2Zm
LCB3aWR0aCwgaGVpZ2h0LCBjYW52YXMsIGZsaXBZLCBwcmVtdWx0aXBseUFscGhhLCBlYyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hf
RVJSKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCB0b0FycmF5KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFQqJiBhcnJheSwgaW50JiBzaXplKQotewotICAgIGFycmF5ID0g
MDsKLSAgICAKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgSlNDOjpKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAg
IGludCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBKU0M6OklkZW50aWZpZXIoZXhlYywgImxl
bmd0aCIpKS50b0ludDMyKGV4ZWMpOwotICAgIHZvaWQqIHRlbXBWYWx1ZXM7Ci0gICAgaWYgKCF0
cnlGYXN0TWFsbG9jKGxlbmd0aCAqIHNpemVvZihUKSkuZ2V0VmFsdWUodGVtcFZhbHVlcykpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBUKiB2YWx1ZXMgPSBzdGF0aWNfY2FzdDxUKj4odGVt
cFZhbHVlcyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhbHVlc1tp
XSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgIH0KLQotICAgIGFycmF5
ID0gdmFsdWVzOwotICAgIHNpemUgPSBsZW5ndGg7Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9uVG9D
YWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlmb3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZv
cm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBmX3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0
dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19OwotCi1lbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRv
Q2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5p
Zm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERh
dGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzLCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYg
KGFyZ3Muc2l6ZSgpICE9IDIpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRh
eEVycm9yKTsKLQotICAgIGxvbmcgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7
Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBjYW52YXNB
cnJheSA9IHRvQ2FudmFzRmxvYXRBcnJheShhcmdzLmF0KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAg
Ci0gICAgaWYgKGNhbnZhc0FycmF5KSB7Ci0gICAgICAgIHN3aXRjaChmKSB7Ci0gICAgICAgICAg
ICBjYXNlIGZfdW5pZm9ybTF2OiBjb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCBjYW52YXNB
cnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4
dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGNh
bnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OiBj
b250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBjYW52YXNBcnJheS5nZXQoKSk7IGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IGZfdmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgY2Fu
dmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIz
djogY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGxvY2F0aW9uLCBjYW52YXNBcnJheS5nZXQoKSk7
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0
ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAgIGZsb2F0
KiBhcnJheTsKLSAgICBpbnQgc2l6ZTsKLSAgICB0b0FycmF5PGZsb2F0PihleGVjLCBhcmdzLmF0
KDEpLCBhcnJheSwgc2l6ZSk7Ci0gICAgCi0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKLQotICAgIHN3aXRjaChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LCBz
aXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3Jt
M3Y6IGNvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFy
cmF5LCBzaXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjogY29udGV4
dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlv
biwgYXJyYXksIHNpemUpOyBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OiBj
b250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxv
Y2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlv
blRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
LCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6
ZSgpICE9IDIpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsK
LQotICAgIGxvbmcgbG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gY2FudmFzQXJyYXkgPSB0b0Nh
bnZhc0ludEFycmF5KGFyZ3MuYXQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBpZiAoY2Fu
dmFzQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoKGYpIHsKLSAgICAgICAgICAgIGNhc2UgZl91bmlm
b3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMml2
KGxvY2F0aW9uLCBjYW52YXNBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBm
X3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgY2FudmFzQXJyYXkuZ2V0
KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZv
cm00aXYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgICAgICBk
ZWZhdWx0OiBicmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgCi0gICAgaW50KiBhcnJheTsKLSAgICBpbnQgc2l6ZTsKLSAgICB0b0FycmF5
PGludD4oZXhlYywgYXJncy5hdCgxKSwgYXJyYXksIHNpemUpOwotICAgIAotICAgIGlmICghYXJy
YXkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7Ci0KLSAgICBz
d2l0Y2goZikgewotICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OiBjb250ZXh0LT51bmlmb3JtMWl2
KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2
OiBjb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdW5pZm9ybTN2OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJh
eSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OiBjb250ZXh0LT51bmlm
b3JtNGl2KGxvY2F0aW9uLCBhcnJheSwgc2l6ZSk7IGJyZWFrOwotICAgICAgICBkZWZhdWx0OiBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6
OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBK
U0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCi0g
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKLQotICAgIGxvbmcg
bG9jYXRpb24gPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAot
ICAgIGJvb2wgdHJhbnNwb3NlID0gYXJncy5hdCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBjYW52YXNBcnJheSA9IHRv
Q2FudmFzRmxvYXRBcnJheShhcmdzLmF0KDIpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0gICAgaWYg
KGNhbnZhc0FycmF5KSB7Ci0gICAgICAgIHN3aXRjaChmKSB7Ci0gICAgICAgICAgICBjYXNlIGZf
dW5pZm9ybU1hdHJpeDJmdjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJh
bnNwb3NlLCBjYW52YXNBcnJheS5nZXQoKSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBmX3Vu
aWZvcm1NYXRyaXgzZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2UgZl91bmlm
b3JtTWF0cml4NGZ2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIAotICAgIGZsb2F0KiBhcnJheTsKLSAgICBpbnQg
c2l6ZTsKLSAgICB0b0FycmF5PGZsb2F0PihleGVjLCBhcmdzLmF0KDIpLCBhcnJheSwgc2l6ZSk7
Ci0gICAgCi0gICAgaWYgKCFhcnJheSkKLSAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKLQotICAgIHN3aXRjaChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4MmZ2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFy
cmF5LCBzaXplKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OiBjb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LCBzaXplKTsg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OiBjb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LCBzaXplKTsgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZv
cm0xdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4o
aW1wbCgpKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBhcmdzLCBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZv
cm0ydiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4o
aW1wbCgpKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBhcmdzLCBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2l2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZv
cm00diwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4o
aW1wbCgpKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBhcmdzLCBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCi17Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGFyZ3MsIHN0
YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOwotfQotCi1KU0M6
OkpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgYXJncywgc3Rh
dGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQotewotICAgIHJldHVy
biBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBhcmdzLCBzdGF0
aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlNDOjpK
U1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4g
ZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3Zl
cnRleEF0dHJpYjN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QqPihpbXBsKCkpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6
QXJnTGlzdCYgYXJncykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJp
YjR2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihp
bXBsKCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBACiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmgiCiAjaW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgotI2lu
Y2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNl
bmRpZgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNDQsNyArNDQsNyBAQCBKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgCiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQog
ICAgIGlmIChvYmplY3QtPmlzM2QoKSkKLSAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBw
ZXI8SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4ob2JqZWN0KSk7CisgICAgICAgIHJldHVy
biBnZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0PihleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG9iamVjdCkpOwog
I2VuZGlmCiAgICAgQVNTRVJUKG9iamVjdC0+aXMyZCgpKTsKICAgICByZXR1cm4gZ2V0RE9NT2Jq
ZWN0V3JhcHBlcjxKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihvYmplY3QpKTsKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52
YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY4ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQotCi0jaW5jbHVkZSAiSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaCIKLQotI2luY2x1
ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FudmFzU2hvcnRBcnJheS5oIgotI2luY2x1ZGUg
IkpTQ2FudmFzQXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNDYW52
YXNTaG9ydEFycmF5LmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLWNvbnN0IENsYXNzSW5mbyBKU0Nh
bnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FudmFzU2hvcnRBcnJheUNv
bnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6OnNfaW5mbywgMCwgMCB9OwotCi1KU0NhbnZhc1No
b3J0QXJyYXlDb25zdHJ1Y3Rvcjo6SlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IoRXhlY1N0
YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29u
c3RydWN0b3JPYmplY3QoSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVj
dHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQotewot
ICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU0NhbnZhc1No
b3J0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7Ci0gICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIp
LCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKLX0KLQotc3RhdGljIEpTT2JqZWN0KiBj
b25zdHJ1Y3RDYW52YXNTaG9ydEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0
cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTQ2FudmFzU2hvcnRBcnJheUNv
bnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNDYW52YXNTaG9ydEFycmF5
Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7Ci0gICAgUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+
IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzU2hvcnRBcnJheSo+KGNvbnN0cnVjdDxDYW52YXNT
aG9ydEFycmF5LCBzaG9ydD4oZXhlYywgYXJncykuZ2V0KCkpOwotICAgIHJldHVybiBhc09iamVj
dCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkp
OwotfQotCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3I6
OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQotewot
ICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Q2FudmFzU2hvcnRB
cnJheTsKLSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZp
c2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTQ2FudmFzU2hv
cnRBcnJheUNvbnN0cnVjdG9yX2gKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1
ZGUgIkpTRG9jdW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgSlND
YW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3Qg
ewotICAgIHB1YmxpYzoKLSAgICAgICAgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IoSlND
OjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwotICAgICAgICBzdGF0aWMgY29uc3Qg
SlNDOjpDbGFzc0luZm8gc19pbmZvOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdmlydHVhbCBK
U0M6OkNvbnN0cnVjdFR5cGUgZ2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmKTsK
LSAgICAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3Qg
eyByZXR1cm4gJnNfaW5mbzsgfQotICAgIH07Ci0KLX0KLQotI2VuZGlmIC8vIEpTQ2FudmFzU2hv
cnRBcnJheUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNT
aG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NhbnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiSlNDYW52YXNTaG9ydEFycmF5LmgiCi0KLSNpbmNs
dWRlICJDYW52YXNTaG9ydEFycmF5LmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotdm9pZCBKU0NhbnZhc1Nob3J0QXJyYXk6OmluZGV4U2V0dGVyKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQot
ewotICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDxzaWduZWQgc2hvcnQ+KHZhbHVl
LnRvSW50MzIoZXhlYykpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Nob3J0QXJyYXkq
IG9iamVjdCkKLXsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Nob3J0
QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25z
dHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVj
dG9yLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotY29uc3QgQ2xhc3NJbmZvIEpT
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAg
fTsKLQotSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5v
YmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheVByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKLSAgICBwdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERv
bnREZWxldGV8RG9udEVudW0pOwotfQotCi1zdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICBSZWZQdHI8Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJy
YXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXksIHVuc2lnbmVkIGNoYXI+KGV4
ZWMsIGFyZ3MpLmdldCgpKTsKLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0
cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKLX0KLQotSlNDOjpDb25zdHJ1
Y3RUeXBlIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCi17Ci0gICAgY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTsK
LSAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2lmbmRlZiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3Jf
aAotI2RlZmluZSBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3JfaAotCi0jaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAiSlNEb2N1bWVudC5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3Ry
dWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewotICAgIHB1YmxpYzoKLSAgICAg
ICAgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwg
SlNET01HbG9iYWxPYmplY3QqKTsKLSAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZv
IHNfaW5mbzsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RU
eXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1
YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2lu
Zm87IH0KLSAgICB9OwotCi19Ci0KLSNlbmRpZiAvLyBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5LmgiCi0KLSNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgotCi11
c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgSlNDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAgaW1wbCgpLT5zZXQoaW5k
ZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKLX0K
LQotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KiBvYmplY3QpCi17Ci0g
ICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4o
ZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjcgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMp
Ci0KLSNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oIgotCi0j
aW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEludEFycmF5Lmgi
Ci0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRJbnRBcnJh
eS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1jb25zdCBDbGFzc0luZm8gSlNDYW52YXNVbnNpZ25l
ZEludEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKLQotSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q29uc3RydWN0b3I6OkpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0
cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
LSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0
cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSks
IGdsb2JhbE9iamVjdCkKLXsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnBy
b3RvdHlwZSwgSlNDYW52YXNVbnNpZ25lZEludEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGds
b2JhbE9iamVjdCksIE5vbmUpOwotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
bGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7
Ci19Ci0KLXN0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFzVW5zaWduZWRJbnRBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKLXsKLSAgICBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1
Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKj4o
Y29uc3RydWN0b3IpOwotICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBhcnJheSA9
IHN0YXRpY19jYXN0PENhbnZhc1Vuc2lnbmVkSW50QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5z
aWduZWRJbnRBcnJheSwgdW5zaWduZWQgaW50PihleGVjLCBhcmdzKS5nZXQoKSk7Ci0gICAgcmV0
dXJuIGFzT2JqZWN0KHRvSlMoZXhlYywganNDb25zdHJ1Y3Rvci0+Z2xvYmFsT2JqZWN0KCksIGFy
cmF5LmdldCgpKSk7Ci19Ci0KLUpTQzo6Q29uc3RydWN0VHlwZSBKU0NhbnZhc1Vuc2lnbmVkSW50
QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNv
bnN0cnVjdERhdGEpCi17Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RDYW52YXNVbnNpZ25lZEludEFycmF5OwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9z
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NB
TlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5
Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
VW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ2FudmFzVW5z
aWduZWRJbnRBcnJheUNvbnN0cnVjdG9yX2gKLSNkZWZpbmUgSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3JfaAotCi0jaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAi
SlNEb2N1bWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBKU0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1
Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7Ci0gICAgICAgIHN0YXRp
YyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2
aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0
RGF0YSYpOwotICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9Ci0gICAgfTsKLQotfQotCi0jZW5kaWYgLy8gSlND
YW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRJbnRB
cnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRl
ICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKLQotI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVk
SW50QXJyYXkuaCIKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzsKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
aW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUudG9JbnQz
MihleGVjKSkpOwotfQotCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FudmFzVW5zaWduZWRJbnRBcnJheSog
b2JqZWN0KQotewotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIK
LSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJK
U0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1jb25zdCBD
bGFzc0luZm8gSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6
c19pbmZvLCAwLCAwIH07Ci0KLUpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I6
OkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBK
U0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmpl
Y3QoSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJl
KGdsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCi17Ci0gICAg
cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwot
ICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVj
LCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7Ci19Ci0KLXN0YXRpYyBKU09iamVj
dCogY29uc3RydWN0Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQotewotICAgIEpTQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2Fz
dDxKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwot
ICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Kj4oY29uc3RydWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheSwgdW5zaWduZWQgc2hvcnQ+KGV4ZWMsIGFyZ3MpLmdldCgpKTsKLSAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0
KCkpKTsKLX0KLQotSlNDOjpDb25zdHJ1Y3RUeXBlIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJiBjb25zdHJ1
Y3REYXRhKQotewotICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5OwotICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlD
b25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEpTQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3JfaAotI2RlZmluZSBKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUNvbnN0cnVjdG9yX2gKLQotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2lu
Y2x1ZGUgIkpTRG9jdW1lbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3Mg
SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1
Y3Rvck9iamVjdCB7Ci0gICAgcHVibGljOgotICAgICAgICBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKLQotICAgIHByaXZhdGU6
Ci0gICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlND
OjpDb25zdHJ1Y3REYXRhJik7Ci0gICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8q
IGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KLSAgICB9OwotCi19Ci0KLSNl
bmRpZiAvLyBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQotCi0jaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKLQotI2lu
Y2x1ZGUgIkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgotCi11c2luZyBuYW1lc3BhY2UgSlND
OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlND
OjpKU1ZhbHVlIHZhbHVlKQotewotICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBzaG9ydD4odmFsdWUudG9JbnQzMihleGVjKSkpOwotfQotCi1KU0M6OkpTVmFsdWUg
dG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIGdldERP
TU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgb2JqZWN0KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dD
dXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNCArNTMsMTQgQEAKICNlbmRp
ZgogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmgi
Ci0jaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCi0jaW5j
bHVkZSAiSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNDYW52YXNV
bnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJy
YXlDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29u
c3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIgor
I2luY2x1ZGUgIkpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaCIKKyNp
bmNsdWRlICJKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJH
TFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJHTEZsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXhD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIkpTV2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5oIgpAQCAt
NjQ1LDQ0ICs2NDUsNDQgQEAgSlNWYWx1ZSBKU0RPTVdpbmRvdzo6d2ViS2l0Q1NTTWF0cml4KEV4
ZQogfQogIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpjYW52
YXNBcnJheUJ1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRE9NV2luZG93
Ojp3ZWJHTEFycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yPihleGVjLCB0
aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNXZWJHTEFycmF5QnVmZmVyQ29u
c3RydWN0b3I+KGV4ZWMsIHRoaXMpOwogfQogIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2FudmFz
Qnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK0pTVmFsdWUgSlNET01XaW5kb3c6Ondl
YkdMQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0RE9N
Q29uc3RydWN0b3I8SlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cisg
ICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvcj4o
ZXhlYywgdGhpcyk7CiB9CiAgCi1KU1ZhbHVlIEpTRE9NV2luZG93OjpjYW52YXNVbnNpZ25lZEJ5
dGVBcnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRE9NV2luZG93Ojp3ZWJH
TFVuc2lnbmVkQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yPihl
eGVjLCB0aGlzKTsKKyAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNXZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwogfQogIAotSlNWYWx1ZSBKU0RPTVdp
bmRvdzo6Y2FudmFzSW50QXJyYXkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RP
TVdpbmRvdzo6d2ViR0xJbnRBcnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcj4oZXhlYywg
dGhpcyk7CisgICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTV2ViR0xJbnRBcnJheUNvbnN0
cnVjdG9yPihleGVjLCB0aGlzKTsKIH0KICAKLUpTVmFsdWUgSlNET01XaW5kb3c6OmNhbnZhc1Vu
c2lnbmVkSW50QXJyYXkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1ZSBKU0RPTVdpbmRv
dzo6d2ViR0xVbnNpZ25lZEludEFycmF5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0
b3I+KGV4ZWMsIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1dlYkdMVW5z
aWduZWRJbnRBcnJheUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKIH0KICAKLUpTVmFsdWUgSlNE
T01XaW5kb3c6OmNhbnZhc1Nob3J0QXJyYXkoRXhlY1N0YXRlKiBleGVjKSBjb25zdAorSlNWYWx1
ZSBKU0RPTVdpbmRvdzo6d2ViR0xTaG9ydEFycmF5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsK
LSAgICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0
b3I+KGV4ZWMsIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1dlYkdMU2hv
cnRBcnJheUNvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKIH0KICAKLUpTVmFsdWUgSlNET01XaW5k
b3c6OmNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CitKU1Zh
bHVlIEpTRE9NV2luZG93Ojp3ZWJHTFVuc2lnbmVkU2hvcnRBcnJheShFeGVjU3RhdGUqIGV4ZWMp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldERPTUNvbnN0cnVjdG9yPEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOworICAgIHJldHVybiBnZXRET01Db25z
dHJ1Y3RvcjxKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMp
OwogfQogIAotSlNWYWx1ZSBKU0RPTVdpbmRvdzo6Y2FudmFzRmxvYXRBcnJheShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CitKU1ZhbHVlIEpTRE9NV2luZG93Ojp3ZWJHTEZsb2F0QXJyYXkoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU0NhbnZh
c0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7CisgICAgcmV0dXJuIGdldERPTUNv
bnN0cnVjdG9yPEpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwogfQog
I2VuZGlmCiAgCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9jdW1lbnRDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDYgQEAKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCi0j
aW5jbHVkZSAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKLSNpZiBFTkFCTEUoM0RfQ0FO
VkFTKQotI2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0jZW5kaWYKICNp
bmNsdWRlICJKU0RPTVdpbmRvd0N1c3RvbS5oIgogI2luY2x1ZGUgIkpTSFRNTERvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiSlNMb2NhdGlvbi5oIgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hU
TUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDEwICsyNyw2IEBACiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5o
IgogCiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oIgotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0jaW5jbHVkZSAiSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKLSNlbmRpZgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIu
aD4KIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3
NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IuY3BwOjUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRl
ICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0Fy
cmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKworY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKKworSlND
YW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAg
IDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpj
cmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9i
amVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
SlNDYW52YXNBcnJheUJ1ZmZlclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBO
b25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1i
ZXIoZXhlYywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMg
SlNPYmplY3QqIGNvbnN0cnVjdENhbnZhc0FycmF5QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2Fu
dmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKworICAgIHVuc2lnbmVk
IGludCBzaXplID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gMSkgeworICAgICAgICBzaXpl
ID0gKHVuc2lnbmVkIGludClhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGlmIChp
c25hbihzaXplKSkKKyAgICAgICAgICAgIHNpemUgPSAwOworICAgIH0KKyAgICByZXR1cm4gYXNP
YmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQ2FudmFzQXJy
YXlCdWZmZXI6OmNyZWF0ZShzaXplKSkpOworfQorCitKU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0
RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlv
biA9IGNvbnN0cnVjdENhbnZhc0FycmF5QnVmZmVyOworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBl
SG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFy
cmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNywyOCArMjcsMjggQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRl
ICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJy
YXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJXZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTEFycmF5QnVm
ZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAot
Y29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0g
eyAiQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciIsIDAsIDAsIDAgfTsKK2NvbnN0IENsYXNz
SW5mbyBKU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiV2ViR0xBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yIiwgMCwgMCwgMCB9OwogCi1KU0NhbnZhc0FycmF5QnVmZmVyQ29u
c3RydWN0b3I6OkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9i
amVjdChKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9i
YWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorSlNXZWJHTEFycmF5
QnVmZmVyQ29uc3RydWN0b3I6OkpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0
cnVjdG9yT2JqZWN0KEpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKLSAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNBcnJh
eUJ1ZmZlclByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNXZWJHTEFycmF5QnVm
ZmVyUHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVh
ZE9ubHl8RG9udERlbGV0ZXxEb250RW51bSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY29uc3Ry
dWN0Q2FudmFzQXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0
b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYkdM
QXJyYXlCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBq
c0NvbnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
Kj4oY29uc3RydWN0b3IpOworICAgIEpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKiBqc0Nv
bnN0cnVjdG9yID0gc3RhdGljX2Nhc3Q8SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IqPihj
b25zdHJ1Y3Rvcik7CiAKICAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IDA7CiAgICAgaWYgKGFyZ3Mu
c2l6ZSgpID09IDEpIHsKQEAgLTU2LDEyICs1NiwxMiBAQCBzdGF0aWMgSlNPYmplY3QqIGNvbnN0
cnVjdENhbnZhc0FycmF5QnVmCiAgICAgICAgIGlmIChpc25hbihzaXplKSkKICAgICAgICAgICAg
IHNpemUgPSAwOwogICAgIH0KLSAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0
cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShzaXplKSkp
OworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUoc2l6ZSkpKTsKIH0KIAotSlNDOjpDb25z
dHJ1Y3RUeXBlIEpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0
YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCitKU0M6OkNvbnN0cnVjdFR5cGUg
SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25z
dHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQogewotICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1
bmN0aW9uID0gY29uc3RydWN0Q2FudmFzQXJyYXlCdWZmZXI7CisgICAgY29uc3RydWN0RGF0YS5u
YXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXZWJHTEFycmF5QnVmZmVyOwogICAgIHJldHVybiBD
b25zdHJ1Y3RUeXBlSG9zdDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaAkocmV2aXNpb24gNTA1NzUpCShmcm9t
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmg6NTA1
NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlND
YW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNDYW52YXNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBDYW52
YXNBcnJheTsKKworICAgIC8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgQ2FudmFzWFhYQXJy
YXlDb25zdHJ1Y3RvcnMKKyAgICB0ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgorICAgIFBh
c3NSZWZQdHI8Q2FudmFzQXJyYXk+IGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorICAgIHsKKyAgICAgICAgLy8gVGhlcmUgYXJlIDMgY29u
c3RydWN0b3JzOgorICAgICAgICAvLworICAgICAgICAvLyAgMSkgKGluIGludCBzaXplKQorICAg
ICAgICAvLyAgMikgKGluIENhbnZhc0FycmF5QnVmZmVyIGJ1ZmZlciwgW09wdGlvbmFsXSBpbiBp
bnQgb2Zmc2V0LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVkIGludCBsZW5ndGgpCisgICAgICAgIC8v
ICAzKSAoaW4gc2VxdWVuY2U8VD4pIC0gVGhpcyBlbmRzIHVwIGJlaW5nIGEgSlMgImFycmF5LWxp
a2UiIG9iamVjdAorICAgICAgICAvLworICAgICAgICBSZWZQdHI8Qz4gYXJyYXlPYmplY3Q7Cisg
ICAgICAgIAorICAgICAgICAvLyBGb3IgdGhlIDAgYXJncyBjYXNlLCBqdXN0IGNyZWF0ZSBhbiBv
YmplY3Qgd2l0aG91dCBhIGJ1ZmZlciAKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMSkKKyAg
ICAgICAgICAgIHJldHVybiBDOjpjcmVhdGUoMCwgMCwgMCk7CisgICAgICAgIAorICAgICAgICBp
ZiAoYXJncy5hdCgwKS5pc09iamVjdCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IHRvQ2FudmFzQXJyYXlCdWZmZXIoYXJncy5hdCgwKSk7CisgICAg
ICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgaW50IG9mZnNldCA9IChhcmdz
LnNpemUoKSA+IDEpID8gYXJncy5hdCgxKS50b0ludDMyKGV4ZWMpIDogMDsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gKGFyZ3Muc2l6ZSgpID4gMikgPyBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KGFyZ3MuYXQoMikudG9JbnQzMihleGVjKSkgOiAwOworICAgICAgICAg
ICAgICAgIHJldHVybiBDOjpjcmVhdGUoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTQzo6SlNPYmplY3QqIGFycmF5ID0g
YXNPYmplY3QoYXJncy5hdCgwKSk7CisgICAgICAgICAgICBpbnQgbGVuZ3RoID0gYXJyYXktPmdl
dChleGVjLCBKU0M6OklkZW50aWZpZXIoZXhlYywgImxlbmd0aCIpKS50b0ludDMyKGV4ZWMpOwor
ICAgICAgICAgICAgdm9pZCogdGVtcFZhbHVlczsKKyAgICAgICAgICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhsZW5ndGggKiBzaXplb2YoVCkpLmdldFZhbHVlKHRlbXBWYWx1ZXMpKSB7CisgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcihleGVjLCBKU0M6OkdlbmVyYWxFcnJvcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IE93bkZhc3RNYWxsb2NQdHI8VD4gdmFsdWVzKHN0YXRpY19jYXN0PFQqPih0ZW1wVmFsdWVzKSk7
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAgICAgdmFsdWVzLmdldCgpW2ldID0gc3RhdGljX2Nhc3Q8VD4o
di50b051bWJlcihleGVjKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiBDOjpjcmVhdGUodmFsdWVzLmdldCgpLCBsZW5ndGgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB1bnNpZ25lZCBzaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFy
Z3MuYXQoMCkudG9JbnQzMihleGVjKSk7CisgICAgICAgIHJldHVybiBDOjpjcmVhdGUoc2l6ZSk7
CisgICAgfQorCisgICAgY2xhc3MgSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yIDogcHVi
bGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBw
cml2YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3RE
YXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xh
c3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgfTsKKwor
fQorCisjZW5kaWYgLy8gSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9y
LmgJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlC
dWZmZXJDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyNiArMjMsMjYgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yX2gKLSNkZWZpbmUgSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKKyNpZm5kZWYg
SlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorI2RlZmluZSBKU1dlYkdMQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvcl9oCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJK
U0RvY3VtZW50LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTV2ViR0xBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgQ2FudmFzQXJyYXk7CisgICAgY2xhc3MgV2Vi
R0xBcnJheTsKIAotICAgIC8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgQ2FudmFzWFhYQXJy
YXlDb25zdHJ1Y3RvcnMKKyAgICAvLyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IFdlYkdMWFhY
QXJyYXlDb25zdHJ1Y3RvcnMKICAgICB0ZW1wbGF0ZTxjbGFzcyBDLCB0eXBlbmFtZSBUPgotICAg
IFBhc3NSZWZQdHI8Q2FudmFzQXJyYXk+IGNvbnN0cnVjdChKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorICAgIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gY29u
c3RydWN0KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCiAg
ICAgewogICAgICAgICAvLyBUaGVyZSBhcmUgMyBjb25zdHJ1Y3RvcnM6CiAgICAgICAgIC8vCiAg
ICAgICAgIC8vICAxKSAoaW4gaW50IHNpemUpCi0gICAgICAgIC8vICAyKSAoaW4gQ2FudmFzQXJy
YXlCdWZmZXIgYnVmZmVyLCBbT3B0aW9uYWxdIGluIGludCBvZmZzZXQsIFtPcHRpb25hbF0gaW4g
dW5zaWduZWQgaW50IGxlbmd0aCkKKyAgICAgICAgLy8gIDIpIChpbiBXZWJHTEFycmF5QnVmZmVy
IGJ1ZmZlciwgW09wdGlvbmFsXSBpbiBpbnQgb2Zmc2V0LCBbT3B0aW9uYWxdIGluIHVuc2lnbmVk
IGludCBsZW5ndGgpCiAgICAgICAgIC8vICAzKSAoaW4gc2VxdWVuY2U8VD4pIC0gVGhpcyBlbmRz
IHVwIGJlaW5nIGEgSlMgImFycmF5LWxpa2UiIG9iamVjdAogICAgICAgICAvLwogICAgICAgICBS
ZWZQdHI8Qz4gYXJyYXlPYmplY3Q7CkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgICAgIHJldHVybiBDOjpjcmVhdGUoMCwgMCwgMCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoYXJncy5hdCgwKS5pc09iamVjdCgpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8Q2Fu
dmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IHRvQ2FudmFzQXJyYXlCdWZmZXIoYXJncy5hdCgwKSk7
CisgICAgICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyID0gdG9XZWJHTEFy
cmF5QnVmZmVyKGFyZ3MuYXQoMCkpOwogICAgICAgICAgICAgaWYgKGJ1ZmZlcikgewogICAgICAg
ICAgICAgICAgIGludCBvZmZzZXQgPSAoYXJncy5zaXplKCkgPiAxKSA/IGFyZ3MuYXQoMSkudG9J
bnQzMihleGVjKSA6IDA7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IChh
cmdzLnNpemUoKSA+IDIpID8gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihhcmdzLmF0KDIpLnRv
SW50MzIoZXhlYykpIDogMDsKQEAgLTgyLDkgKzgyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICByZXR1cm4gQzo6Y3JlYXRlKHNpemUpOwogICAgIH0KIAotICAgIGNsYXNzIEpTQ2Fu
dmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
CisgICAgY2xhc3MgSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29u
c3RydWN0b3JPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNDYW52YXNBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAg
ICAgSlNXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUds
b2JhbE9iamVjdCopOwogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZv
OwogCiAgICAgcHJpdmF0ZToKQEAgLTk0LDQgKzk0LDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB9CiAKLSNlbmRpZiAvLyBKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3JfaAorI2VuZGlm
IC8vIEpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQXJyYXlDdXN0b20uY3BwOjUwNTc1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJh
eS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzU2hvcnRBcnJheS5oIgorI2lu
Y2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNJ
bnRBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1
ZGUgIkpTQ2FudmFzRmxvYXRBcnJheS5oIgorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU0M6OkpTVmFs
dWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgQ2FudmFzQXJyYXkqIG9iamVjdCkKK3sKKyAgICBpZiAob2JqZWN0LT5pc0Zsb2F0QXJy
YXkoKSkKKyAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNGbG9hdEFy
cmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc0Zsb2F0QXJyYXkqPihv
YmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pc1Vuc2lnbmVkQnl0ZUFycmF5KCkpCisgICAgICAg
IHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXk+KGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkqPihv
YmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pc0J5dGVBcnJheSgpKQorICAgICAgICByZXR1cm4g
Z2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc0J5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxDYW52YXNCeXRlQXJyYXkqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0
LT5pc0ludEFycmF5KCkpCisgICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2Fu
dmFzSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzSW50QXJy
YXkqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pc1Vuc2lnbmVkSW50QXJyYXkoKSkKKyAg
ICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNpZ25lZEludEFycmF5
PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc1Vuc2lnbmVkSW50QXJyYXkq
PihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pc1Nob3J0QXJyYXkoKSkKKyAgICAgICAgcmV0
dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNTaG9ydEFycmF5PihleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PENhbnZhc1Nob3J0QXJyYXkqPihvYmplY3QpKTsKKyAgICBpZiAo
b2JqZWN0LT5pc1Vuc2lnbmVkU2hvcnRBcnJheSgpKQorICAgICAgICByZXR1cm4gZ2V0RE9NT2Jq
ZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkqPihvYmplY3QpKTsKKyAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwzNyArMjgsMzcg
QEAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSlNDYW52YXNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5LmgiCi0jaW5j
bHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzU2hv
cnRBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCi0jaW5j
bHVkZSAiSlNDYW52YXNJbnRBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRJbnRB
cnJheS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xBcnJheS5oIgorI2luY2x1ZGUgIkpTV2ViR0xCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJKU1dl
YkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hvcnRBcnJheS5oIgor
I2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdM
SW50QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1
ZGUgIkpTV2ViR0xGbG9hdEFycmF5LmgiCiAKLSNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorI2lu
Y2x1ZGUgIldlYkdMQXJyYXkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1KU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FudmFzQXJyYXkqIG9iamVjdCkKK0pTQzo6
SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBXZWJHTEFycmF5KiBvYmplY3QpCiB7CiAgICAgaWYgKG9iamVjdC0+aXNGbG9h
dEFycmF5KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzRmxv
YXRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNGbG9hdEFycmF5
Kj4ob2JqZWN0KSk7CisgICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTV2ViR0xG
bG9hdEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRmxvYXRBcnJh
eSo+KG9iamVjdCkpOwogICAgIGlmIChvYmplY3QtPmlzVW5zaWduZWRCeXRlQXJyYXkoKSkKLSAg
ICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eSo+KG9iamVjdCkpOworICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdM
VW5zaWduZWRCeXRlQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSo+KG9iamVjdCkpOwogICAgIGlmIChvYmplY3QtPmlzQnl0ZUFycmF5
KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzQnl0ZUFycmF5
PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PENhbnZhc0J5dGVBcnJheSo+KG9iamVj
dCkpOworICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMQnl0ZUFycmF5
PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQnl0ZUFycmF5Kj4ob2JqZWN0
KSk7CiAgICAgaWYgKG9iamVjdC0+aXNJbnRBcnJheSgpKQotICAgICAgICByZXR1cm4gZ2V0RE9N
T2JqZWN0V3JhcHBlcjxKU0NhbnZhc0ludEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PENhbnZhc0ludEFycmF5Kj4ob2JqZWN0KSk7CisgICAgICAgIHJldHVybiBnZXRET01P
YmplY3RXcmFwcGVyPEpTV2ViR0xJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTEludEFycmF5Kj4ob2JqZWN0KSk7CiAgICAgaWYgKG9iamVjdC0+aXNVbnNpZ25l
ZEludEFycmF5KCkpCi0gICAgICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFz
VW5zaWduZWRJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNV
bnNpZ25lZEludEFycmF5Kj4ob2JqZWN0KSk7CisgICAgICAgIHJldHVybiBnZXRET01PYmplY3RX
cmFwcGVyPEpTV2ViR0xVbnNpZ25lZEludEFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMVW5zaWduZWRJbnRBcnJheSo+KG9iamVjdCkpOwogICAgIGlmIChvYmplY3Qt
PmlzU2hvcnRBcnJheSgpKQotICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0Nh
bnZhc1Nob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFzU2hv
cnRBcnJheSo+KG9iamVjdCkpOworICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxK
U1dlYkdMU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTFNo
b3J0QXJyYXkqPihvYmplY3QpKTsKICAgICBpZiAob2JqZWN0LT5pc1Vuc2lnbmVkU2hvcnRBcnJh
eSgpKQotICAgICAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkqPihvYmplY3QpKTsKKyAgICAgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBw
ZXI8SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSo+KG9iamVjdCkpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJy
YXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDo1MDU3NSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5
Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiQ2FudmFz
Qnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQnl0
ZUFycmF5LmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK2NvbnN0IENsYXNzSW5mbyBKU0NhbnZhc0J5
dGVBcnJheUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rv
ciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNCeXRlQXJyYXlD
b25zdHJ1Y3Rvcjo6SlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9i
amVjdChKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNCeXRlQXJyYXlQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxE
b250RGVsZXRlfERvbnRFbnVtKTsKK30KKworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52
YXNCeXRlQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcioganND
b25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IqPihj
b25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gYXJyYXkgPSBzdGF0aWNf
Y2FzdDxDYW52YXNCeXRlQXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzQnl0ZUFycmF5LCBzaWduZWQg
Y2hhcj4oZXhlYywgYXJncykuZ2V0KCkpOworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMs
IGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOworfQorCitKU0M6
OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0
RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0
RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNCeXRlQXJyYXk7CisgICAgcmV0
dXJuIENvbnN0cnVjdFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dl
YkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA1NzUpCisr
KyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDM4ICsyNywzOCBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykK
IAotI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJK
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZl
ci5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1
ZGUgIkpTQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xCeXRlQXJyYXkuaCIKKyNp
bmNsdWRlICJKU1dlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTV2ViR0xCeXRlQXJyYXkuaCIKICNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEpTQzsKIAotY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIkNhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6
OnNfaW5mbywgMCwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1
Y3Rvcjo6c19pbmZvID0geyAiV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3RvciIsICZKU1dlYkdMQXJy
YXk6OnNfaW5mbywgMCwgMCB9OwogCi1KU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yOjpKU0Nh
bnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzQnl0
ZUFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpK
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNXZWJHTEJ5
dGVBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNCeXRlQXJyYXlQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5wcm90b3R5cGUsIEpTV2ViR0xCeXRlQXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xv
YmFsT2JqZWN0KSwgTm9uZSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsK
IH0KIAotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52YXNCeXRlQXJyYXkoRXhlY1N0YXRl
KiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0
aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYkdMQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTQ2FudmFz
Qnl0ZUFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0NhbnZh
c0J5dGVBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAgIFJlZlB0cjxDYW52YXNC
eXRlQXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzQnl0ZUFycmF5Kj4oY29uc3RydWN0
PENhbnZhc0J5dGVBcnJheSwgc2lnbmVkIGNoYXI+KGV4ZWMsIGFyZ3MpLmdldCgpKTsKKyAgICBK
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxK
U1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPFdl
YkdMQnl0ZUFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PFdlYkdMQnl0ZUFycmF5Kj4oY29uc3Ry
dWN0PFdlYkdMQnl0ZUFycmF5LCBzaWduZWQgY2hhcj4oZXhlYywgYXJncykuZ2V0KCkpOwogICAg
IHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgp
LCBhcnJheS5nZXQoKSkpOwogfQogCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNCeXRlQXJy
YXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0
cnVjdERhdGEpCitKU0M6OkNvbnN0cnVjdFR5cGUgSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9y
OjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsK
LSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdENhbnZhc0J5dGVB
cnJheTsKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdlYkdM
Qnl0ZUFycmF5OwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIApJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yLmg6NTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRl
QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0Nh
bnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgor
I2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xh
c3MgSlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9i
amVjdCB7CisgICAgcHVibGljOgorICAgICAgICBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9y
KEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgc3RhdGljIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1
YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRh
Jik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBKU0NhbnZh
c0J5dGVBcnJheUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMywxNyArMjMsMTcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYg
SlNDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTQ2FudmFzQnl0ZUFycmF5
Q29uc3RydWN0b3JfaAorI2lmbmRlZiBKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3JfaAorI2Rl
ZmluZSBKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3JfaAogCiAjaW5jbHVkZSAiSlNET01CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSAgICBjbGFzcyBKU0NhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0
cnVjdG9yT2JqZWN0IHsKKyAgICBjbGFzcyBKU1dlYkdMQnl0ZUFycmF5Q29uc3RydWN0b3IgOiBw
dWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0
Kik7CisgICAgICAgIEpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CiAKICAgICBwcml2YXRlOgpAQCAtNDMsNCArNDMsNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIH0KIAotI2VuZGlmIC8vIEpTQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3JfaAor
I2VuZGlmIC8vIEpTV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNTc1
KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcDo1
MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc0J5dGVB
cnJheS5oIgorCisjaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0NhbnZhc0J5dGVBcnJheTo6
aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpT
VmFsdWUgdmFsdWUpCit7CisgICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHNpZ25l
ZCBjaGFyPih2YWx1ZS50b0ludDMyKGV4ZWMpKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52
YXNCeXRlQXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxK
U0NhbnZhc0J5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEJ5dGVBcnJheUN1c3Rv
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIyICsyNywyMiBAQAogCiAjaWYgRU5BQkxFKDNE
X0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEJ5dGVBcnJheS5oIgogCi0jaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVk
ZSAiV2ViR0xCeXRlQXJyYXkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi12b2lkIEpTQ2FudmFzQnl0ZUFycmF5OjppbmRleFNldHRlcihKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQg
SlNXZWJHTEJ5dGVBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2ln
bmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaW1wbCgpLT5zZXQoaW5kZXgs
IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPih2YWx1ZS50b0ludDMyKGV4ZWMpKSk7CiB9CiAKLUpT
Qzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBDYW52YXNCeXRlQXJyYXkqIG9iamVjdCkKK0pTQzo6SlNWYWx1ZSB0b0pT
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBX
ZWJHTEJ5dGVBcnJheSogb2JqZWN0KQogewotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVy
PEpTQ2FudmFzQnl0ZUFycmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CisgICAgcmV0
dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNXZWJHTEJ5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBvYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yLmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CisKKyNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oIgorCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAi
SlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgPHJ1
bnRpbWUvRXJyb3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCitjb25zdCBDbGFzc0luZm8gSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3I6OnNf
aW5mbyA9IHsgIkNhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5Ojpz
X2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3I6OkpTQ2FudmFz
RmxvYXRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90
b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlO
YW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNGbG9hdEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMs
IGdsb2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVz
KCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250RW51
bSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFzRmxvYXRBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0
YXRpY19jYXN0PEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwor
ICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZhc0Zs
b2F0QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzRmxvYXRBcnJheSwgZmxvYXQ+KGV4ZWMsIGFyZ3Mp
LmdldCgpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5n
bG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKK30KKworSlNDOjpDb25zdHJ1Y3RUeXBlIEpT
Q2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IGNvbnN0cnVjdENhbnZhc0Zsb2F0QXJyYXk7CisgICAgcmV0dXJuIENvbnN0cnVjdFR5
cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
M0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xG
bG9hdEFycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDM4ICsyNywzOCBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUg
IkpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJHTEZsb2F0
QXJyYXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJD
YW52YXNGbG9hdEFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2Fu
dmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMRmxvYXRBcnJheS5oIgorI2luY2x1ZGUg
IkpTV2ViR0xBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJHTEZsb2F0QXJyYXkuaCIKICNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAotY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yOjpzX2lu
Zm8gPSB7ICJDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6c19p
bmZvLCAwLCAwIH07Citjb25zdCBDbGFzc0luZm8gSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rv
cjo6c19pbmZvID0geyAiV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IiLCAmSlNXZWJHTEFycmF5
OjpzX2luZm8sIDAsIDAgfTsKIAotSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3I6OkpTQ2Fu
dmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzRmxv
YXRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3I6
OkpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNXZWJH
TEZsb2F0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2Jq
ZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFzRmxvYXRBcnJheVByb3RvdHlwZTo6c2Vs
ZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNXZWJHTEZsb2F0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhl
YywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRF
bnVtKTsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52YXNGbG9hdEFycmF5KEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdz
KQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJHTEZsb2F0QXJyYXkoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
SlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2Fz
dDxKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICBSZWZQ
dHI8Q2FudmFzRmxvYXRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxDYW52YXNGbG9hdEFycmF5
Kj4oY29uc3RydWN0PENhbnZhc0Zsb2F0QXJyYXksIGZsb2F0PihleGVjLCBhcmdzKS5nZXQoKSk7
CisgICAgSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRp
Y19jYXN0PEpTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAg
UmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxXZWJHTEZsb2F0QXJy
YXkqPihjb25zdHJ1Y3Q8V2ViR0xGbG9hdEFycmF5LCBmbG9hdD4oZXhlYywgYXJncykuZ2V0KCkp
OwogICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBhcnJheS5nZXQoKSkpOwogfQogCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNG
bG9hdEFycmF5Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRh
JiBjb25zdHJ1Y3REYXRhKQorSlNDOjpDb25zdHJ1Y3RUeXBlIEpTV2ViR0xGbG9hdEFycmF5Q29u
c3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3RE
YXRhKQogewotICAgIGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Q2Fu
dmFzRmxvYXRBcnJheTsKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0
cnVjdFdlYkdMRmxvYXRBcnJheTsKICAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJyYXlDb25z
dHJ1Y3Rvci5oCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvci5oOjUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3Jf
aAorI2RlZmluZSBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcl9oCisKKyNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yIDogcHVibGlj
IERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEpTQ2FudmFzRmxv
YXRBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHByaXZh
dGU6CisgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEo
SlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0lu
Zm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICB9OworCit9CisK
KyNlbmRpZiAvLyBKU0NhbnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IuaAkocmV2
aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q29u
c3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMTcgKzIzLDE3IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yX2gKLSNk
ZWZpbmUgSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3JfaAorI2lmbmRlZiBKU1dlYkdMRmxv
YXRBcnJheUNvbnN0cnVjdG9yX2gKKyNkZWZpbmUgSlNXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3Rv
cl9oCiAKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RvY3VtZW50Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEpTQ2FudmFzRmxvYXRBcnJheUNv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBjbGFzcyBKU1dl
YkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsK
ICAgICBwdWJsaWM6Ci0gICAgICAgIEpTQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKEpTQzo6
RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgSlNXZWJHTEZsb2F0QXJy
YXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBwcml2YXRlOgpA
QCAtNDMsNCArNDMsNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIH0KIAotI2VuZGlmIC8vIEpT
Q2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yX2gKKyNlbmRpZiAvLyBKU1dlYkdMRmxvYXRBcnJh
eUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEZsb2F0QXJy
YXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEZs
b2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOjUwNTc1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXkuaCIKKworI2luY2x1ZGUg
IkNhbnZhc0Zsb2F0QXJyYXkuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit2b2lkIEpTQ2FudmFzRmxvYXRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZS50b0ludDMyKGV4
ZWMpKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNGbG9hdEFycmF5KiBvYmplY3QpCit7
CisgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlNDYW52YXNGbG9hdEFycmF5PihleGVj
LCBnbG9iYWxPYmplY3QsIG9iamVjdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xGbG9hdEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsMjIgKzI3LDIyIEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVk
ZSAiSlNDYW52YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiSlNXZWJHTEZsb2F0QXJyYXkuaCIK
IAotI2luY2x1ZGUgIkNhbnZhc0Zsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTEZsb2F0QXJy
YXkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIEpTQ2FudmFzRmxvYXRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit2b2lkIEpTV2ViR0xGbG9hdEFy
cmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpbXBsKCktPnNldChpbmRleCwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZh
c0Zsb2F0QXJyYXkqIG9iamVjdCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTEZsb2F0QXJyYXkqIG9i
amVjdCkKIHsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc0Zsb2F0QXJy
YXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0
V3JhcHBlcjxKU1dlYkdMRmxvYXRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA1NzUpCShm
cm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yLmNwcDo1
MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNJ
bnRBcnJheUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkNhbnZhc0ludEFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQ2Fu
dmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3QgQ2xhc3NJbmZvIEpTQ2Fu
dmFzSW50QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZvID0geyAiQ2FudmFzSW50QXJyYXlDb25zdHJ1
Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNJbnRBcnJh
eUNvbnN0cnVjdG9yOjpKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JP
YmplY3QoSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFs
T2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNJbnRBcnJheVByb3Rv
dHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3QoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5fERv
bnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENhbnZh
c0ludEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQoreworICAgIEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3RvcioganNDb25z
dHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0
cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8
Q2FudmFzSW50QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzSW50QXJyYXksIGludD4oZXhlYywgYXJn
cykuZ2V0KCkpOworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3It
Pmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOworfQorCitKU0M6OkNvbnN0cnVjdFR5cGUg
SlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5j
dGlvbiA9IGNvbnN0cnVjdENhbnZhc0ludEFycmF5OworICAgIHJldHVybiBDb25zdHJ1Y3RUeXBl
SG9zdDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFy
cmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywz
OCArMjcsMzggQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJKU0NhbnZh
c0ludEFycmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMSW50QXJyYXlDb25zdHJ1
Y3Rvci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJDYW52YXNJbnRBcnJh
eS5oIgotI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0NhbnZh
c0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0ludEFycmF5Lmgi
CisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgorI2luY2x1ZGUgIkpTV2ViR0xBcnJheUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkpTV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCisjaW5jbHVk
ZSAiSlNXZWJHTEludEFycmF5LmgiCiAjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKLWNvbnN0IENsYXNzSW5m
byBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbnZhc0ludEFycmF5
Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6c19pbmZvLCAwLCAwIH07Citjb25zdCBDbGFz
c0luZm8gSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIldlYkdMSW50QXJy
YXlDb25zdHJ1Y3RvciIsICZKU1dlYkdMQXJyYXk6OnNfaW5mbywgMCwgMCB9OwogCi1KU0NhbnZh
c0ludEFycmF5Q29uc3RydWN0b3I6OkpTQ2FudmFzSW50QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25z
dHJ1Y3Rvck9iamVjdChKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorSlNXZWJH
TEludEFycmF5Q29uc3RydWN0b3I6OkpTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0
ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0
cnVjdG9yT2JqZWN0KEpTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKLSAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNJbnRBcnJh
eVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNXZWJHTEludEFycmF5UHJvdG90
eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERpcmVjdChleGVj
LT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9u
dERlbGV0ZXxEb250RW51bSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFz
SW50QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYkdMSW50QXJyYXkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
CiB7Ci0gICAgSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3Rh
dGljX2Nhc3Q8SlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAg
IFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxDYW52YXNJbnRBcnJh
eSo+KGNvbnN0cnVjdDxDYW52YXNJbnRBcnJheSwgaW50PihleGVjLCBhcmdzKS5nZXQoKSk7Cisg
ICAgSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2Fz
dDxKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8
V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxXZWJHTEludEFycmF5Kj4oY29uc3Ry
dWN0PFdlYkdMSW50QXJyYXksIGludD4oZXhlYywgYXJncykuZ2V0KCkpOwogICAgIHJldHVybiBh
c09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5n
ZXQoKSkpOwogfQogCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNJbnRBcnJheUNvbnN0cnVj
dG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkK
K0pTQzo6Q29uc3RydWN0VHlwZSBKU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3Ry
dWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gICAgY29uc3Ry
dWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNJbnRBcnJheTsKKyAgICBj
b25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdlYkdMSW50QXJyYXk7CiAg
ICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5oCShyZXZpc2lvbiA1MDU3NSkJ
KGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IuaDo1
MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3RydWN0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0Nh
bnZhc0ludEFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZhc0ludEFycmF5Q29uc3Ry
dWN0b3JfaAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0NhbnZhc0ludEFycmF5
Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworICAgIHB1YmxpYzoK
KyAgICAgICAgSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNE
T01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNf
aW5mbzsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBl
IGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAgICAgIHZpcnR1YWwg
Y29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87
IH0KKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3Jf
aApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDb25zdHJ1Y3Rvci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3ICsyMywxNyBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0
b3JfaAotI2RlZmluZSBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3JfaAorI2lmbmRlZiBKU1dl
YkdMSW50QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTV2ViR0xJbnRBcnJheUNvbnN0cnVj
dG9yX2gKIAogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgSlNDYW52YXNJbnRBcnJheUNv
bnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBjbGFzcyBKU1dl
YkdMSW50QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CiAg
ICAgcHVibGljOgotICAgICAgICBKU0NhbnZhc0ludEFycmF5Q29uc3RydWN0b3IoSlNDOjpFeGVj
U3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgICAgICBKU1dlYkdMSW50QXJyYXlDb25z
dHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHN0
YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBwcml2YXRlOgpAQCAtNDMs
NCArNDMsNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIH0KIAotI2VuZGlmIC8vIEpTQ2FudmFz
SW50QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZW5kaWYgLy8gSlNXZWJHTEludEFycmF5Q29uc3RydWN0
b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNJ
bnRBcnJheUN1c3RvbS5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xJ
bnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNs
dWRlICJKU0NhbnZhc0ludEFycmF5LmgiCisKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSlND
YW52YXNJbnRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0
YXRpY19jYXN0PHNpZ25lZCBpbnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbnZhc0ludEFycmF5KiBvYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTU9i
amVjdFdyYXBwZXI8SlNDYW52YXNJbnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3Qp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMSW50QXJyYXlDdXN0b20uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEludEFycmF5Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xJbnRB
cnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIyICsyNywyMiBAQAogCiAjaWYg
RU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNs
dWRlICJKU1dlYkdMSW50QXJyYXkuaCIKIAotI2luY2x1ZGUgIkNhbnZhc0ludEFycmF5LmgiCisj
aW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNDYW52YXNJbnRBcnJheTo6aW5kZXhTZXR0ZXIoSlND
OjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit2
b2lkIEpTV2ViR0xJbnRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaW1wbCgpLT5zZXQoaW5k
ZXgsIHN0YXRpY19jYXN0PHNpZ25lZCBpbnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbnZhc0ludEFycmF5KiBvYmplY3QpCitKU0M6OkpTVmFsdWUgdG9K
UyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
V2ViR0xJbnRBcnJheSogb2JqZWN0KQogewotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVy
PEpTQ2FudmFzSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICByZXR1
cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEQ3VzdG9tLmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NB
TlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisKKyNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCisjaW5jbHVkZSAiSlNDYW52YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiSlND
YW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5o
IgorI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25GYXN0TWFsbG9jUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6YnVmZmVyRGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNv
bnN0JiBhcmdzKQoreworICAgIGlmIChhcmdzLnNpemUoKSAhPSAzKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CisKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgdXNhZ2UgPSBhcmdzLmF0KDIp
LnRvSW50MzIoZXhlYyk7CisKKyAgICAvLyBJZiBhcmd1bWVudCAxIGlzIGEgbnVtYmVyLCB3ZSBh
cmUgaW5pdGlhbGl6aW5nIHRoaXMgYnVmZmVyIHRvIHRoYXQgc2l6ZQorICAgIGlmICghYXJncy5h
dCgxKS5pc09iamVjdCgpKSB7CisgICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGFyZ3MuYXQo
MSkudG9JbnQzMihleGVjKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKj4oaW1wbCgpKS0+YnVmZmVyRGF0YSh0YXJnZXQsIGNvdW50LCB1c2FnZSk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIENhbnZhc0FycmF5KiBhcnJh
eSA9IHRvQ2FudmFzQXJyYXkoYXJncy5hdCgxKSk7CisgICAgCisgICAgc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKS0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5
LCB1c2FnZSk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTVmFsdWUgSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IEpTQzo6QXJnTGlzdCBjb25zdCYgYXJncykKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgIT0gMykK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworCisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIHVuc2lnbmVkIG9m
ZnNldCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBDYW52YXNBcnJheSog
YXJyYXkgPSB0b0NhbnZhc0FycmF5KGFyZ3MuYXQoMikpOworICAgIAorICAgIHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSktPmJ1ZmZlclN1YkRhdGEodGFyZ2V0
LCBvZmZzZXQsIGFycmF5KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworLy8gdm9p
ZCB0ZXhJbWFnZTJESFRNTChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9u
ZyBsZXZlbCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSk7CitKU1ZhbHVlIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlz
dCYgYXJncykKK3sgCisgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMykKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKTsgICAgCisgICAgdW5zaWduZWQgdGFyZ2V0
ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICB1bnNp
Z25lZCBsZXZlbCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAg
ICBpZiAoYXJncy5zaXplKCkgPiA1KSB7CisgICAgICAgIC8vIFRoaXMgbXVzdCBiZSB0aGUgYmFy
ZSBhcnJheSBjYXNlLgorICAgICAgICBpZiAoYXJncy5zaXplKCkgIT0gOSkKKyAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKKyAgICAgICAgICAgIAorICAg
ICAgICB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCA9IGFyZ3MuYXQoMikudG9JbnQzMihleGVjKTsK
KyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworCisgICAgICAgIHVuc2lnbmVkIHdpZHRoID0gYXJncy5hdCgzKS50
b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgdW5zaWduZWQgaGVpZ2h0
ID0gYXJncy5hdCg0KS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpICAgIAorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAg
dW5zaWduZWQgYm9yZGVyID0gYXJncy5hdCg1KS50b0ludDMyKGV4ZWMpOworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisKKyAgICAgICAgdW5zaWduZWQgZm9ybWF0ID0gYXJncy5hdCg2KS50b0ludDMyKGV4ZWMp
OworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgdW5zaWduZWQgdHlwZSA9IGFyZ3MuYXQoNyku
dG9JbnQzMihleGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgICAgIENhbnZhc0FycmF5KiBh
cnJheSA9IHRvQ2FudmFzQXJyYXkoYXJncy5hdCg4KSk7CisgICAgICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkgICAgCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICBpZiAoIWFycmF5KQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRv
IGNoZWNrIHRvIG1ha2Ugc3VyZSBDYW52YXNBcnJheSBpcyBhIENhbnZhc0J5dGVBcnJheSBvciBD
YW52YXNTaG9ydEFycmF5LAorICAgICAgICAvLyBkZXBlbmRpbmcgb24gdGhlIHBhc3NlZCB0eXBl
IHBhcmFtZXRlci4KKyAgICAgICAgCisgICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBhcnJheSwgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlIGltYWdlIHBhcmFtZXRlciBjYW4gYmUgYSA8aW1nPiBvciA8Y2FudmFz
PiBlbGVtZW50LgorICAgIEpTVmFsdWUgdmFsdWUgPSBhcmdzLmF0KDIpOworICAgIGlmICghdmFs
dWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKKyAgICBKU09iamVjdCogbyA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICAKKyAgICBib29sIGZs
aXBZID0gKGFyZ3Muc2l6ZSgpID4gMykgPyBhcmdzLmF0KDMpLnRvQm9vbGVhbihleGVjKSA6IGZh
bHNlOworICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IChhcmdzLnNpemUoKSA+IDQpID8gYXJn
cy5hdCgzKS50b0Jvb2xlYW4oZXhlYykgOiBmYWxzZTsKKyAgICAKKyAgICBpZiAoby0+aW5oZXJp
dHMoJkpTSFRNTEltYWdlRWxlbWVudDo6c19pbmZvKSkgeworICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWdFbHQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oc3RhdGljX2Nhc3Q8
SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAgICBjb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGltZ0VsdCwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAg
ICB9IGVsc2UgaWYgKG8tPmluaGVyaXRzKCZKU0hUTUxDYW52YXNFbGVtZW50OjpzX2luZm8pKSB7
CisgICAgICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2Fu
dmFzRWxlbWVudCo+KHN0YXRpY19jYXN0PEpTSFRNTEVsZW1lbnQqPihvKS0+aW1wbCgpKTsKKyAg
ICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjYW52YXMsIGZsaXBZLCBw
cmVtdWx0aXBseUFscGhhLCBlYyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7ICAgIAorfQorCisvLyB2b2lkIHRleFN1YkltYWdlMkRIVE1MKGluIHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGxldmVsLCBpbiB1bnNpZ25lZCBsb25n
IHhvZmYsIGluIHVuc2lnbmVkIGxvbmcgeW9mZiwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4g
dW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UpOworSlNWYWx1
ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7IAorICAgIGlmIChhcmdzLnNpemUoKSA8IDcgfHwg
YXJncy5zaXplKCkgPiA5KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhF
cnJvcik7CisKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPSBzdGF0aWNf
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpOyAgICAKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBhcmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgbGV2ZWwg
PSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CisgICAgdW5zaWduZWQgeG9mZiA9IGFyZ3MuYXQo
MikudG9JbnQzMihleGVjKTsKKyAgICB1bnNpZ25lZCB5b2ZmID0gYXJncy5hdCgzKS50b0ludDMy
KGV4ZWMpOworICAgIHVuc2lnbmVkIHdpZHRoID0gYXJncy5hdCg0KS50b0ludDMyKGV4ZWMpOwor
ICAgIHVuc2lnbmVkIGhlaWdodCA9IGFyZ3MuYXQoNSkudG9JbnQzMihleGVjKTsKKyAgICAKKyAg
ICAvLyBUaGUgaW1hZ2UgcGFyYW1ldGVyIGNhbiBiZSBhIDxpbWc+IG9yIDxjYW52YXM+IGVsZW1l
bnQuCisgICAgSlNWYWx1ZSB2YWx1ZSA9IGFyZ3MuYXQoNik7CisgICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAg
IEpTT2JqZWN0KiBvID0gYXNPYmplY3QodmFsdWUpOworICAgIAorICAgIGJvb2wgZmxpcFkgPSAo
YXJncy5zaXplKCkgPiAzKSA/IGFyZ3MuYXQoMykudG9Cb29sZWFuKGV4ZWMpIDogZmFsc2U7Cisg
ICAgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gKGFyZ3Muc2l6ZSgpID4gNCkgPyBhcmdzLmF0KDMp
LnRvQm9vbGVhbihleGVjKSA6IGZhbHNlOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGlmIChvLT5pbmhlcml0cygmSlNIVE1MSW1hZ2VFbGVtZW50OjpzX2luZm8pKSB7Cisg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltZ0VsdCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQqPihzdGF0aWNfY2FzdDxKU0hUTUxFbGVtZW50Kj4obyktPmltcGwoKSk7CisgICAgICAg
IGNvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZiwgeW9mZiwgd2lkdGgs
IGhlaWdodCwgaW1nRWx0LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOworICAgIH0gZWxz
ZSBpZiAoby0+aW5oZXJpdHMoJkpTSFRNTENhbnZhc0VsZW1lbnQ6OnNfaW5mbykpIHsKKyAgICAg
ICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVt
ZW50Kj4oc3RhdGljX2Nhc3Q8SlNIVE1MRWxlbWVudCo+KG8pLT5pbXBsKCkpOworICAgICAgICBj
b250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmYsIHlvZmYsIHdpZHRoLCBo
ZWlnaHQsIGNhbnZhcywgZmxpcFksIHByZW11bHRpcGx5QWxwaGEsIGVjKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Cit2b2lkIHRvQXJyYXkoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVComIGFycmF5LCBpbnQmIHNpemUpCit7CisgICAgYXJyYXkgPSAwOworICAgIAor
ICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7CisgICAgaW50IGxlbmd0
aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIEpTQzo6SWRlbnRpZmllcihleGVjLCAibGVuZ3RoIikpLnRv
SW50MzIoZXhlYyk7CisgICAgdm9pZCogdGVtcFZhbHVlczsKKyAgICBpZiAoIXRyeUZhc3RNYWxs
b2MobGVuZ3RoICogc2l6ZW9mKFQpKS5nZXRWYWx1ZSh0ZW1wVmFsdWVzKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFQqIHZhbHVlcyA9IHN0YXRpY19jYXN0PFQqPih0ZW1wVmFsdWVzKTsK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIEpTQzo6SlNW
YWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdmFsdWVzW2ldID0gc3RhdGlj
X2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7CisgICAgfQorCisgICAgYXJyYXkgPSB2YWx1ZXM7
CisgICAgc2l6ZSA9IGxlbmd0aDsKK30KKworZW51bSBEYXRhRnVuY3Rpb25Ub0NhbGwgeworICAg
IGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAorICAg
IGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZf
dmVydGV4QXR0cmliNHYKK307CisKK2VudW0gRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKKyAg
ICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4
NGZ2Cit9OworCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9u
VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3Ms
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBpZiAoYXJncy5zaXpl
KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwor
CisgICAgbG9uZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgICAgICAgCisgICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGNhbnZhc0FycmF5ID0gdG9D
YW52YXNGbG9hdEFycmF5KGFyZ3MuYXQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBpZiAo
Y2FudmFzQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoKGYpIHsKKyAgICAgICAgICAgIGNhc2UgZl91
bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgp
KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3Jt
MmZ2KGxvY2F0aW9uLCBjYW52YXNBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgY2FudmFzQXJyYXku
Z2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVu
aWZvcm00ZnYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMXY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjFmdihsb2NhdGlv
biwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgZl92ZXJ0ZXhB
dHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBjYW52YXNBcnJheS5n
ZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OiBjb250ZXh0
LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRpb24sIGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjRm
dihsb2NhdGlvbiwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgZmxvYXQqIGFycmF5Owor
ICAgIGludCBzaXplOworICAgIHRvQXJyYXk8ZmxvYXQ+KGV4ZWMsIGFyZ3MuYXQoMSksIGFycmF5
LCBzaXplKTsKKyAgICAKKyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IpOworCisgICAgc3dpdGNoKGYpIHsKKyAgICAgICAgY2FzZSBmX3Vu
aWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVh
azsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlv
biwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjogY29udGV4
dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXksIHNpemUp
OyBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl92
ZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSwg
c2l6ZSk7IGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZl
cnRleEF0dHJpYjNmdihsb2NhdGlvbiwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFy
cmF5LCBzaXplKTsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQor
CitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYs
IEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRCogY29udGV4dCkKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgIT0gMikK
KyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworCisgICAgbG9u
ZyBsb2NhdGlvbiA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
CisgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBjYW52YXNBcnJheSA9IHRvQ2FudmFzSW50QXJy
YXkoYXJncy5hdCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIGlmIChjYW52YXNBcnJheSkg
eworICAgICAgICBzd2l0Y2goZikgeworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjogY29u
dGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24s
IGNhbnZhc0FycmF5LmdldCgpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybTN2
OiBjb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBjYW52YXNBcnJheS5nZXQoKSk7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2Nh
dGlvbiwgY2FudmFzQXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAg
ICAKKyAgICBpbnQqIGFycmF5OworICAgIGludCBzaXplOworICAgIHRvQXJyYXk8aW50PihleGVj
LCBhcmdzLmF0KDEpLCBhcnJheSwgc2l6ZSk7CisgICAgCisgICAgaWYgKCFhcnJheSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIHN3aXRjaChmKSB7
CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6IGNvbnRleHQt
PnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LCBzaXplKTsg
YnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00aXYobG9j
YXRpb24sIGFycmF5LCBzaXplKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBk
YXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MsIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCogY29udGV4dCkKK3sKKyAgICBpZiAoYXJncy5zaXplKCkgIT0gMykKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworCisgICAgbG9uZyBsb2NhdGlvbiA9
IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
ICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgCisgICAgYm9vbCB0
cmFuc3Bvc2UgPSBhcmdzLmF0KDEpLnRvQm9vbGVhbihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAg
CisgICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGNhbnZhc0FycmF5ID0gdG9DYW52YXNGbG9h
dEFycmF5KGFyZ3MuYXQoMikpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBpZiAoY2FudmFzQXJy
YXkpIHsKKyAgICAgICAgc3dpdGNoKGYpIHsKKyAgICAgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4MmZ2OiBjb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGNh
bnZhc0FycmF5LmdldCgpKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJp
eDNmdjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBjYW52
YXNBcnJheS5nZXQoKSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0
ZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgY2FudmFz
QXJyYXkuZ2V0KCkpOyBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisgICAgCisgICAgZmxvYXQqIGFycmF5OworICAgIGludCBzaXplOworICAg
IHRvQXJyYXk8ZmxvYXQ+KGV4ZWMsIGFyZ3MuYXQoMiksIGFycmF5LCBzaXplKTsKKyAgICAKKyAg
ICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OworCisgICAgc3dpdGNoKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6IGNv
bnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUp
OyBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6IGNvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUpOyBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXksIHNpemUpOyBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVj
LCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsK
K30KKworSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWl2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3VuaWZvcm0ydiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKj4oaW1wbCgpKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVj
LCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsK
K30KKworSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2Z2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
aShmX3VuaWZvcm0zdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKj4oaW1wbCgpKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdM
aXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVj
LCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsK
K30KKworSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGl2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIGRhdGFGdW5j
dGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCo+KGltcGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpB
cmdMaXN0JiBhcmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmli
M3YsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGlt
cGwoKSkpOworfQorCitKU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZl
cnRleEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBh
cmdzKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMs
IGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDE0ICsyNywxNCBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKIAotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJKU0NhbnZhc0Zsb2F0QXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0lu
dEFycmF5LmgiCisjaW5jbHVkZSAiSlNXZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dl
YkdMSW50QXJyYXkuaCIKICNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXguaCIK
QEAgLTQ2LDcgKzQ2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1KU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBK
U0M6OkFyZ0xpc3QgY29uc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDMpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTU3LDE3ICs1
NywxNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmCiAgICAgLy8g
SWYgYXJndW1lbnQgMSBpcyBhIG51bWJlciwgd2UgYXJlIGluaXRpYWxpemluZyB0aGlzIGJ1ZmZl
ciB0byB0aGF0IHNpemUKICAgICBpZiAoIWFyZ3MuYXQoMSkuaXNPYmplY3QoKSkgewogICAgICAg
ICB1bnNpZ25lZCBpbnQgY291bnQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgICAg
IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSktPmJ1ZmZlckRh
dGEodGFyZ2V0LCBjb3VudCwgdXNhZ2UpOworICAgICAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHQqPihpbXBsKCkpLT5idWZmZXJEYXRhKHRhcmdldCwgY291bnQsIHVzYWdlKTsK
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgfQogCi0gICAgQ2FudmFzQXJyYXkq
IGFycmF5ID0gdG9DYW52YXNBcnJheShhcmdzLmF0KDEpKTsKKyAgICBXZWJHTEFycmF5KiBhcnJh
eSA9IHRvV2ViR0xBcnJheShhcmdzLmF0KDEpKTsKICAgICAKLSAgICBzdGF0aWNfY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpLT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXks
IHVzYWdlKTsKKyAgICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkp
LT5idWZmZXJEYXRhKHRhcmdldCwgYXJyYXksIHVzYWdlKTsKICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIH0KIAotSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZmVyU3Vi
RGF0YShKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQorSlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgSlNDOjpBcmdMaXN0IGNvbnN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUo
KSAhPSAzKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvcik7CkBA
IC03NSwyMCArNzUsMjAgQEAgSlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVm
ZgogICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKICAgICB1
bnNpZ25lZCBvZmZzZXQgPSBhcmdzLmF0KDEpLnRvSW50MzIoZXhlYyk7CiAgICAgCi0gICAgQ2Fu
dmFzQXJyYXkqIGFycmF5ID0gdG9DYW52YXNBcnJheShhcmdzLmF0KDIpKTsKKyAgICBXZWJHTEFy
cmF5KiBhcnJheSA9IHRvV2ViR0xBcnJheShhcmdzLmF0KDIpKTsKICAgICAKLSAgICBzdGF0aWNf
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpLT5idWZmZXJTdWJEYXRhKHRh
cmdldCwgb2Zmc2V0LCBhcnJheSk7CisgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4oaW1wbCgpKS0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXkpOwogICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCiAvLyB2b2lkIHRleEltYWdlMkRIVE1MKGluIHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGxldmVsLCBpbiBIVE1MSW1hZ2VF
bGVtZW50IGltYWdlKTsKLUpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleElt
YWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFy
Z0xpc3QmIGFyZ3MpCiB7IAogICAgIGlmIChhcmdzLnNpemUoKSA8IDMpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9IHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSk7ICAgIAorICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+
KGltcGwoKSk7ICAgIAogICAgIHVuc2lnbmVkIHRhcmdldCA9IGFyZ3MuYXQoMCkudG9JbnQzMihl
eGVjKTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKQEAgLTEyNiwxNCArMTI2LDE0IEBAIEpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleEkKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAg
ICAKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCi0gICAgICAgIENhbnZhc0Fy
cmF5KiBhcnJheSA9IHRvQ2FudmFzQXJyYXkoYXJncy5hdCg4KSk7CisgICAgICAgIFdlYkdMQXJy
YXkqIGFycmF5ID0gdG9XZWJHTEFycmF5KGFyZ3MuYXQoOCkpOwogICAgICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpICAgIAogICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgaWYgKCFhcnJheSkKICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogTmVl
ZCB0byBjaGVjayB0byBtYWtlIHN1cmUgQ2FudmFzQXJyYXkgaXMgYSBDYW52YXNCeXRlQXJyYXkg
b3IgQ2FudmFzU2hvcnRBcnJheSwKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gY2hlY2sgdG8g
bWFrZSBzdXJlIFdlYkdMQXJyYXkgaXMgYSBXZWJHTEJ5dGVBcnJheSBvciBXZWJHTFNob3J0QXJy
YXksCiAgICAgICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgcGFzc2VkIHR5cGUgcGFyYW1ldGVyLgog
ICAgICAgICAKICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIGFycmF5LCBl
Yyk7CkBAIC0xNjMsMTIgKzE2MywxMiBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp0ZXhJCiB9CiAKIC8vIHZvaWQgdGV4U3ViSW1hZ2UyREhUTUwoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgbGV2ZWwsIGluIHVuc2lnbmVkIGxvbmcgeG9mZiwg
aW4gdW5zaWduZWQgbG9uZyB5b2ZmLCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25l
ZCBsb25nIGhlaWdodCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSk7Ci1KU1ZhbHVlIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgQXJnTGlzdCYgYXJncykKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1
YkltYWdlMkQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogeyAKICAgICBp
ZiAoYXJncy5zaXplKCkgPCA3IHx8IGFyZ3Muc2l6ZSgpID4gOSkKICAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOwogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0ID0gc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1w
bCgpKTsgICAgCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKTsgICAgCiAgICAgdW5zaWduZWQgdGFy
Z2V0ID0gYXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOwogICAgIHVuc2lnbmVkIGxldmVsID0gYXJn
cy5hdCgxKS50b0ludDMyKGV4ZWMpOwogICAgIHVuc2lnbmVkIHhvZmYgPSBhcmdzLmF0KDIpLnRv
SW50MzIoZXhlYyk7CkBAIC0yMzQsNyArMjM0LDcgQEAgZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhU
b0NhbGwgewogICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3Vu
aWZvcm1NYXRyaXg0ZnYKIH07CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihE
YXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0KQorc3RhdGljIEpT
Qzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAgICAgICAgIHJldHVy
biB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTI0Myw3ICsyNDMsNyBAQCBzdGF0
aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1CiAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIAot
ICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBjYW52YXNBcnJheSA9IHRvQ2FudmFzRmxvYXRB
cnJheShhcmdzLmF0KDEpKTsKKyAgICBSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBjYW52YXNBcnJh
eSA9IHRvV2ViR0xGbG9hdEFycmF5KGFyZ3MuYXQoMSkpOwogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgICAgCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAKQEAg
LTI4MSw3ICsyODEsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0
YUZ1bmN0aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6QXJnTGlzdCYgYXJncywgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0
KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBm
LCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCiAg
ICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yKTsKQEAgLTI5MCw3ICsy
OTAsNyBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1CiAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CiAgICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gY2FudmFzQXJyYXkgPSB0b0Nh
bnZhc0ludEFycmF5KGFyZ3MuYXQoMSkpOworICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBjYW52
YXNBcnJheSA9IHRvV2ViR0xJbnRBcnJheShhcmdzLmF0KDEpKTsKICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpICAgIAogICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
CkBAIC0zMjIsNyArMzIyLDcgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERh
dGFGdQogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogfQogCi1zdGF0aWMgSlNDOjpKU1ZhbHVl
IGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncywgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKiBjb250ZXh0KQorc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBK
U0M6OkFyZ0xpc3QmIGFyZ3MsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBpZiAoYXJncy5zaXplKCkgIT0gMykKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
U3ludGF4RXJyb3IpOwpAQCAtMzM1LDcgKzMzNSw3IEBAIHN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0
YUZ1bmN0aW9uTWF0cml4KEQKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAogICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgCi0gICAgUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IGNhbnZhc0FycmF5ID0gdG9DYW52YXNGbG9hdEFycmF5KGFyZ3MuYXQoMikpOwor
ICAgIFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGNhbnZhc0FycmF5ID0gdG9XZWJHTEZsb2F0QXJy
YXkoYXJncy5hdCgyKSk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIApAQCAtMzYzLDc5ICszNjMsNzkgQEAg
c3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRAogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJn
cykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3VuaWZvcm0xdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0
JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFy
Z0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsK
LSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgYXJncywgc3RhdGlj
X2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdz
KQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBhcmdzLCBz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKKyAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGFy
Z3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGltcGwoKSkpOworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJn
TGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhl
YywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGFyZ3MsIHN0YXRp
Y19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2
LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBs
KCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhlYywgYXJncywg
c3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6
SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+
KGltcGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBh
cmdzLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAot
SlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgYXJncywgc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQogCi1KU0M6OkpTVmFsdWUgSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgo
Zl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZf
dW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdD
b250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlND
OjpBcmdMaXN0JiBhcmdzKQorSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0
ZnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGlt
cGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2
LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihpbXBsKCkp
KTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhB
dHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgYXJncywgc3RhdGljX2Nh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgYXJncywgc3RhdGljX2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU0M6OkFyZ0xpc3QmIGFyZ3MpCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpB
cmdMaXN0JiBhcmdzKQogewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmli
MnYsIGV4ZWMsIGFyZ3MsIHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KGlt
cGwoKSkpOworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMs
IGFyZ3MsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KGltcGwoKSkpOwogfQog
Ci1KU0M6OkpTVmFsdWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNm
dihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSlNDOjpBcmdMaXN0JiBhcmdzKQorSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncykKIHsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqPihpbXBsKCkpKTsKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBhcmdzLCBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihpbXBsKCkpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpT
Qzo6QXJnTGlzdCYgYXJncykKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU0M6OkFyZ0xpc3Qm
IGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhl
YywgYXJncywgc3RhdGljX2Nhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKj4oaW1wbCgpKSk7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgYXJncywg
c3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCgpKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFNob3J0
QXJyYXlDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwOjUwNTc1
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFzU2hv
cnRBcnJheUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkNhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NhbnZhc0FycmF5LmgiCisjaW5jbHVk
ZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJD
b25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzU2hvcnRBcnJheS5oIgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOworCitjb25zdCBDbGFzc0luZm8gSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3I6
OnNfaW5mbyA9IHsgIkNhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0FycmF5
OjpzX2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3I6OkpTQ2Fu
dmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTQ2FudmFzU2hv
cnRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQ
cm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNTaG9ydEFycmF5UHJvdG90eXBlOjpzZWxmKGV4
ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250
RW51bSk7Cit9CisKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFzU2hvcnRBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3sKKyAgICBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9
IHN0YXRpY19jYXN0PEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3Ip
OworICAgIFJlZlB0cjxDYW52YXNTaG9ydEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZh
c1Nob3J0QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzU2hvcnRBcnJheSwgc2hvcnQ+KGV4ZWMsIGFy
Z3MpLmdldCgpKTsKKyAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9y
LT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKK30KKworSlNDOjpDb25zdHJ1Y3RUeXBl
IEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK3sKKyAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IGNvbnN0cnVjdENhbnZhc1Nob3J0QXJyYXk7CisgICAgcmV0dXJuIENvbnN0cnVj
dFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJh
eUNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDM5ICsyNywzOSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1
ZGUgIkpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiSlNXZWJHTFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJDYW52YXNTaG9ydEFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheS5oIgotI2luY2x1
ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVy
Q29uc3RydWN0b3IuaCIKLSNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRl
ICJXZWJHTFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXkuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXlCdWZmZXJDb25z
dHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTV2ViR0xTaG9ydEFycmF5LmgiCiAjaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLWNvbnN0IENsYXNzSW5mbyBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6OnNf
aW5mbywgMCwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0
b3I6OnNfaW5mbyA9IHsgIldlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yIiwgJkpTV2ViR0xBcnJh
eTo6c19pbmZvLCAwLCAwIH07CiAKLUpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yOjpKU0Nh
bnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0NhbnZhc1No
b3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+b2JqZWN0
UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCitKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9y
OjpKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICA6IERPTUNvbnN0cnVjdG9yT2JqZWN0KEpTV2Vi
R0xTaG9ydEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9i
amVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQogewotICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU0NhbnZhc1Nob3J0QXJyYXlQcm90b3R5cGU6OnNl
bGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTV2ViR0xTaG9ydEFycmF5UHJvdG90eXBlOjpzZWxmKGV4
ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOwogICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHl8RG9udERlbGV0ZXxEb250
RW51bSk7CiB9CiAKLXN0YXRpYyBKU09iamVjdCogY29uc3RydWN0Q2FudmFzU2hvcnRBcnJheShF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBjb25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJn
cykKK3N0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2ViR0xTaG9ydEFycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAg
IEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKiBqc0NvbnN0cnVjdG9yID0gc3RhdGljX2Nh
c3Q8SlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7Ci0gICAgUmVm
UHRyPENhbnZhc1Nob3J0QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzU2hvcnRBcnJh
eSo+KGNvbnN0cnVjdDxDYW52YXNTaG9ydEFycmF5LCBzaG9ydD4oZXhlYywgYXJncykuZ2V0KCkp
OworICAgIEpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0
aWNfY2FzdDxKU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAg
IFJlZlB0cjxXZWJHTFNob3J0QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8V2ViR0xTaG9ydEFy
cmF5Kj4oY29uc3RydWN0PFdlYkdMU2hvcnRBcnJheSwgc2hvcnQ+KGV4ZWMsIGFyZ3MpLmdldCgp
KTsKICAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKIH0KIAotSlNDOjpDb25zdHJ1Y3RUeXBlIEpTQ2FudmFz
U2hvcnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKK0pTQzo6Q29uc3RydWN0VHlwZSBKU1dlYkdMU2hvcnRBcnJheUNv
bnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYgY29uc3RydWN0
RGF0YSkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdENh
bnZhc1Nob3J0QXJyYXk7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25z
dHJ1Y3RXZWJHTFNob3J0QXJyYXk7CiAgICAgcmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQog
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFycmF5Q29u
c3RydWN0b3IuaAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IuaDo1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9y
X2gKKyNkZWZpbmUgSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3JfaAorCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKyAgICBjbGFzcyBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvciA6IHB1Ymxp
YyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CisgICAgcHVibGljOgorICAgICAgICBKU0NhbnZhc1No
b3J0QXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CisKKyAgICBwcml2
YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBnZXRDb25zdHJ1Y3REYXRh
KEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNvbnN0IEpTQzo6Q2xhc3NJ
bmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisgICAgfTsKKworfQor
CisjZW5kaWYgLy8gSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgJKHJl
dmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMU2hvcnRBcnJheUNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3ICsyMywxNyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCi0j
ZGVmaW5lIEpTQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yX2gKKyNpZm5kZWYgSlNXZWJHTFNo
b3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0
b3JfaAogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBKU0NhbnZhc1Nob3J0QXJyYXlD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CisgICAgY2xhc3MgSlNX
ZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7
CiAgICAgcHVibGljOgotICAgICAgICBKU0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3RvcihKU0M6
OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAgICAgIEpTV2ViR0xTaG9ydEFy
cmF5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwogICAg
ICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFzc0luZm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToK
QEAgLTQzLDQgKzQzLDQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB9CiAKLSNlbmRpZiAvLyBK
U0NhbnZhc1Nob3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZW5kaWYgLy8gSlNXZWJHTFNob3J0QXJy
YXlDb25zdHJ1Y3Rvcl9oCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xTaG9ydEFy
cmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xT
aG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNTaG9ydEFycmF5Q3VzdG9tLmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNTaG9ydEFycmF5LmgiCisKKyNpbmNsdWRl
ICJDYW52YXNTaG9ydEFycmF5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBKU0NhbnZhc1Nob3J0QXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQorewor
ICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDxzaWduZWQgc2hvcnQ+KHZhbHVlLnRv
SW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Nob3J0QXJyYXkqIG9i
amVjdCkKK3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Nob3J0QXJy
YXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDU3NSkK
KysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyMiArMjcsMjIgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAK
LSNpbmNsdWRlICJKU0NhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hvcnRB
cnJheS5oIgogCi0jaW5jbHVkZSAiQ2FudmFzU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdM
U2hvcnRBcnJheS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXZvaWQgSlNDYW52YXNTaG9ydEFycmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNXZWJH
TFNob3J0QXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bmRleCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQogewogICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0
aWNfY2FzdDxzaWduZWQgc2hvcnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKIH0KIAotSlNDOjpK
U1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIENhbnZhc1Nob3J0QXJyYXkqIG9iamVjdCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpT
Qzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJH
TFNob3J0QXJyYXkqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxK
U0NhbnZhc1Nob3J0QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICByZXR1
cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBvYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcDo1MDU3NSkKKysrIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vy
cm9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
Y29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6c19p
bmZvID0geyAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciIsICZKU0NhbnZhc0Fy
cmF5OjpzX2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVj
dG9yOjpKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVj
LCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JP
YmplY3QoSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1
cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKK3sKKyAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsK
KyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhl
YywgMiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmpl
Y3QqIGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpTQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0
PEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAg
ICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXks
IHVuc2lnbmVkIGNoYXI+KGV4ZWMsIGFyZ3MpLmdldCgpKTsKKyAgICByZXR1cm4gYXNPYmplY3Qo
dG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxPYmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsK
K30KKworSlNDOjpDb25zdHJ1Y3RUeXBlIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1
Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEp
Cit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheTsKKyAgICByZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMzggKzI3LDM4IEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5j
bHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAi
SlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJK
U0NhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0
cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1
ZGUgIldlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXlCdWZm
ZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1
ZGUgIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3Iu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1jb25z
dCBDbGFzc0luZm8gSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpzX2luZm8g
PSB7ICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6
OnNfaW5mbywgMCwgMCB9OworY29uc3QgQ2xhc3NJbmZvIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0
b3IiLCAmSlNXZWJHTEFycmF5OjpzX2luZm8sIDAsIDAgfTsKIAotSlNDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3Io
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQotICAgIDog
RE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2Jh
bE9iamVjdCkKK0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpKU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVjdC0+
b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCiB7Ci0gICAgcHV0RGlyZWN0KGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlQcm90
b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheVBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKICAgICBwdXREaXJlY3Qo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5
fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCi1zdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVj
dG9yLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9y
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewotICAgIEpTQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlD
b25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKLSAgICBSZWZQdHI8Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJy
YXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXksIHVuc2lnbmVkIGNoYXI+KGV4
ZWMsIGFyZ3MpLmdldCgpKTsKKyAgICBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rv
cioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNv
bnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOworICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqPihjb25zdHJ1
Y3Q8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSwgdW5zaWduZWQgY2hhcj4oZXhlYywgYXJncykuZ2V0
KCkpOwogICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2Jh
bE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOwogfQogCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK0pTQzo6Q29uc3RydWN0VHlwZSBKU1dlYkdMVW5z
aWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0cnVj
dERhdGEmIGNvbnN0cnVjdERhdGEpCiB7Ci0gICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVuY3Rp
b24gPSBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTsKKyAgICBjb25zdHJ1Y3REYXRh
Lm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdlYkdMVW5zaWduZWRCeXRlQXJyYXk7CiAgICAg
cmV0dXJuIENvbnN0cnVjdFR5cGVIb3N0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCShy
ZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5Q29uc3RydWN0b3IuaDo1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29u
c3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3Jf
aAorCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEpTQzo6
Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZpcnR1YWwgSlNDOjpD
b25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1Y3REYXRhJik7CisgICAg
ICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0
dXJuICZzX2luZm87IH0KKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBKU0NhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
NTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNv
bnN0cnVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDE3ICsyMywxNyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0
b3JfaAotI2RlZmluZSBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3JfaAorI2lm
bmRlZiBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yX2gKIAogI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgogI2luY2x1ZGUgIkpTRG9jdW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0g
ICAgY2xhc3MgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yIDogcHVibGljIERP
TUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBjbGFzcyBKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlD
b25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CiAgICAgcHVibGljOgot
ICAgICAgICBKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOworICAgICAgICBKU1dlYkdMVW5zaWduZWRCeXRlQXJy
YXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2luZm87CiAKICAgICBwcml2YXRlOgpA
QCAtNDMsNCArNDMsNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIH0KIAotI2VuZGlmIC8vIEpT
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3Rvcl9oCisjZW5kaWYgLy8gSlNXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
NTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eUN1c3RvbS5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNp
bmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisKKyNpbmNsdWRlICJDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheS5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3ZvaWQgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6aW5kZXhTZXR0ZXIo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHZh
bHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5KiBvYmplY3QpCit7CisgICAgcmV0dXJuIGdldERPTU9iamVjdFdyYXBwZXI8SlND
YW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRCeXRlQXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDIyICsyNywyMiBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRCeXRlQXJy
YXkuaCIKIAotI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAi
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oIgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6aW5kZXhT
ZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUg
dmFsdWUpCit2b2lkIEpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAg
ICAgaW1wbCgpLT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHZhbHVlLnRv
SW50MzIoZXhlYykpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5KiBvYmplY3QpCitKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSogb2Jq
ZWN0KQogewotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICByZXR1cm4gZ2V0RE9N
T2JqZWN0V3JhcHBlcjxKU1dlYkdMVW5zaWduZWRCeXRlQXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVj
dCwgb2JqZWN0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Nh
bnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJK
U0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworY29uc3QgQ2xh
c3NJbmZvIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJD
YW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IiLCAmSlNDYW52YXNBcnJheTo6c19pbmZv
LCAwLCAwIH07CisKK0pTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpKU0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9iamVjdChKU0NhbnZh
c1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcjo6Y3JlYXRlU3RydWN0dXJlKGdsb2JhbE9iamVj
dC0+b2JqZWN0UHJvdG90eXBlKCkpLCBnbG9iYWxPYmplY3QpCit7CisgICAgcHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheVBy
b3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKKyAgICBwdXREaXJlY3Qo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMiksIFJlYWRPbmx5
fERvbnREZWxldGV8RG9udEVudW0pOworfQorCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdENh
bnZhc1Vuc2lnbmVkSW50QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0
b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgSlNDYW52YXNVbnNpZ25lZEludEFycmF5
Q29uc3RydWN0b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvcio+KGNvbnN0cnVjdG9yKTsKKyAgICBSZWZQdHI8Q2FudmFzVW5z
aWduZWRJbnRBcnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZEludEFycmF5
Kj4oY29uc3RydWN0PENhbnZhc1Vuc2lnbmVkSW50QXJyYXksIHVuc2lnbmVkIGludD4oZXhlYywg
YXJncykuZ2V0KCkpOworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0
b3ItPmdsb2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOworfQorCitKU0M6OkNvbnN0cnVjdFR5
cGUgSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3I6OmdldENvbnN0cnVjdERhdGEo
SlNDOjpDb25zdHJ1Y3REYXRhJiBjb25zdHJ1Y3REYXRhKQoreworICAgIGNvbnN0cnVjdERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY29uc3RydWN0Q2FudmFzVW5zaWduZWRJbnRBcnJheTsKKyAgICBy
ZXR1cm4gQ29uc3RydWN0VHlwZUhvc3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5jcHAJKHJl
dmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRB
cnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzggKzI3LDM4IEBACiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0
cnVjdG9yLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkNhbnZhc1Vuc2ln
bmVkSW50QXJyYXkuaCIKLSNpbmNsdWRlICJKU0NhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVk
ZSAiSlNDYW52YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiCi0jaW5jbHVkZSAiSlNDYW52YXNV
bnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEludEFycmF5LmgiCisj
aW5jbHVkZSAiSlNXZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTEFycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRJbnRBcnJheS5oIgog
I2luY2x1ZGUgPHJ1bnRpbWUvRXJyb3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1jb25zdCBDbGFzc0luZm8gSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1
Y3RvciIsICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBK
U1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpzX2luZm8gPSB7ICJXZWJHTFVuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3RvciIsICZKU1dlYkdMQXJyYXk6OnNfaW5mbywgMCwgMCB9Owog
Ci1KU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcjo6SlNDYW52YXNVbnNpZ25lZElu
dEFycmF5Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQotICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNDYW52YXNVbnNpZ25lZElu
dEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZShnbG9iYWxPYmplY3QtPm9iamVjdFBy
b3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1
Y3Rvcjo6SlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMs
IEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBET01Db25zdHJ1Y3Rvck9i
amVjdChKU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUo
Z2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKLSAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNpZ25l
ZEludEFycmF5UHJvdG90eXBlOjpzZWxmKGV4ZWMsIGdsb2JhbE9iamVjdCksIE5vbmUpOworICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBKU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheVByb3RvdHlwZTo6c2VsZihleGVjLCBnbG9iYWxPYmplY3QpLCBOb25lKTsKICAg
ICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywg
MiksIFJlYWRPbmx5fERvbnREZWxldGV8RG9udEVudW0pOwogfQogCi1zdGF0aWMgSlNPYmplY3Qq
IGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVkSW50QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNv
bnN0cnVjdFdlYkdMVW5zaWduZWRJbnRBcnJheShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBj
b25zdHJ1Y3RvciwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKLSAgICBKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFz
VW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAgIFJlZlB0cjxD
YW52YXNVbnNpZ25lZEludEFycmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PENhbnZhc1Vuc2lnbmVk
SW50QXJyYXkqPihjb25zdHJ1Y3Q8Q2FudmFzVW5zaWduZWRJbnRBcnJheSwgdW5zaWduZWQgaW50
PihleGVjLCBhcmdzKS5nZXQoKSk7CisgICAgSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1
Y3RvcioganNDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTV2ViR0xVbnNpZ25lZEludEFycmF5
Q29uc3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRJbnRB
cnJheT4gYXJyYXkgPSBzdGF0aWNfY2FzdDxXZWJHTFVuc2lnbmVkSW50QXJyYXkqPihjb25zdHJ1
Y3Q8V2ViR0xVbnNpZ25lZEludEFycmF5LCB1bnNpZ25lZCBpbnQ+KGV4ZWMsIGFyZ3MpLmdldCgp
KTsKICAgICByZXR1cm4gYXNPYmplY3QodG9KUyhleGVjLCBqc0NvbnN0cnVjdG9yLT5nbG9iYWxP
YmplY3QoKSwgYXJyYXkuZ2V0KCkpKTsKIH0KIAotSlNDOjpDb25zdHJ1Y3RUeXBlIEpTQ2FudmFz
VW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3Ry
dWN0RGF0YSYgY29uc3RydWN0RGF0YSkKK0pTQzo6Q29uc3RydWN0VHlwZSBKU1dlYkdMVW5zaWdu
ZWRJbnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0
YSYgY29uc3RydWN0RGF0YSkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9
IGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVkSW50QXJyYXk7CisgICAgY29uc3RydWN0RGF0YS5uYXRp
dmUuZnVuY3Rpb24gPSBjb25zdHJ1Y3RXZWJHTFVuc2lnbmVkSW50QXJyYXk7CiAgICAgcmV0dXJu
IENvbnN0cnVjdFR5cGVIb3N0OwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IuaAkocmV2aXNpb24g
NTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5
Q29uc3RydWN0b3IuaDo1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEpTQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yX2gK
KyNkZWZpbmUgSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3JfaAorCisjaW5jbHVk
ZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICBjbGFzcyBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rv
ciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7CisgICAgcHVibGljOgorICAgICAgICBK
U0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9N
R2xvYmFsT2JqZWN0Kik7CisgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5mbyBzX2lu
Zm87CisKKyAgICBwcml2YXRlOgorICAgICAgICB2aXJ0dWFsIEpTQzo6Q29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29uc3RydWN0RGF0YSYpOworICAgICAgICB2aXJ0dWFsIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9
CisgICAgfTsKKworfQorCisjZW5kaWYgLy8gSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3Ry
dWN0b3JfaApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJh
eUNvbnN0cnVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdM
VW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmgJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDE3ICsyMywxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yX2gKKyNpZm5kZWYgSlNXZWJHTFVuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3Rvcl9oCisjZGVmaW5lIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29u
c3RydWN0b3JfaAogCiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEb2N1
bWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVjdCB7Cisg
ICAgY2xhc3MgSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01D
b25zdHJ1Y3Rvck9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICBKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7
CisgICAgICAgIEpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IoSlNDOjpFeGVjU3Rh
dGUqLCBKU0RPTUdsb2JhbE9iamVjdCopOwogICAgICAgICBzdGF0aWMgY29uc3QgSlNDOjpDbGFz
c0luZm8gc19pbmZvOwogCiAgICAgcHJpdmF0ZToKQEAgLTQzLDQgKzQzLDQgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB9CiAKLSNlbmRpZiAvLyBKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25z
dHJ1Y3Rvcl9oCisjZW5kaWYgLy8gSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rvcl9o
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZElu
dEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcDo1MDU3NSkKKysrIFdlYkNvcmUv
YmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiSlNDYW52YXNVbnNpZ25lZEludEFycmF5
LmgiCisKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXk6OmluZGV4U2V0dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRl
eCwgSlNDOjpKU1ZhbHVlIHZhbHVlKQoreworICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKK30KKworSlNDOjpKU1Zh
bHVlIHRvSlMoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gZ2V0
RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9i
amVjdCwgb2JqZWN0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2ln
bmVkSW50QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyMiArMjcsMjIgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAK
LSNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNsdWRlICJKU1dlYkdM
VW5zaWduZWRJbnRBcnJheS5oIgogCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRJbnRBcnJheS5o
IgorI2luY2x1ZGUgIldlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgSlNDYW52YXNVbnNpZ25lZEludEFy
cmF5OjppbmRleFNldHRlcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgSlNXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmluZGV4U2V0
dGVyKEpTQzo6RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNDOjpKU1ZhbHVlIHZh
bHVlKQogewogICAgIGltcGwoKS0+c2V0KGluZGV4LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KHZhbHVlLnRvSW50MzIoZXhlYykpKTsKIH0KIAotSlNDOjpKU1ZhbHVlIHRvSlMoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbnZhc1Vuc2ln
bmVkSW50QXJyYXkqIG9iamVjdCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBl
eGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTFVuc2lnbmVkSW50QXJy
YXkqIG9iamVjdCkKIHsKLSAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXk+KGV4ZWMsIGdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICByZXR1cm4g
Z2V0RE9NT2JqZWN0V3JhcHBlcjxKU1dlYkdMVW5zaWduZWRJbnRBcnJheT4oZXhlYywgZ2xvYmFs
T2JqZWN0LCBvYmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcDo1MDU3NSkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkpTQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiSlNDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oIgorI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSA8
cnVudGltZS9FcnJvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M7CisKK2NvbnN0IENsYXNzSW5mbyBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yOjpzX2luZm8gPSB7ICJDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvciIs
ICZKU0NhbnZhc0FycmF5OjpzX2luZm8sIDAsIDAgfTsKKworSlNDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXlDb25zdHJ1Y3Rvcjo6SlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvcihF
eGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgOiBE
T01Db25zdHJ1Y3Rvck9iamVjdChKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
OjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5cGUoKSksIGdsb2Jh
bE9iamVjdCkKK3sKKyAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlQcm90b3R5cGU6OnNlbGYoZXhlYywgZ2xvYmFs
T2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5n
dGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRlfERvbnRFbnVtKTsKK30K
Kworc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoRXhl
Y1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0IEFyZ0xpc3QmIGFyZ3Mp
Cit7CisgICAgSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvcioganNDb25zdHJ1
Y3RvciA9IHN0YXRpY19jYXN0PEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3Iq
Pihjb25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gYXJy
YXkgPSBzdGF0aWNfY2FzdDxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkqPihjb25zdHJ1Y3Q8Q2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LCB1bnNpZ25lZCBzaG9ydD4oZXhlYywgYXJncykuZ2V0KCkp
OworICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmdsb2JhbE9i
amVjdCgpLCBhcnJheS5nZXQoKSkpOworfQorCitKU0M6OkNvbnN0cnVjdFR5cGUgSlNDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6OkNvbnN0
cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCit7CisgICAgY29uc3RydWN0RGF0YS5uYXRpdmUuZnVu
Y3Rpb24gPSBjb25zdHJ1Y3RDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk7CisgICAgcmV0dXJuIENv
bnN0cnVjdFR5cGVIb3N0OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmNwcAkocmV2aXNp
b24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXlDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDM4ICsyNywzOCBAQAogCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29u
c3RydWN0b3IuaCIKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5LmgiCi0jaW5jbHVkZSAiSlNDYW52YXNBcnJheUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgotI2luY2x1ZGUgIkpTQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkuaCIKKyNpbmNsdWRlICJKU1dlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdM
QXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIkpTV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotY29uc3QgQ2xhc3NJbmZvIEpTQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I6OnNfaW5mbyA9IHsgIkNhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheUNvbnN0cnVjdG9yIiwgJkpTQ2FudmFzQXJyYXk6OnNfaW5mbywgMCwgMCB9OworY29u
c3QgQ2xhc3NJbmZvIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZv
ID0geyAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvciIsICZKU1dlYkdMQXJyYXk6
OnNfaW5mbywgMCwgMCB9OwogCi1KU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9y
OjpKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKEV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKLSAgICA6IERPTUNvbnN0cnVjdG9yT2Jq
ZWN0KEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVy
ZShnbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpKSwgZ2xvYmFsT2JqZWN0KQorSlNXZWJH
TFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yOjpKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5
Q29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQorICAgIDogRE9NQ29uc3RydWN0b3JPYmplY3QoSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yOjpjcmVhdGVTdHJ1Y3R1cmUoZ2xvYmFsT2JqZWN0LT5vYmplY3RQcm90b3R5
cGUoKSksIGdsb2JhbE9iamVjdCkKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLnByb3RvdHlwZSwgSlNDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlQcm90b3R5cGU6OnNlbGYo
ZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CisgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5wcm90b3R5cGUsIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlQcm90b3R5cGU6OnNl
bGYoZXhlYywgZ2xvYmFsT2JqZWN0KSwgTm9uZSk7CiAgICAgcHV0RGlyZWN0KGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25seXxEb250RGVsZXRl
fERvbnRFbnVtKTsKIH0KIAotc3RhdGljIEpTT2JqZWN0KiBjb25zdHJ1Y3RDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogY29uc3RydWN0b3IsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNPYmplY3QqIGNvbnN0cnVjdFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGNvbnN0cnVjdG9yLCBjb25zdCBB
cmdMaXN0JiBhcmdzKQogewotICAgIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0
b3IqIGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yKj4oY29uc3RydWN0b3IpOwotICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXk+IGFycmF5ID0gc3RhdGljX2Nhc3Q8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Kj4o
Y29uc3RydWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSwgdW5zaWduZWQgc2hvcnQ+KGV4ZWMs
IGFyZ3MpLmdldCgpKTsKKyAgICBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3Iq
IGpzQ29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29u
c3RydWN0b3IqPihjb25zdHJ1Y3Rvcik7CisgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5PiBhcnJheSA9IHN0YXRpY19jYXN0PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Kj4oY29uc3Ry
dWN0PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5LCB1bnNpZ25lZCBzaG9ydD4oZXhlYywgYXJncyku
Z2V0KCkpOwogICAgIHJldHVybiBhc09iamVjdCh0b0pTKGV4ZWMsIGpzQ29uc3RydWN0b3ItPmds
b2JhbE9iamVjdCgpLCBhcnJheS5nZXQoKSkpOwogfQogCi1KU0M6OkNvbnN0cnVjdFR5cGUgSlND
YW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcjo6Z2V0Q29uc3RydWN0RGF0YShKU0M6
OkNvbnN0cnVjdERhdGEmIGNvbnN0cnVjdERhdGEpCitKU0M6OkNvbnN0cnVjdFR5cGUgSlNXZWJH
TFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yOjpnZXRDb25zdHJ1Y3REYXRhKEpTQzo6Q29u
c3RydWN0RGF0YSYgY29uc3RydWN0RGF0YSkKIHsKLSAgICBjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbiA9IGNvbnN0cnVjdENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTsKKyAgICBjb25zdHJ1
Y3REYXRhLm5hdGl2ZS5mdW5jdGlvbiA9IGNvbnN0cnVjdFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
OwogICAgIHJldHVybiBDb25zdHJ1Y3RUeXBlSG9zdDsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1
Y3Rvci5oCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmg6NTA1NzUpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5Q29uc3RydWN0b3JfaAorI2RlZmluZSBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yX2gKKworI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpT
RG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgSlNDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rvck9iamVj
dCB7CisgICAgcHVibGljOgorICAgICAgICBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yKEpTQzo6RXhlY1N0YXRlKiwgSlNET01HbG9iYWxPYmplY3QqKTsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IEpTQzo6Q2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHByaXZhdGU6CisgICAgICAg
IHZpcnR1YWwgSlNDOjpDb25zdHJ1Y3RUeXBlIGdldENvbnN0cnVjdERhdGEoSlNDOjpDb25zdHJ1
Y3REYXRhJik7CisgICAgICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5m
bygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKyAgICB9OworCit9CisKKyNlbmRpZiAvLyBK
U0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yX2gKSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IuaAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxNyAr
MjMsMTcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSlNDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcl9oCi0jZGVmaW5lIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3JfaAorI2lmbmRlZiBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3JfaAorI2RlZmluZSBKU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3JfaAog
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBKU0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJh
eUNvbnN0cnVjdG9yIDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKKyAgICBjbGFzcyBK
U1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0
b3JPYmplY3QgewogICAgIHB1YmxpYzoKLSAgICAgICAgSlNDYW52YXNVbnNpZ25lZFNob3J0QXJy
YXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSosIEpTRE9NR2xvYmFsT2JqZWN0Kik7CisgICAg
ICAgIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvcihKU0M6OkV4ZWNTdGF0ZSos
IEpTRE9NR2xvYmFsT2JqZWN0Kik7CiAgICAgICAgIHN0YXRpYyBjb25zdCBKU0M6OkNsYXNzSW5m
byBzX2luZm87CiAKICAgICBwcml2YXRlOgpAQCAtNDMsNCArNDMsNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIH0KIAotI2VuZGlmIC8vIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3JfaAorI2VuZGlmIC8vIEpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcl9o
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0
b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcDo1MDU3NSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheS5oIgorCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBKU0Nh
bnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUqIGV4ZWMs
IHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCit7CisgICAgaW1wbCgpLT5zZXQo
aW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS50b0ludDMyKGV4ZWMpKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkqIG9iamVjdCkK
K3sKKyAgICByZXR1cm4gZ2V0RE9NT2JqZWN0V3JhcHBlcjxKU0NhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBvYmplY3QpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20uY3Bw
CShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIyICsyNywyMiBAQAog
CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkpTQ2FudmFzVW5zaWduZWRTaG9y
dEFycmF5LmgiCisjaW5jbHVkZSAiSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIgogCi0jaW5j
bHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi12b2lkIEpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjppbmRleFNldHRlcihKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW5kZXgsIEpTQzo6SlNWYWx1ZSB2YWx1ZSkKK3Zv
aWQgSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6aW5kZXhTZXR0ZXIoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU0M6OkpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaW1wbCgp
LT5zZXQoaW5kZXgsIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0Pih2YWx1ZS50b0ludDMyKGV4
ZWMpKSk7CiB9CiAKLUpTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkqIG9i
amVjdCkKK0pTQzo6SlNWYWx1ZSB0b0pTKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSogb2JqZWN0KQog
ewotICAgIHJldHVybiBnZXRET01PYmplY3RXcmFwcGVyPEpTQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5PihleGVjLCBnbG9iYWxPYmplY3QsIG9iamVjdCk7CisgICAgcmV0dXJuIGdldERPTU9iamVj
dFdyYXBwZXI8SlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4oZXhlYywgZ2xvYmFsT2JqZWN0LCBv
YmplY3QpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0JKHJldmlzaW9uIDUwNjM0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpA
QCAtMTY1NiwyNSArMTY1Niw3IEBAIHN1YiBJc1JlZlB0clR5cGUKIHsKICAgICBteSAkdHlwZSA9
IHNoaWZ0OwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJBdHRyIjsKLSAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiQ2FudmFzQWN0aXZlSW5mbyI7Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEg
IkNhbnZhc0FycmF5IjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzQXJyYXlCdWZm
ZXIiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNCb29sZWFuQXJyYXkiOwotICAg
IHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNCeXRlQXJyYXkiOwotICAgIHJldHVybiAxIGlm
ICR0eXBlIGVxICJDYW52YXNCdWZmZXIiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52
YXNGbG9hdEFycmF5IjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzRnJhbWVidWZm
ZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNHcmFkaWVudCI7Ci0gICAgcmV0
dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc0ludEFycmF5IjsKLSAgICByZXR1cm4gMSBpZiAkdHlw
ZSBlcSAiQ2FudmFzT2JqZWN0IjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzUHJv
Z3JhbSI7Ci0gICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1JlbmRlcmJ1ZmZlciI7Ci0g
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkNhbnZhc1NoYWRlciI7Ci0gICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIkNhbnZhc1Nob3J0QXJyYXkiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJD
YW52YXNUZXh0dXJlIjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXkiOwotICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJDYW52YXNVbnNpZ25lZEludEFy
cmF5IjsKLSAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiQ2xpZW50UmVjdCI7CiAgICAgcmV0dXJuIDEg
aWYgJHR5cGUgZXEgIkNsaWVudFJlY3RMaXN0IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAi
Q0RBVEFTZWN0aW9uIjsKQEAgLTE3MjIsNiArMTcwNCwyNCBAQCBzdWIgSXNSZWZQdHJUeXBlCiAg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlRleHRNZXRyaWNzIjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiVGltZVJhbmdlcyI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIlRyZWVXYWxr
ZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEFjdGl2ZUluZm8iOworICAgIHJl
dHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiV2ViR0xBcnJheUJ1ZmZlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMQm9v
bGVhbkFycmF5IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xCeXRlQXJyYXkiOwor
ICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEJ1ZmZlciI7CisgICAgcmV0dXJuIDEgaWYg
JHR5cGUgZXEgIldlYkdMRmxvYXRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldl
YkdMRnJhbWVidWZmZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJXZWJHTEludEFycmF5
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xPYmplY3QiOworICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJXZWJHTFByb2dyYW0iOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJX
ZWJHTFJlbmRlcmJ1ZmZlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMU2hhZGVy
IjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xTaG9ydEFycmF5IjsKKyAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiV2ViR0xUZXh0dXJlIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBl
cSAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldl
YkdMVW5zaWduZWRJbnRBcnJheSI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIldlYkdMVW5z
aWduZWRTaG9ydEFycmF5IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViS2l0Q1NTTWF0
cml4IjsKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiV2ViS2l0UG9pbnQiOwogICAgIHJldHVy
biAxIGlmICR0eXBlIGVxICJYUGF0aEV4cHJlc3Npb24iOwpAQCAtMTgwOCwxOSArMTgwOCw4IEBA
IHN1YiBHZXROYXRpdmVUeXBlCiBteSAldHlwZUNhbkZhaWxDb252ZXJzaW9uID0gKAogICAgICJB
dG9taWNTdHJpbmciID0+IDAsCiAgICAgIkF0dHIiID0+IDEsCi0gICAgIkNhbnZhc0FycmF5IiA9
PiAwLAotICAgICJDYW52YXNCdWZmZXIiID0+IDAsCi0gICAgIkNhbnZhc0J5dGVBcnJheSIgPT4g
MCwKLSAgICAiQ2FudmFzRmxvYXRBcnJheSIgPT4gMCwKLSAgICAiQ2FudmFzRnJhbWVidWZmZXIi
ID0+IDAsCiAgICAgIkNhbnZhc0dyYWRpZW50IiA9PiAwLAotICAgICJDYW52YXNJbnRBcnJheSIg
PT4gMCwKICAgICAiQ2FudmFzUGl4ZWxBcnJheSIgPT4gMCwKLSAgICAiQ2FudmFzUHJvZ3JhbSIg
PT4gMCwKLSAgICAiQ2FudmFzUmVuZGVyYnVmZmVyIiA9PiAwLAotICAgICJDYW52YXNTaGFkZXIi
ID0+IDAsCi0gICAgIkNhbnZhc1Nob3J0QXJyYXkiID0+IDAsCi0gICAgIkNhbnZhc1RleHR1cmUi
ID0+IDAsCiAgICAgIkNvbXBhcmVIb3ciID0+IDAsCiAgICAgIkRhdGFHcmlkQ29sdW1uIiA9PiAw
LAogICAgICJET01TdHJpbmciID0+IDAsCkBAIC0xODUzLDYgKzE4NDIsMTcgQEAgbXkgJXR5cGVD
YW5GYWlsQ29udmVyc2lvbiA9ICgKICAgICAiU1ZHUmVjdCIgPT4gMSwKICAgICAiU1ZHVHJhbnNm
b3JtIiA9PiAxLAogICAgICJWb2lkQ2FsbGJhY2siID0+IDEsCisgICAgIldlYkdMQXJyYXkiID0+
IDAsCisgICAgIldlYkdMQnVmZmVyIiA9PiAwLAorICAgICJXZWJHTEJ5dGVBcnJheSIgPT4gMCwK
KyAgICAiV2ViR0xGbG9hdEFycmF5IiA9PiAwLAorICAgICJXZWJHTEZyYW1lYnVmZmVyIiA9PiAw
LAorICAgICJXZWJHTEludEFycmF5IiA9PiAwLAorICAgICJXZWJHTFByb2dyYW0iID0+IDAsCisg
ICAgIldlYkdMUmVuZGVyYnVmZmVyIiA9PiAwLAorICAgICJXZWJHTFNoYWRlciIgPT4gMCwKKyAg
ICAiV2ViR0xTaG9ydEFycmF5IiA9PiAwLAorICAgICJXZWJHTFRleHR1cmUiID0+IDAsCiAgICAg
IldlYktpdENTU01hdHJpeCIgPT4gMCwKICAgICAiV2ViS2l0UG9pbnQiID0+IDAsCiAgICAgIlhQ
YXRoRXZhbHVhdG9yIiA9PiAwLApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9ET01PYmplY3Rz
SW5jbHVkZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvRE9NT2JqZWN0c0lu
Y2x1ZGUuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTU9iamVj
dHNJbmNsdWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDMzICszMCwxNCBAQAogCiAjaWZuZGVm
IERPTU9iamVjdHNJbmNsdWRlX2gKICNkZWZpbmUgRE9NT2JqZWN0c0luY2x1ZGVfaAotCiAjaW5j
bHVkZSAiQmFySW5mby5oIgogI2luY2x1ZGUgIkJlZm9yZUxvYWRFdmVudC5oIgotI2luY2x1ZGUg
IkNhbnZhc0FjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJDYW52YXNBcnJheS5oIgotI2luY2x1ZGUg
IkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgiCi0jaW5jbHVk
ZSAiQ2FudmFzQnl0ZUFycmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgotI2lu
Y2x1ZGUgIkNhbnZhc0ZyYW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIK
LSNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgotI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgog
I2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNQaXhlbEFycmF5Lmgi
Ci0jaW5jbHVkZSAiQ2FudmFzUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaCIKLSNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKLSNpbmNsdWRlICJDYW52YXNTaG9ydEFy
cmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJD
YW52YXNVbnNpZ25lZEludEFycmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmgiCiAjaW5jbHVkZSAiQ2FudmFzU3R5bGUuaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0dXJl
LmgiCiAjaW5jbHVkZSAiQ2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIkNsaWVudFJlY3QuaCIK
ICNpbmNsdWRlICJDbGllbnRSZWN0TGlzdC5oIgpAQCAtMTQ5LDYgKzEzMCwyNCBAQAogI2luY2x1
ZGUgIlY4TGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJWOE5vZGVGaWx0ZXJDb25kaXRp
b24uaCIKICNpbmNsdWRlICJWYWxpZGl0eVN0YXRlLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZm
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQnl0ZUFycmF5
LmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVm
ZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
R0xTaGFkZXIuaCIKKyNpbmNsdWRlICJXZWJHTFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEludEFycmF5Lmgi
CisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFRl
eHR1cmUuaCIKICNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldl
YktpdENTU0tleWZyYW1lUnVsZS5oIgogI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUu
aCIKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9EZXJpdmVkU291cmNlc0FsbEluT25l
LmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L0Rlcml2ZWRTb3Vy
Y2VzQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwzMiArMzAsMTQgQEAKIAogLy8g
VGhpcyBzb3VyY2UgZmlsZSBjb2FsZXNjZXMgdGhlIFY4IGRlcml2ZWQgc291cmNlcyBpbnRvIGEg
c2luZ2xlIG9iamVjdCBmaWxlIHRvCiAvLyByZWR1Y2UgYmxvYXQgYW5kIGFsbG93IHVzIHRvIGxp
bmsgcmVsZWFzZSBidWlsZHMgb24gMzItYml0IFdpbmRvd3MuCi0KICNpbmNsdWRlICJiaW5kaW5n
cy9WOEF0dHIuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4QmFySW5mby5jcHAiCiAjaW5jbHVk
ZSAiYmluZGluZ3MvVjhCZWZvcmVMb2FkRXZlbnQuY3BwIgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q2FudmFzQWN0aXZlSW5mby5jcHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNBcnJheS5j
cHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNBcnJheUJ1ZmZlci5jcHAiCi0jaW5jbHVk
ZSAiYmluZGluZ3MvVjhDYW52YXNCdWZmZXIuY3BwIgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2Fu
dmFzQnl0ZUFycmF5LmNwcCIKLSNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc0Zsb2F0QXJyYXku
Y3BwIgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzRnJhbWVidWZmZXIuY3BwIgogI2luY2x1
ZGUgImJpbmRpbmdzL1Y4Q2FudmFzR3JhZGllbnQuY3BwIgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4
Q2FudmFzSW50QXJyYXkuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUGF0dGVybi5j
cHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNQaXhlbEFycmF5LmNwcCIKLSNpbmNsdWRl
ICJiaW5kaW5ncy9WOENhbnZhc1Byb2dyYW0uY3BwIgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2Fu
dmFzUmVuZGVyYnVmZmVyLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuY3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCIKLSNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5j
cHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52YXNTaGFkZXIuY3BwIgotI2luY2x1ZGUgImJp
bmRpbmdzL1Y4Q2FudmFzU2hvcnRBcnJheS5jcHAiCi0jaW5jbHVkZSAiYmluZGluZ3MvVjhDYW52
YXNUZXh0dXJlLmNwcCIKLSNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LmNwcCIKLSNpbmNsdWRlICJiaW5kaW5ncy9WOENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuY3Bw
IgotI2luY2x1ZGUgImJpbmRpbmdzL1Y4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmNwcCIKICNp
bmNsdWRlICJiaW5kaW5ncy9WOENEQVRBU2VjdGlvbi5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3Mv
VjhDaGFyYWN0ZXJEYXRhLmNwcCIKICNpbmNsdWRlICJiaW5kaW5ncy9WOENsaWVudFJlY3QuY3Bw
IgpAQCAtMjA5LDYgKzE5MSwyMyBAQAogI2luY2x1ZGUgImJpbmRpbmdzL1Y4VHJlZVdhbGtlci5j
cHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhVSUV2ZW50LmNwcCIKICNpbmNsdWRlICJiaW5kaW5n
cy9WOFZhbGlkaXR5U3RhdGUuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xBY3RpdmVJ
bmZvLmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMQXJyYXkuY3BwIgorI2luY2x1ZGUg
ImJpbmRpbmdzL1Y4V2ViR0xBcnJheUJ1ZmZlci5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhX
ZWJHTEJ1ZmZlci5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTEJ5dGVBcnJheS5jcHAi
CisjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTEZsb2F0QXJyYXkuY3BwIgorI2luY2x1ZGUgImJp
bmRpbmdzL1Y4V2ViR0xGcmFtZWJ1ZmZlci5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJH
TEludEFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMUHJvZ3JhbS5jcHAiCisj
aW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFJlbmRlcmJ1ZmZlci5jcHAiCisjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4
V2ViR0xTaGFkZXIuY3BwIgorI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViR0xTaG9ydEFycmF5LmNw
cCIKKyNpbmNsdWRlICJiaW5kaW5ncy9WOFdlYkdMVGV4dHVyZS5jcHAiCisjaW5jbHVkZSAiYmlu
ZGluZ3MvVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcCIKKyNpbmNsdWRlICJiaW5kaW5ncy9W
OFdlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAiCisjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheS5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJLaXRBbmltYXRp
b25FdmVudC5jcHAiCiAjaW5jbHVkZSAiYmluZGluZ3MvVjhXZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
Y3BwIgogI2luY2x1ZGUgImJpbmRpbmdzL1Y4V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAiCklu
ZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV3JhcHBlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlY4RE9NV3JhcHBl
ci5oIgogCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
RE9NT2JqZWN0c0luY2x1ZGUuaCIKQEAgLTUxLDYgKzUwLDcgQEAKICNpbmNsdWRlICJWOEluZGV4
LmgiCiAjaW5jbHVkZSAiVjhJc29sYXRlZFdvcmxkLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgor
I2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTE1OSwyNSArMTU5LDI1IEBAIHZv
aWQgVjhET01XcmFwcGVyOjpzZXRJbmRleGVkUHJvcGVydGllc1QKICAgICB2ODo6RXh0ZXJuYWxB
cnJheVR5cGUgYXJyYXlfdHlwZSA9IHY4OjprRXh0ZXJuYWxCeXRlQXJyYXk7CiAgICAgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIGNsYXNzSW5kZXggPSBWOENsYXNzSW5kZXg6OkZyb21JbnQo
aW5kZXgpOwogICAgIHN3aXRjaCAoY2xhc3NJbmRleCkgewotICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpDQU5WQVNCWVRFQVJSQVk6CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZ
OgogICAgICAgICBhcnJheV90eXBlID0gdjg6OmtFeHRlcm5hbEJ5dGVBcnJheTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZOgor
ICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZOgogICAgICAgICBh
cnJheV90eXBlID0gdjg6OmtFeHRlcm5hbFVuc2lnbmVkQnl0ZUFycmF5OwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWToKKyAgICBjYXNlIFY4
Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOgogICAgICAgICBhcnJheV90eXBlID0gdjg6OmtF
eHRlcm5hbFNob3J0QXJyYXk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhDbGFzc0luZGV4
OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVk6CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdM
VU5TSUdORURTSE9SVEFSUkFZOgogICAgICAgICBhcnJheV90eXBlID0gdjg6OmtFeHRlcm5hbFVu
c2lnbmVkU2hvcnRBcnJheTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6
OkNBTlZBU0lOVEFSUkFZOgorICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTElOVEFSUkFZOgog
ICAgICAgICBhcnJheV90eXBlID0gdjg6OmtFeHRlcm5hbEludEFycmF5OwogICAgICAgICBicmVh
azsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURJTlRBUlJBWToKKyAgICBj
YXNlIFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZOgogICAgICAgICBhcnJheV90
eXBlID0gdjg6OmtFeHRlcm5hbFVuc2lnbmVkSW50QXJyYXk7CiAgICAgICAgIGJyZWFrOwotICAg
IGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZOgorICAgIGNhc2UgVjhDbGFzc0lu
ZGV4OjpXRUJHTEZMT0FUQVJSQVk6CiAgICAgICAgIGFycmF5X3R5cGUgPSB2ODo6a0V4dGVybmFs
RmxvYXRBcnJheTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKQEAgLTUyMSwyOSArNTIx
LDI5IEBAIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOEQKIAogI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCiAgICAgLy8gVGhlIGZvbGxvd2luZyBvYmplY3RzIGFyZSBjcmVhdGVk
IGZyb20gSmF2YVNjcmlwdC4KLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZG
RVI6Ci0gICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKSk7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdM
QVJSQVlCVUZGRVI6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxM
QkFDSyhXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWToKLSAgICAgICAgZGVzY3JpcHRvci0+
U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENhbnZhc0J5dGVBcnJheUNvbnN0cnVjdG9yKSk7
CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZOgorICAgICAgICBkZXNjcmlw
dG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3Rv
cikpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTRkxPQVRB
UlJBWToKLSAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKENh
bnZhc0Zsb2F0QXJyYXlDb25zdHJ1Y3RvcikpOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJH
TEZMT0FUQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxM
QkFDSyhXZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3RvcikpOwogICAgICAgICBicmVhazsKLSAgICBj
YXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVk6Ci0gICAgICAgIGRlc2NyaXB0b3ItPlNl
dENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKSk7Cisg
ICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVk6CisgICAgICAgIGRlc2NyaXB0b3It
PlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhXZWJHTEludEFycmF5Q29uc3RydWN0b3IpKTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVk6
Ci0gICAgICAgIGRlc2NyaXB0b3ItPlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNT
aG9ydEFycmF5Q29uc3RydWN0b3IpKTsKKyAgICBjYXNlIFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9S
VEFSUkFZOgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0so
V2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBW
OENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZOgotICAgICAgICBkZXNjcmlwdG9y
LT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25z
dHJ1Y3RvcikpOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZ
OgorICAgICAgICBkZXNjcmlwdG9yLT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRElOVEFSUkFZOgotICAgICAgICBkZXNjcmlwdG9y
LT5TZXRDYWxsSGFuZGxlcihVU0VfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0
cnVjdG9yKSk7CisgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWToK
KyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFdlYkdMVW5z
aWduZWRJbnRBcnJheUNvbnN0cnVjdG9yKSk7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgVjhD
bGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVk6Ci0gICAgICAgIGRlc2NyaXB0b3It
PlNldENhbGxIYW5kbGVyKFVTRV9DQUxMQkFDSyhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25z
dHJ1Y3RvcikpOworICAgIGNhc2UgVjhDbGFzc0luZGV4OjpXRUJHTFVOU0lHTkVEU0hPUlRBUlJB
WToKKyAgICAgICAgZGVzY3JpcHRvci0+U2V0Q2FsbEhhbmRsZXIoVVNFX0NBTExCQUNLKFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYK
ICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NUEFSU0VSOgpAQCAtNzQ0LDE2ICs3NDQsMTYgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udgogICAgICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgICAgIC8vIFNldCB1cCBDYW52YXNBcnJh
eSBzdWJjbGFzc2VzJyBhY2Nlc3NlcyBzaW1pbGFybHkuCisgICAgICAgICAgICAvLyBTZXQgdXAg
V2ViR0xBcnJheSBzdWJjbGFzc2VzJyBhY2Nlc3NlcyBzaW1pbGFybHkuCiAgICAgICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNCWVRF
QVJSQVk6Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRF
QVJSQVk6Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWToK
LSAgICAgICAgICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVk6
Ci0gICAgICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVk6Ci0gICAgICAg
ICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURJTlRBUlJBWToKLSAgICAgICAg
ICAgIGNhc2UgVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZOiB7Ci0gICAgICAgICAgICAg
ICAgQ2FudmFzQXJyYXkqIGFycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxDYW52YXNBcnJheSo+KGlt
cGwpOworICAgICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMQllURUFSUkFZOgorICAg
ICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVk6CisgICAg
ICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZOgorICAgICAgICAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZOgorICAgICAgICAgICAg
Y2FzZSBWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVk6CisgICAgICAgICAgICBjYXNlIFY4Q2xh
c3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZOgorICAgICAgICAgICAgY2FzZSBWOENsYXNz
SW5kZXg6OldFQkdMRkxPQVRBUlJBWTogeworICAgICAgICAgICAgICAgIFdlYkdMQXJyYXkqIGFy
cmF5ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTEFycmF5Kj4oaW1wbCk7CiAgICAgICAgICAgICAg
ICAgc2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVybmFsQXJyYXkocmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY4Q2xhc3NJbmRleDo6
VG9JbnQodHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXJyYXktPmJhc2VBZGRyZXNzKCksCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SW5kZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvVjhJbmRleC5j
cHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9WOEluZGV4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlY4QXR0ci5oIgogI2lu
Y2x1ZGUgIlY4QmFySW5mby5oIgogI2luY2x1ZGUgIlY4QmVmb3JlTG9hZEV2ZW50LmgiCi0jaW5j
bHVkZSAiVjhDYW52YXNBY3RpdmVJbmZvLmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0LmgiCiAjaW5jbHVkZSAiVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKICNpbmNs
dWRlICJWOENhbnZhc0dyYWRpZW50LmgiCkBAIC0zOTMsMjIgKzM5MiwyMyBAQAogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotI2luY2x1ZGUgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELmgiCi0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIlY4Q2Fu
dmFzQXJyYXkuaCIKLSNpbmNsdWRlICJWOENhbnZhc0J5dGVBcnJheS5oIgotI2luY2x1ZGUgIlY4
Q2FudmFzQnVmZmVyLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNGbG9hdEFycmF5LmgiCi0jaW5jbHVk
ZSAiVjhDYW52YXNGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIlY4Q2FudmFzSW50QXJyYXkuaCIK
LSNpbmNsdWRlICJWOENhbnZhc1Byb2dyYW0uaCIKLSNpbmNsdWRlICJWOENhbnZhc1JlbmRlcmJ1
ZmZlci5oIgotI2luY2x1ZGUgIlY4Q2FudmFzU2hhZGVyLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNT
aG9ydEFycmF5LmgiCi0jaW5jbHVkZSAiVjhDYW52YXNUZXh0dXJlLmgiCi0jaW5jbHVkZSAiVjhD
YW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgotI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRJbnRB
cnJheS5oIgotI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVk
ZSAiVjhXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJWOFdlYkdMQWN0aXZlSW5m
by5oIgorI2luY2x1ZGUgIlY4V2ViR0xBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4V2ViR0xB
cnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJWOFdlYkdM
QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhXZWJHTEZsb2F0QXJyYXkuaCIKKyNpbmNsdWRlICJWOFdl
YkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKKyNpbmNsdWRl
ICJWOFdlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIlY4V2ViR0xSZW5kZXJidWZmZXIuaCIKKyNp
bmNsdWRlICJWOFdlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiVjhXZWJHTFNob3J0QXJyYXkuaCIK
KyNpbmNsdWRlICJWOFdlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZEJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVk
ZSAiVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4SW5kZXguaAkod29ya2luZyBjb3B5KQpAQCAtNDQ1LDIzICs0NDUs
MjMgQEAgdHlwZWRlZiB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbAogCiAjaWYgRU5B
QkxFKDNEX0NBTlZBUykKICNkZWZpbmUgRE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMoVikgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU0FDVElWRUlORk8s
IENhbnZhc0FjdGl2ZUluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBW
KENBTlZBU0FSUkFZLCBDYW52YXNBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBWKENBTlZBU0FSUkFZQlVGRkVSLCBDYW52YXNBcnJheUJ1ZmZlcikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU0JVRkZFUiwgQ2FudmFz
QnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENB
TlZBU0JZVEVBUlJBWSwgQ2FudmFzQnl0ZUFycmF5KSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBWKENBTlZBU0ZMT0FUQVJSQVksIENhbnZhc0Zsb2F0QXJyYXkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU0ZSQU1FQlVGRkVSLCBDYW52
YXNGcmFtZWJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZB
U0lOVEFSUkFZLCBDYW52YXNJbnRBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICBWKENBTlZBU1BST0dSQU0sIENhbnZhc1Byb2dyYW0pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1JFTkRFUkJVRkZFUiwgQ2FudmFz
UmVuZGVyYnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1JF
TkRFUklOR0NPTlRFWFQzRCwgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKSAgICAgICAgICAgICAg
IFwKLSAgICBWKENBTlZBU1NIQURFUiwgQ2FudmFzU2hhZGVyKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1NIT1JUQVJSQVksIENhbnZhc1Nob3J0
QXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1RFWFRV
UkUsIENhbnZhc1RleHR1cmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBWKENBTlZBU1VOU0lHTkVEQllURUFSUkFZLCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkg
ICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1VOU0lHTkVESU5UQVJSQVksIENhbnZhc1Vu
c2lnbmVkSW50QXJyYXkpICAgICAgICAgICAgICAgICAgIFwKLSAgICBWKENBTlZBU1VOU0lHTkVE
U0hPUlRBUlJBWSwgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KQorICAgIFYoV0VCR0xBQ1RJVkVJ
TkZPLCBXZWJHTEFjdGl2ZUluZm8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIFYoV0VCR0xBUlJBWSwgV2ViR0xBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xBUlJBWUJVRkZFUiwgV2ViR0xBcnJheUJ1ZmZl
cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xCVUZGRVIsIFdl
YkdMQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IFYoV0VCR0xCWVRFQVJSQVksIFdlYkdMQnl0ZUFycmF5KSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIFYoV0VCR0xGTE9BVEFSUkFZLCBXZWJHTEZsb2F0QXJyYXkpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xGUkFNRUJVRkZFUiwg
V2ViR0xGcmFtZWJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYo
V0VCR0xJTlRBUlJBWSwgV2ViR0xJbnRBcnJheSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIFYoV0VCR0xQUk9HUkFNLCBXZWJHTFByb2dyYW0pICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xSRU5ERVJCVUZGRVIsIFdl
YkdMUmVuZGVyYnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VC
R0xSRU5ERVJJTkdDT05URVhULCBXZWJHTFJlbmRlcmluZ0NvbnRleHQpICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIFYoV0VCR0xTSEFERVIsIFdlYkdMU2hhZGVyKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xTSE9SVEFSUkFZLCBXZWJHTFNo
b3J0QXJyYXkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xU
RVhUVVJFLCBXZWJHTFRleHR1cmUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIFYoV0VCR0xVTlNJR05FREJZVEVBUlJBWSwgV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eSkgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xVTlNJR05FRElOVEFSUkFZLCBXZWJH
TFVuc2lnbmVkSW50QXJyYXkpICAgICAgICAgICAgICAgICAgICAgXAorICAgIFYoV0VCR0xVTlNJ
R05FRFNIT1JUQVJSQVksIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KQogI2Vsc2UKICNkZWZpbmUg
RE9NX09CSkVDVF8zRF9DQU5WQVNfVFlQRVMoVikKICNlbmRpZgpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhDYW52YXNBcnJheUJ1ZmZlckN1c3RvbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNBcnJheUJ1ZmZlckN1c3RvbS5j
cHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzEgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJD
YW52YXNBcnJheUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAi
VjhDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvcikKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5DYW52YXNBcnJheUJ1ZmZlci5Db250cnVjdG9yIik7Ci0KLSAgICBpZiAoIWFyZ3MuSXNDb25z
dHJ1Y3RDYWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0
cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKLQotICAgIGludCBhcmdM
ZW4gPSBhcmdzLkxlbmd0aCgpOwotICAgIC8vIFN1cHBvcnRlZCBjb25zdHJ1Y3RvcnM6Ci0gICAg
Ly8gQ2FudmFzQXJyYXlCdWZmZXIobikgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgotICAgIC8vICAg
LS0gY3JlYXRlIGFuIGVtcHR5IGJ1ZmZlciBvZiBuIGJ5dGVzCi0KLSAgICBpZiAoYXJnTGVuICE9
IDEpCi0gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRz
IHNwZWNpZmllZCB0byBjb25zdHJ1Y3RvciAocmVxdWlyZXMgMSkiKTsKLQotICAgIGludCBsZW4g
PSAwOwotICAgIGlmICghYXJnc1swXS0+SXNJbnQzMigpKQotICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiQXJndW1lbnQgdG8gQ2FudmFzQXJyYXlCdWZmZXIgY29uc3RydWN0b3Igd2FzIG5vdCBh
biBpbnRlZ2VyIik7Ci0gICAgbGVuID0gdG9JbnQzMihhcmdzWzBdKTsKLSAgICBSZWZQdHI8Q2Fu
dmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuKTsK
LSAgICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRo
ZSBhcnJheS4KLSAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZQlVGRkVSKSwgYnVm
ZmVyLmdldCgpKTsKLSAgICByZXR1cm4gdG9WOChidWZmZXIucmVsZWFzZSgpLCBhcmdzLkhvbGRl
cigpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNE
X0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQXJyYXlD
dXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZh
c0FycmF5Q3VzdG9tLmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNBcnJheUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1
ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNs
dWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgi
Ci0jaW5jbHVkZSAiVjhQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICAvLyBU
ZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBDYW52YXNBcnJheSpDb25zdHJ1Y3RvciBjYWxs
YmFja3MuCi0gICAgdGVtcGxhdGU8Y2xhc3MgQXJyYXlDbGFzcz4KLSAgICB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gY29uc3RydWN0Q2FudmFzQXJyYXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsYXNz
SW5kZXgpCi0gICAgewotICAgICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3Qg
YmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7Ci0KLSAgICAgICAgaW50IGFyZ0xlbiA9IGFyZ3Mu
TGVuZ3RoKCk7Ci0gICAgICAgIC8vIFN1cHBvcnRlZCBjb25zdHJ1Y3RvcnM6Ci0gICAgICAgIC8v
IENhbnZhczxUPkFycmF5KG4pIHdoZXJlIG4gaXMgYW4gaW50ZWdlcjoKLSAgICAgICAgLy8gICAt
LSBjcmVhdGUgYW4gZW1wdHkgYXJyYXkgb2YgbiBlbGVtZW50cwotICAgICAgICAvLyBDYW52YXM8
VD5BcnJheShhcnIpIHdoZXJlIGFyciBpcyBhbiBhcnJheToKLSAgICAgICAgLy8gICAtLSBjcmVh
dGUgYSBDYW52YXM8VD5BcnJheSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiAiYXJyIgotICAg
ICAgICAvLyBDYW52YXM8VD5BcnJheShidWYsIG9mZnNldCwgbGVuZ3RoKQotICAgICAgICAvLyAg
IC0tIGNyZWF0ZSBhIENhbnZhczxUPkFycmF5IHBvaW50aW5nIHRvIHRoZSBDYW52YXNBcnJheUJ1
ZmZlcgotICAgICAgICAvLyAgICAgICJidWYiLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVkIG9m
ZnNldCwgZm9yIHRoZSBnaXZlbgotICAgICAgICAvLyAgICAgIGxlbmd0aAotCi0gICAgICAgIGlm
IChhcmdMZW4gPT0gMCkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJObyBhcmd1bWVu
dHMgc3BlY2lmaWVkIHRvIGNvbnN0cnVjdG9yIik7Ci0KLSAgICAgICAgLy8gU2VlIHdoZXRoZXIg
dGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgQ2FudmFzQXJyYXlCdWZmZXIuCi0gICAgICAgIGlmIChW
OENhbnZhc0FycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgewotICAgICAgICAgICAg
aWYgKGFyZ0xlbiA+IDMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldyb25n
IG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVm
ZmVyLCBpbnQsIGludCkiKTsKLQotICAgICAgICAgICAgQ2FudmFzQXJyYXlCdWZmZXIqIGJ1ZiA9
Ci0gICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2Fu
dmFzQXJyYXlCdWZmZXI+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZGRVIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFyZ3NbMF0tPlRvT2JqZWN0KCkpOwotICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxM
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCBh
cmd1bWVudCAwIHRvIGEgQ2FudmFzQXJyYXlCdWZmZXIiKTsKLSAgICAgICAgICAgIGJvb2wgb2s7
Ci0gICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKLSAgICAgICAgICAgIGlmIChhcmdMZW4gPiAx
KSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ID0gdG9JbnQzMihhcmdzWzFdLCBvayk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvaykKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDEgdG8gYW4gaW50ZWdlciIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaW50IGxlbmd0aCA9IGJ1Zi0+Ynl0ZUxlbmd0aCgpIC0gb2Zm
c2V0OwotICAgICAgICAgICAgaWYgKGFyZ0xlbiA+IDIpIHsKLSAgICAgICAgICAgICAgICBsZW5n
dGggPSB0b0ludDMyKGFyZ3NbMl0sIG9rKTsKLSAgICAgICAgICAgICAgICBpZiAoIW9rKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgYXJn
dW1lbnQgMiB0byBhbiBpbnRlZ2VyIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bGVuZ3RoIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTGVuZ3RoIC8g
b2Zmc2V0IG91dCBvZiByYW5nZSIpOwotCi0gICAgICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4g
YXJyYXkgPSBBcnJheUNsYXNzOjpjcmVhdGUoYnVmLCBvZmZzZXQsIGxlbmd0aCk7Ci0gICAgICAg
ICAgICBpZiAoYXJyYXkgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cigiSW52YWxpZCBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVm
ZmVyLCBpbnQsIGludCkiKTsKLSAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGlu
dG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgotICAgICAgICAgICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5LmdldCgp
KTsKLSAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4dGVy
bmFsQXJyYXkoYXJncy5Ib2xkZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbmRleCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkuZ2V0
KCktPmJhc2VBZGRyZXNzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LmdldCgpLT5sZW5ndGgoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaW50IGxlbiA9IDA7Ci0gICAgICAgIHY4OjpIYW5kbGU8djg6OkFycmF5
PiBzcmNBcnJheTsKLSAgICAgICAgaWYgKGFyZ0xlbiAhPSAxKQotICAgICAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFy
cmF5KGludCAvIGFycmF5KSIpOwotCi0gICAgICAgIGlmIChhcmdzWzBdLT5Jc0ludDMyKCkpIHsK
LSAgICAgICAgICAgIGxlbiA9IHRvSW50MzIoYXJnc1swXSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
YXJnc1swXS0+SXNBcnJheSgpKSB7Ci0gICAgICAgICAgICBzcmNBcnJheSA9IHY4OjpMb2NhbDx2
ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMF0pOwotICAgICAgICAgICAgaWYgKHNyY0FycmF5LklzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZl
cnQgYXJndW1lbnQgMCB0byBhbiBhcnJheSIpOwotICAgICAgICAgICAgbGVuID0gc3JjQXJyYXkt
Pkxlbmd0aCgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBhbiBh
cnJheSIpOwotCi0gICAgICAgIFJlZlB0cjxBcnJheUNsYXNzPiBhcnJheSA9IEFycmF5Q2xhc3M6
OmNyZWF0ZShsZW4pOwotICAgICAgICBpZiAoIXNyY0FycmF5LklzRW1wdHkoKSkgewotICAgICAg
ICAgICAgLy8gTmVlZCB0byBjb3B5IHRoZSBpbmNvbWluZyBhcnJheSBpbnRvIHRoZSBuZXdseSBj
cmVhdGVkIENhbnZhc0FycmF5LgotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47
IGkrKykgewotICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IHNyY0Fy
cmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWwt
PklzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbMjU2XTsKLSAgICAg
ICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJDb3VsZCBub3QgY29udmVydCBhcnJheSBlbGVt
ZW50ICVkIHRvIGEgbnVtYmVyIiwgaSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGJ1Zik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFycmF5LT5z
ZXQoaSwgdmFsLT5OdW1iZXJWYWx1ZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3Ig
dGhlIGFycmF5LgotICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xk
ZXIoKSwgY2xhc3NJbmRleCwgYXJyYXkuZ2V0KCkpOwotICAgICAgICBWOERPTVdyYXBwZXI6OnNl
dEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFyZ3MuSG9sZGVyKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJ
bmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcnJheS5nZXQoKS0+YmFzZUFkZHJlc3MoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5nZXQoKS0+bGVuZ3Ro
KCkpOwotICAgICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkp
OwotICAgIH0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0J5dGVBcnJheUN1c3Rv
bS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
YW52YXNCeXRlQXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAi
Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNCeXRlQXJyYXkuaCIKLQotI2lu
Y2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNp
bmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5n
LmgiCi0jaW5jbHVkZSAiVjhQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNBTExC
QUNLX0ZVTkNfREVDTChDYW52YXNCeXRlQXJyYXlDb25zdHJ1Y3RvcikKLXsKLSAgICBJTkNfU1RB
VFMoIkRPTS5DYW52YXNCeXRlQXJyYXkuQ29udHJ1Y3RvciIpOwotCi0gICAgcmV0dXJuIGNvbnN0
cnVjdENhbnZhc0FycmF5PENhbnZhc0J5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0lu
dChWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWSkpOwotfQotCi0vLyBHZXQgdGhlIHNwZWNp
ZmllZCB2YWx1ZSBmcm9tIHRoZSBieXRlIGJ1ZmZlciBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMg
YSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIGJ5dGUgYnVmZmVyIHJhbmdlIHJldHVybiAidW5kZWZpbmVkIi4KLUlOREVYRURfUFJPUEVS
VFlfR0VUVEVSKENhbnZhc0J5dGVBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNC
eXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgQ2FudmFzQnl0ZUFycmF5KiBi
eXRlQnVmZmVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQnl0
ZUFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0K
LSAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGJ5dGVCdWZmZXItPmxlbmd0aCgpKSkK
LSAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBzaWduZWQgY2hhciByZXN1bHQ7
Ci0gICAgaWYgKCFieXRlQnVmZmVyLT5nZXQoaW5kZXgsIHJlc3VsdCkpCi0gICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOwot
fQotCi0vLyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYnl0ZSBidWZmZXIuIEFjY2Vz
c2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJhbmdlIGFyZSBzaWxlbnRseSBpZ25v
cmVkLgotSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzQnl0ZUFycmF5KQotewotICAgIElO
Q19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAg
ICBDYW52YXNCeXRlQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8Q2FudmFzQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0JZVEVBUlJBWSwgaW5m
by5Ib2xkZXIoKSk7Ci0KLSAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5s
ZW5ndGgoKSkpIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBh
IG51bWJlciIpOwotICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUo
KSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNGbG9hdEFycmF5Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0Zsb2F0
QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5LmgiCi0KLSNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAi
VjhDYW52YXNBcnJheUN1c3RvbS5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzRmxvYXRBcnJheUNvbnN0cnVjdG9yKQotewotICAgIElOQ19TVEFUUygiRE9N
LkNhbnZhc0Zsb2F0QXJyYXkuQ29udHJ1Y3RvciIpOwotCi0gICAgcmV0dXJuIGNvbnN0cnVjdENh
bnZhc0FycmF5PENhbnZhc0Zsb2F0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhD
bGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZKSk7Ci19Ci0KLS8vIEdldCB0aGUgc3BlY2lmaWVk
IHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3Jp
cHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkg
cmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFz
RmxvYXRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5LkluZGV4
ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0lu
ZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXgg
PCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKLSAgICBmbG9hdCByZXN1bHQ7Ci0gICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4
LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVybiB2
ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUg
aW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUg
c2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0Zsb2F0QXJy
YXkpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzRmxvYXRBcnJheS5JbmRleGVkUHJvcGVy
dHlTZXR0ZXIiKTsKLSAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FO
VkFTRkxPQVRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBpZiAoKGluZGV4ID49IDApICYm
IChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpCi0gICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZh
bHVlLT5OdW1iZXJWYWx1ZSgpKTsKLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0ludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0ludEFycmF5Q3VzdG9tLmNw
cAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZh
c0ludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkNhbnZh
c0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKLQotI2luY2x1ZGUg
IlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRl
ICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0j
aW5jbHVkZSAiVjhQcm94eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yKQotewotICAgIElOQ19TVEFUUygiRE9N
LkNhbnZhc0ludEFycmF5LkNvbnRydWN0b3IiKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52
YXNBcnJheTxDYW52YXNJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNz
SW5kZXg6OkNBTlZBU0lOVEFSUkFZKSk7Ci19Ci0KLS8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVl
IGZyb20gdGhlIGludGVnZXIgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNj
cmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBwaXhl
bCBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRU
RVIoQ2FudmFzSW50QXJyYXkpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzSW50QXJyYXku
SW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgQ2FudmFzSW50QXJyYXkqIGFycmF5ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTSU5UQVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA8
IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQotICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwotICAgIGludCByZXN1bHQ7Ci0gICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCBy
ZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVybiB2ODo6
TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4g
dGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGludGVnZXIgYXJy
YXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihD
YW52YXNJbnRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNJbnRBcnJheS5JbmRl
eGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBDYW52YXNJbnRBcnJheSogYXJyYXkgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNJbnRBcnJheT4oVjhDbGFzc0luZGV4
OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBpZiAoKGluZGV4ID49IDAp
ICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKLSAgICAgICAgaWYgKCF2YWx1ZS0+SXNO
dW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVy
dCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOwotICAgICAgICBhcnJheS0+c2V0KGluZGV4
LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDdXN0b20u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICogCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKLQotI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+Ci0KLSNpbmNsdWRl
ICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5LmgiCi0jaW5jbHVkZSAiVjhD
YW52YXNCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJWOENhbnZhc0Zsb2F0QXJyYXkuaCIKLSNpbmNs
dWRlICJWOENhbnZhc0ludEFycmF5LmgiCi0jaW5jbHVkZSAiVjhDYW52YXNTaG9ydEFycmF5Lmgi
Ci0jaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgotI2luY2x1ZGUgIlY4Q2Fu
dmFzVW5zaWduZWRJbnRBcnJheS5oIgotI2luY2x1ZGUgIlY4Q2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiVjhQcm94
eS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFsbG9jYXRlcyBuZXcgc3RvcmFnZSB2
aWEgdHJ5RmFzdE1hbGxvYy4KLS8vIFJldHVybnMgTlVMTCBpZiBhcnJheSBmYWlsZWQgdG8gY29u
dmVydCBmb3IgYW55IHJlYXNvbi4KLXN0YXRpYyBmbG9hdCoganNBcnJheVRvRmxvYXRBcnJheSh2
ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIHVpbnQzMl90IGxlbikKLXsKLSAgICAvLyBDb252
ZXJ0IHRoZSBkYXRhIGVsZW1lbnQtYnktZWxlbWVudC4KLSAgICBmbG9hdCogZGF0YTsKLSAgICBp
ZiAoIXRyeUZhc3RNYWxsb2MobGVuICogc2l6ZW9mKGZsb2F0KSkuZ2V0VmFsdWUoZGF0YSkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBsZW47IGkrKykg
ewotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwgPSBhcnJheS0+R2V0KHY4OjpJbnRl
Z2VyOjpOZXcoaSkpOwotICAgICAgICBpZiAoIXZhbC0+SXNOdW1iZXIoKSkgewotICAgICAgICAg
ICAgZmFzdEZyZWUoZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAg
ICAgICBkYXRhW2ldID0gdG9GbG9hdCh2YWwpOwotICAgIH0KLSAgICByZXR1cm4gZGF0YTsKLX0K
LQotLy8gQWxsb2NhdGVzIG5ldyBzdG9yYWdlIHZpYSB0cnlGYXN0TWFsbG9jLgotLy8gUmV0dXJu
cyBOVUxMIGlmIGFycmF5IGZhaWxlZCB0byBjb252ZXJ0IGZvciBhbnkgcmVhc29uLgotc3RhdGlj
IGludCoganNBcnJheVRvSW50QXJyYXkodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5LCB1aW50
MzJfdCBsZW4pCi17Ci0gICAgLy8gQ29udmVydCB0aGUgZGF0YSBlbGVtZW50LWJ5LWVsZW1lbnQu
Ci0gICAgaW50KiBkYXRhOwotICAgIGlmICghdHJ5RmFzdE1hbGxvYyhsZW4gKiBzaXplb2YoaW50
KSkuZ2V0VmFsdWUoZGF0YSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWwg
PSBhcnJheS0+R2V0KHY4OjpJbnRlZ2VyOjpOZXcoaSkpOwotICAgICAgICBib29sIG9rOwotICAg
ICAgICBpbnQgaXZhbCA9IHRvSW50MzIodmFsLCBvayk7Ci0gICAgICAgIGlmICghb2spIHsKLSAg
ICAgICAgICAgIGZhc3RGcmVlKGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAg
IH0KLSAgICAgICAgZGF0YVtpXSA9IGl2YWw7Ci0gICAgfQotICAgIHJldHVybiBkYXRhOwotfQot
Ci1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQnVmZmVyRGF0YSkK
LXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuYnVmZmVyRGF0
YSgpIik7Ci0KLSAgICAvLyBGb3JtczoKLSAgICAvLyAqIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgQ2FudmFzQXJyYXkgZGF0YSwgR0xlbnVtIHVzYWdlKTsKLSAgICAvLyAgIC0gU2V0cyB0aGUg
YnVmZmVyJ3MgZGF0YSBmcm9tIHRoZSBnaXZlbiBDYW52YXNBcnJheQotICAgIC8vICogYnVmZmVy
RGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7Ci0gICAg
Ly8gICAtIFNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gc2l6ZSBpbiBi
eXRlcwotICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0
RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50
ZXJjZXB0b3IoKTsKLSAgICB9Ci0KLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRl
eHQgPQotICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKLSAgICBib29sIG9rOwotICAg
IGludCB0YXJnZXQgPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJu
IG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIGludCB1c2FnZSA9IHRvSW50
MzIoYXJnc1syXSwgb2spOwotICAgIGlmICghb2spIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKLSAgICB9Ci0gICAgaWYgKGFyZ3NbMV0tPklzSW50MzIoKSkgewotICAgICAgICBp
bnQgc2l6ZSA9IHRvSW50MzIoYXJnc1sxXSk7Ci0gICAgICAgIGNvbnRleHQtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBzaXplLCB1c2FnZSk7Ci0gICAgfSBlbHNlIGlmIChWOENhbnZhc0FycmF5OjpIYXNJ
bnN0YW5jZShhcmdzWzFdKSkgewotICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4OjpD
QU5WQVNBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7Ci0gICAgICAgIGNvbnRleHQtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBhcnJheSwgdXNhZ2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFY4UHJv
eHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhhbmRs
ZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19
Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RCdWZmZXJTdWJE
YXRhKQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5idWZm
ZXJTdWJEYXRhKCkiKTsKLQotICAgIC8vIEZvcm1zOgotICAgIC8vICogYnVmZmVyU3ViRGF0YShH
TGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIENhbnZhc0FycmF5IGRhdGEpOwotICAgIGlm
IChhcmdzLkxlbmd0aCgpICE9IDMpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
LSAgICB9Ci0KLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQotICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKLSAgICBib29sIG9rOwotICAgIGludCB0YXJnZXQg
PSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIGludCBvZmZzZXQgPSB0b0ludDMyKGFyZ3NbMV0s
IG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihT
WU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0g
ICAgfQotICAgIGlmICghVjhDYW52YXNBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1syXSkpIHsKLSAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1
cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0gICAgQ2FudmFzQXJyYXkqIGFy
cmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJyYXk+KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVksIGFyZ3NbMl0tPlRvT2JqZWN0KCkpOwotICAgIGNvbnRl
eHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIGFycmF5KTsKLSAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEVGV4SW1hZ2UyRCkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QudGV4SW1hZ2UyRCgpIik7Ci0KLSAgICAvLyBDdXJyZW50bHkgc3VwcG9ydGVkIGZv
cm1zOgotICAgIC8vICogdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50
IGxldmVsLAotICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMaW50IGludGVybmFsZm9ybWF0
LAotICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkg
aGVpZ2h0LCBpbiBHTGludCBib3JkZXIsCi0gICAgLy8gICAgICAgICAgICAgICAgICAgaW4gR0xl
bnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIENhbnZhc0FycmF5IHBpeGVscyk7Ci0gICAg
Ly8gKiB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGlu
IEhUTUxJbWFnZUVsZW1lbnQgaW1hZ2UsCi0gICAgLy8gICAgICAgICAgICAgICAgICAgW09wdGlv
bmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIHByZW11bHRp
cGx5QWxwaGEpOwotICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMgJiYKLSAgICAgICAgYXJncy5M
ZW5ndGgoKSAhPSA0ICYmCi0gICAgICAgIGFyZ3MuTGVuZ3RoKCkgIT0gNSAmJgotICAgICAgICBh
cmdzLkxlbmd0aCgpICE9IDkpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZ
TlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAg
ICB9Ci0KLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQotICAgICAgICBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEPihhcmdzLkhvbGRlcigpKTsKLSAgICBib29sIG9rOwotICAgIGludCB0YXJnZXQgPSB0
b0ludDMyKGFyZ3NbMF0sIG9rKTsKLSAgICBpZiAoIW9rKSB7Ci0gICAgICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIGludCBsZXZlbCA9IHRvSW50MzIoYXJnc1sxXSwgb2sp
OwotICAgIGlmICghb2spIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRB
WF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9
Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA9PSAz
IHx8Ci0gICAgICAgIGFyZ3MuTGVuZ3RoKCkgPT0gNCB8fAotICAgICAgICBhcmdzLkxlbmd0aCgp
ID09IDUpIHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMl07Ci0g
ICAgICAgIGlmIChWOEhUTUxJbWFnZUVsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbWFnZUVsZW1lbnQ+KHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QoYXJnKSk7Ci0gICAgICAgICAgICBib29sIGZsaXBZID0gZmFsc2U7Ci0gICAg
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChh
cmdzLkxlbmd0aCgpID49IDQpCi0gICAgICAgICAgICAgICAgZmxpcFkgPSBhcmdzWzNdLT5Cb29s
ZWFuVmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChhcmdzLkxlbmd0aCgpID49IDUpCi0gICAgICAg
ICAgICAgICAgcHJlbXVsdGlwbHlBbHBoYSA9IGFyZ3NbNF0tPkJvb2xlYW5WYWx1ZSgpOwotICAg
ICAgICAgICAgY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbWFnZV9lbGVtZW50
LCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24gdHlw
ZS4KLSAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAg
ICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZhbGwgdGhyb3VnaAotICAgIH0gZWxzZSBpZiAoYXJncy5MZW5ndGgoKSA9PSA5
KSB7Ci0gICAgICAgIGludCBpbnRlcm5hbGZvcm1hdCA9IHRvSW50MzIoYXJnc1syXSwgb2spOwot
ICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
U1lOVEFYX0VSUik7Ci0gICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKLSAgICAgICAgfQotICAgICAgICBpbnQgd2lkdGggPSB0b0ludDMyKGFyZ3NbM10sIG9rKTsK
LSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGhlaWdodCA9IHRvSW50MzIoYXJnc1s0XSwgb2sp
OwotICAgICAgICBpZiAoIW9rKSB7Ci0gICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oU1lOVEFYX0VSUik7Ci0gICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKLSAgICAgICAgfQotICAgICAgICBpbnQgYm9yZGVyID0gdG9JbnQzMihhcmdzWzVdLCBv
ayk7Ci0gICAgICAgIGlmICghb2spIHsKLSAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2Vw
dGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwotICAgICAgICB9Ci0gICAgICAgIGludCBmb3JtYXQgPSB0b0ludDMyKGFyZ3NbNl0s
IG9rKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IHR5cGUgPSB0b0ludDMyKGFyZ3NbN10s
IG9rKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVy
Y2VwdG9yKCk7Ci0gICAgICAgIH0KLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9
IGFyZ3NbOF07Ci0gICAgICAgIGlmIChWOENhbnZhc0FycmF5OjpIYXNJbnN0YW5jZShhcmcpKSB7
Ci0gICAgICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWSwgYXJn
LT5Ub09iamVjdCgpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBtdXN0IGRvIHZhbGlkYXRpb24g
c2ltaWxhciB0byBKT0dMJ3MgdG8gZW5zdXJlIHRoYXQKLSAgICAgICAgICAgIC8vIHRoZSBpbmNv
bWluZyBhcnJheSBpcyBvZiB0aGUgYXBwcm9wcmlhdGUgbGVuZ3RoIGFuZCB0eXBlCi0gICAgICAg
ICAgICBjb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXJyYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVj
KTsKLSAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaAotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9N
RXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJj
ZXB0b3IoKTsKLSAgICB9Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIFY4UHJveHk6OnNldERPTUV4
Y2VwdGlvbihlYyk7Ci0gICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNM
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFRleFN1YkltYWdlMkQpCi17Ci0gICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnRleFN1YkltYWdlMkQoKSIpOwotCi0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0KLSAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwotfQotCi1lbnVtIEZ1bmN0aW9uVG9DYWxsIHsKLSAgICBrVW5pZm9y
bTF2LCBrVW5pZm9ybTJ2LCBrVW5pZm9ybTN2LCBrVW5pZm9ybTR2LAotICAgIGtWZXJ0ZXhBdHRy
aWIxdiwga1ZlcnRleEF0dHJpYjJ2LCBrVmVydGV4QXR0cmliM3YsIGtWZXJ0ZXhBdHRyaWI0dgot
fTsKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3Jt
SGVscGVyZihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRvQ2FsbCBmdW5j
dGlvblRvQ2FsbCkgewotICAgIC8vIEZvcm1zOgotICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50
IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGlu
dCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0zZnYoR0xp
bnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtM2Z2KEdMaW50IGxv
Y2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdM
aW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTRmdihHTGludCBs
b2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmli
MWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmli
MWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xW
ZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xW
ZXJ0ZXhBdHRyaWIyZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7Ci0g
ICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0g
ICAgLy8gKiBnbFZlcnRleEF0dHJpYjNmdihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJh
eSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJh
eSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBDYW52
YXNGbG9hdEFycmF5IGRhdGEpOwotCi0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewotICAg
ICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7Ci0gICAgICAgIHJldHVy
biBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIH0KLQotICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkpOwot
ICAgIGJvb2wgb2s7Ci0gICAgaW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7Ci0g
ICAgaWYgKCFvaykgewotICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VS
Uik7Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIH0KLSAg
ICBpZiAoVjhDYW52YXNGbG9hdEFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgewotICAgICAg
ICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IAotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5W
QVNGTE9BVEFSUkFZLCBhcmdzWzFdLT5Ub09iamVjdCgpKTsKLSAgICAgICAgQVNTRVJUKGFycmF5
ICE9IE5VTEwpOwotICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7Ci0gICAgICAgICAg
ICBjYXNlIGtVbmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5KTsg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yZnYo
bG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIGtVbmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGFycmF5KTsgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0
cmliMWZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBrVmVydGV4
QXR0cmliMnY6IGNvbnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVh
azsKLSAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRy
aWIzZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIGtWZXJ0ZXhB
dHRyaWI0djogY29udGV4dC0+dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgdjg6
OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5ID0KLSAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpD
YXN0KGFyZ3NbMV0pOwotICAgIGlmIChhcnJheS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxl
ZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0gICAgdWludDMyX3QgbGVuID0gYXJyYXktPkxlbmd0
aCgpOwotICAgIGZsb2F0KiBkYXRhID0ganNBcnJheVRvRmxvYXRBcnJheShhcnJheSwgbGVuKTsK
LSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAv
IGJldHRlciBleGNlcHRpb24gdHlwZS4KLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
LSAgICB9Ci0gICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgewotICAgICAgICBjYXNlIGtVbmlm
b3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwot
ICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIGRh
dGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQtPnVuaWZv
cm0zZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtVbmlmb3Jt
NHY6IGNvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAg
ICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIxdjogY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGxvY2F0
aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2FzZSBrVmVydGV4QXR0cmliMnY6IGNv
bnRleHQtPnZlcnRleEF0dHJpYjJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAg
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjN2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYobG9jYXRp
b24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI0djogY29u
dGV4dC0+dmVydGV4QXR0cmliNGZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAg
ICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwotICAgIH0KLSAgICBmYXN0
RnJlZShkYXRhKTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1IZWxwZXJpKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFy
Z3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9u
VG9DYWxsIGZ1bmN0aW9uVG9DYWxsKSB7Ci0gICAgLy8gRm9ybXM6Ci0gICAgLy8gKiBnbFVuaWZv
cm0xaXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMWl2
KEdMaW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIENhbnZhc0ludEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
M2l2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNpdihH
TGludCBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00
aXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtNGl2KEdM
aW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKLQotICAgIGlmIChhcmdzLkxlbmd0
aCgpICE9IDMpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIp
OwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0KLSAg
ICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQotICAgICAgICBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihh
cmdzLkhvbGRlcigpKTsKLSAgICBib29sIG9rOwotICAgIGludCBsb2NhdGlvbiA9IHRvSW50MzIo
YXJnc1swXSwgb2spOwotICAgIGlmICghb2spIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKLSAgICB9Ci0gICAgaWYgKFY4Q2FudmFzSW50QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3Nb
MV0pKSB7Ci0gICAgICAgIENhbnZhc0ludEFycmF5KiBhcnJheSA9IAotICAgICAgICAgICAgVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzSW50QXJyYXk+KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTSU5UQVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOwotICAgICAgICBBU1NF
UlQoYXJyYXkgIT0gTlVMTCk7Ci0gICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKLSAg
ICAgICAgICAgIGNhc2Uga1VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwg
YXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAgICAgICAgIGNhc2Uga1VuaWZv
cm0zdjogY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKLSAgICAg
ICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgYXJy
YXkpOyBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIH0K
LQotICAgIHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSA9Ci0gICAgICB2ODo6TG9jYWw8djg6
OkFycmF5Pjo6Q2FzdChhcmdzWzFdKTsKLSAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKSB7Ci0gICAg
ICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKLSAgICAgICAgcmV0dXJu
IG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgfQotICAgIHVpbnQzMl90IGxlbiA9IGFy
cmF5LT5MZW5ndGgoKTsKLSAgICBpbnQqIGRhdGEgPSBqc0FycmF5VG9JbnRBcnJheShhcnJheSwg
bGVuKTsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgLy8gRklYTUU6IGNvbnNpZGVyIGRpZmZl
cmVudCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4KLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKLSAgICB9Ci0gICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgewotICAgICAgICBjYXNl
IGtVbmlmb3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJy
ZWFrOwotICAgICAgICBjYXNlIGtVbmlmb3JtMnY6IGNvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRp
b24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtVbmlmb3JtM3Y6IGNvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOwotICAgICAgICBjYXNlIGtV
bmlmb3JtNHY6IGNvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFr
OwotICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7Ci0gICAgfQot
ICAgIGZhc3RGcmVlKGRhdGEpOwotICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci19Ci0KLUNB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtMWZ2KQotewot
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMWZ2KCki
KTsKLSAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1VuaWZv
cm0xdik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RV
bmlmb3JtMWl2KQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC51bmlmb3JtMWl2KCkiKTsKLSAgICByZXR1cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1VuaWZv
cm0xdik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RV
bmlmb3JtMmZ2KQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC51bmlmb3JtMmZ2KCkiKTsKLSAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBl
cmYoYXJncywga1VuaWZvcm0ydik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0RVbmlmb3JtMml2KQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMml2KCkiKTsKLSAgICByZXR1cm4gdW5pZm9ybUhlbHBl
cmkoYXJncywga1VuaWZvcm0ydik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0RVbmlmb3JtM2Z2KQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRC51bmlmb3JtM2Z2KCkiKTsKLSAgICByZXR1cm4gdmVydGV4QXR0cmli
QW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1VuaWZvcm0zdik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtM2l2KQotewotICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtM2l2KCkiKTsKLSAgICByZXR1
cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1VuaWZvcm0zdik7Ci19Ci0KLUNBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGZ2KQotewotICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtNGZ2KCkiKTsKLSAgICByZXR1
cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1VuaWZvcm00dik7Ci19Ci0K
LUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtNGl2KQot
ewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtNGl2
KCkiKTsKLSAgICByZXR1cm4gdW5pZm9ybUhlbHBlcmkoYXJncywga1VuaWZvcm00dik7Ci19Ci0K
LXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybU1hdHJpeEhlbHBlcihjb25zdCB2
ODo6QXJndW1lbnRzJiBhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBtYXRyaXhTaXplKQotewotICAgIC8vIEZvcm1zOgotICAgIC8vICog
Z2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBB
cnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybU1hdHJpeDJmdihHTGludCBsb2NhdGlvbiwg
R0xib29sZWFuIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKLSAgICAvLyAqIGds
VW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgQXJy
YXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQgbG9jYXRpb24sIEdM
Ym9vbGVhbiB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVu
aWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFycmF5
IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTGJv
b2xlYW4gdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOwotICAgIC8vCi0gICAgLy8g
RklYTUU6IG5lZWQgdG8gY2hhbmdlIHRvIGFjY2VwdCBDYW52YXNGbG9hdEFycmF5IGFzIHdlbGwu
Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewotICAgICAgICBWOFByb3h5OjpzZXRET01F
eGNlcHRpb24oU1lOVEFYX0VSUik7Ci0gICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwotICAgIH0KLQotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9
Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkpOwotICAgIGJvb2wgb2s7Ci0gICAgaW50
IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7Ci0gICAgaWYgKCFvaykgewotICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7Ci0gICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwotICAgIH0KLSAgICBib29sIHRyYW5zcG9zZSA9IGFy
Z3NbMV0tPkJvb2xlYW5WYWx1ZSgpOwotICAgIGlmIChWOENhbnZhc0Zsb2F0QXJyYXk6Okhhc0lu
c3RhbmNlKGFyZ3NbMl0pKSB7Ci0gICAgICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0gCi0g
ICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNGbG9h
dEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0ZMT0FUQVJSQVksIGFyZ3NbMl0tPlRvT2JqZWN0
KCkpOwotICAgICAgICBBU1NFUlQoYXJyYXkgIT0gTlVMTCk7Ci0gICAgICAgIHN3aXRjaCAobWF0
cml4U2l6ZSkgewotICAgICAgICAgICAgY2FzZSAyOiBjb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5KTsgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIDM6
IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkpOyBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgNDogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbiwgdHJhbnNwb3NlLCBhcnJheSk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogQVNT
RVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5ID0K
LSAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMl0pOwotICAgIGlmIChhcnJh
eS5Jc0VtcHR5KCkpIHsKLSAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOwotICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0g
ICAgdWludDMyX3QgbGVuID0gYXJyYXktPkxlbmd0aCgpOwotICAgIGZsb2F0KiBkYXRhID0ganNB
cnJheVRvRmxvYXRBcnJheShhcnJheSwgbGVuKTsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAg
Ly8gRklYTUU6IGNvbnNpZGVyIGRpZmZlcmVudCAvIGJldHRlciBleGNlcHRpb24gdHlwZS4KLSAg
ICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwotICAgICAgICByZXR1
cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKLSAgICB9Ci0gICAgc3dpdGNoIChtYXRyaXhT
aXplKSB7Ci0gICAgICAgIGNhc2UgMjogY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
biwgdHJhbnNwb3NlLCBkYXRhLCBsZW4pOyBicmVhazsKLSAgICAgICAgY2FzZSAzOiBjb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGRhdGEsIGxlbik7IGJyZWFr
OwotICAgICAgICBjYXNlIDQ6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRy
YW5zcG9zZSwgZGF0YSwgbGVuKTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyBicmVhazsKLSAgICB9Ci0gICAgZmFzdEZyZWUoZGF0YSk7Ci0gICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRFVuaWZvcm1NYXRyaXgyZnYpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm1NYXRyaXgyZnYoKSIpOwotICAgIHJldHVybiB1bmlm
b3JtTWF0cml4SGVscGVyKGFyZ3MsIDIpOwotfQotCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybU1hdHJpeDNmdikKLXsKLSAgICBJTkNfU1RBVFMoIkRP
TS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybU1hdHJpeDNmdigpIik7Ci0gICAgcmV0
dXJuIHVuaWZvcm1NYXRyaXhIZWxwZXIoYXJncywgMyk7Ci19Ci0KLUNBTExCQUNLX0ZVTkNfREVD
TChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4NGZ2KQotewotICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4NGZ2KCkiKTsK
LSAgICByZXR1cm4gdW5pZm9ybU1hdHJpeEhlbHBlcihhcmdzLCA0KTsKLX0KLQotQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjFmdikKLXsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliMWZ2
KCkiKTsKLSAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1Zl
cnRleEF0dHJpYjF2KTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRFZlcnRleEF0dHJpYjJmdikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliMmZ2KCkiKTsKLSAgICByZXR1cm4gdmVydGV4QXR0
cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjJ2KTsKLX0KLQotQ0FMTEJB
Q0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjNmdikKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmli
M2Z2KCkiKTsKLSAgICByZXR1cm4gdmVydGV4QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywg
a1ZlcnRleEF0dHJpYjN2KTsKLX0KLQotQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRFZlcnRleEF0dHJpYjRmdikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudmVydGV4QXR0cmliNGZ2KCkiKTsKLSAgICByZXR1cm4gdmVydGV4
QXR0cmliQW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjR2KTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNTaG9ydEFy
cmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1Nob3J0QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0j
aW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNTaG9ydEFycmF5
LmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgotI2luY2x1ZGUgIlY4Q3Vz
dG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4UHJveHkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzU2hvcnRBcnJheUNvbnN0cnVjdG9yKQotewot
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Nob3J0QXJyYXkuQ29udHJ1Y3RvciIpOwotCi0gICAg
cmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Nob3J0QXJyYXk+KGFyZ3MsIFY4Q2xh
c3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZKSk7Ci19Ci0KLS8v
IEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3Jh
cHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lk
ZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9Q
RVJUWV9HRVRURVIoQ2FudmFzU2hvcnRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52
YXNTaG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIENhbnZhc1Nob3J0QXJy
YXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzU2hv
cnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsK
LQotICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKLSAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKLSAgICBzaG9ydCByZXN1bHQ7Ci0gICAgaWYg
KCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOwotICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRo
ZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxp
ZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlfU0VU
VEVSKENhbnZhc1Nob3J0QXJyYXkpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRB
cnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBDYW52YXNTaG9ydEFycmF5KiBhcnJh
eSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Nob3J0QXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAgICBp
ZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKLSAgICAgICAg
aWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJD
b3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOwotICAgICAgICBh
cnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7Ci0gICAgfQotICAgIHJldHVy
biB2YWx1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1
MDYzNCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRCeXRl
QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgotCi0jaW5j
bHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKLSNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcu
aCIKLSNpbmNsdWRlICJWOFByb3h5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotQ0FMTEJB
Q0tfRlVOQ19ERUNMKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IpCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuQ29udHJ1Y3RvciIpOwotCi0g
ICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Pihh
cmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRF
QVJSQVkpKTsKLX0KLQotLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkg
YW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4
LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5l
ZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkKLXsK
LSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5JbmRleGVkUHJvcGVy
dHlHZXR0ZXIiKTsKLSAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNVTlNJR05FREJZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7Ci0KLSAg
ICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCi0gICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgY2hhciByZXN1bHQ7Ci0gICAg
aWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0
IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2
YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlf
U0VUVEVSKENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KQotewotICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIENhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lH
TkVEQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXggPj0gMCkgJiYg
KGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgewotICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJl
cigpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IHZh
bHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7Ci0gICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZh
bHVlLT5OdW1iZXJWYWx1ZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbHVlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25lZEludEFycmF5Q3VzdG9t
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vu
c2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUg
IkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKLQotI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2lu
Y2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3Vz
dG9tLmgiCi0jaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhQcm94eS5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNVbnNp
Z25lZEludEFycmF5Q29uc3RydWN0b3IpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5z
aWduZWRJbnRBcnJheS5Db250cnVjdG9yIik7Ci0KLSAgICByZXR1cm4gY29uc3RydWN0Q2FudmFz
QXJyYXk8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChW
OENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVkpKTsKLX0KLQotLy8gR2V0IHRoZSBz
cGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgaW50ZWdlciBhcnJheSBhbmQgcmV0dXJuIGl0IHdyYXBw
ZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUg
dGhlIHZhbGlkIHBpeGVsIGJ1ZmZlciByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVE
X1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KQotewotICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0g
ICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZB
U1VOU0lHTkVESU5UQVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA8IDAp
IHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwotICAgIHVuc2lnbmVkIGludCByZXN1bHQ7Ci0gICAgaWYgKCFhcnJheS0+Z2V0KGlu
ZGV4LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAgIHJldHVy
biB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFs
dWUgaW4gdGhlIGludGVnZXIgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGludGVn
ZXIgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihDYW52YXNVbnNpZ25lZEludEFycmF5KQotewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZh
c1Vuc2lnbmVkSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgQ2FudmFzVW5z
aWduZWRJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNVbnNpZ25lZEludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5U
QVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXgg
PCBhcnJheS0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIGlmICghdmFsdWUtPklzTnVtYmVyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJn
dW1lbnQgdG8gYSBudW1iZXIiKTsKLSAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51
bWJlclZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAi
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNp
bmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1
c3RvbS5oIgotI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgotI2luY2x1ZGUgIlY4UHJveHku
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzVW5z
aWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IpCi17Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5LkNvbnRydWN0b3IiKTsKLQotICAgIHJldHVybiBjb25zdHJ1Y3RD
YW52YXNBcnJheTxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6
VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVkpKTsKLX0KLQotLy8g
R2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3cmFw
cGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRzaWRl
IHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkpCi17Ci0gICAgSU5DX1NUQVRTKCJE
T00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAg
IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FO
VkFTVU5TSUdORURTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKLQotICAgIGlmICgoaW5kZXgg
PCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKLSAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7Ci0gICAgaWYgKCFhcnJheS0+
Z2V0KGluZGV4LCByZXN1bHQpKQotICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwotICAg
IHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKLX0KLQotLy8gU2V0IHRoZSBzcGVjaWZp
ZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSBy
YW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheSkKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENh
bnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JU
QVJSQVksIGluZm8uSG9sZGVyKCkpOwotCi0gICAgaWYgKChpbmRleCA+PSAwKSAmJiAoaW5kZXgg
PCBhcnJheS0+bGVuZ3RoKCkpKSB7Ci0gICAgICAgIGlmICghdmFsdWUtPklzTnVtYmVyKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQgdmFsdWUgYXJn
dW1lbnQgdG8gYSBudW1iZXIiKTsKLSAgICAgICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51
bWJlclZhbHVlKCkpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWU7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNTA2MzQp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYzLDM1ICszNjMsMzUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFB1dEltYWdlRGF0YSk7
CiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzREJ1ZmZlckRhdGEpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNL
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREJ1ZmZlclN1YkRhdGEpOwotICAgICAgICBERUNMQVJF
X0NBTExCQUNLKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFNpemVvZik7Ci0gICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVGV4SW1hZ2UyRCk7Ci0gICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVGV4U3ViSW1hZ2UyRCk7
Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9y
bTFmdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
VW5pZm9ybTFpdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEVW5pZm9ybTJmdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEVW5pZm9ybTJpdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTNmdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTNpdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTRmdik7Ci0gICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTRpdik7Ci0gICAgICAg
IERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybU1hdHJpeDJm
dik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5p
Zm9ybU1hdHJpeDNmdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEVW5pZm9ybU1hdHJpeDRmdik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliMWZ2KTsKLSAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWIyZnYpOwotICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjNm
dik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVy
dGV4QXR0cmliNGZ2KTsKLQotICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc0J5dGVBcnJh
eUNvbnN0cnVjdG9yKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNGbG9hdEFycmF5
Q29uc3RydWN0b3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc0ludEFycmF5Q29u
c3RydWN0b3IpOwotICAgICAgICBERUNMQVJFX0NBTExCQUNLKENhbnZhc1Nob3J0QXJyYXlDb25z
dHJ1Y3Rvcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXlDb25zdHJ1Y3Rvcik7Ci0gICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soQ2FudmFzVW5zaWduZWRJ
bnRBcnJheUNvbnN0cnVjdG9yKTsKLSAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXlDb25zdHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QnVmZmVyRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0so
V2ViR0xSZW5kZXJpbmdDb250ZXh0QnVmZmVyU3ViRGF0YSk7CisgICAgICAgIERFQ0xBUkVfQ0FM
TEJBQ0soV2ViR0xSZW5kZXJpbmdDb250ZXh0U2l6ZW9mKTsKKyAgICAgICAgREVDTEFSRV9DQUxM
QkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRUZXhJbWFnZTJEKTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRUZXhTdWJJbWFnZTJEKTsKKyAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMWZ2KTsKKyAgICAgICAg
REVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMWl2KTsKKyAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMmZ2KTsKKyAg
ICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMml2KTsK
KyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtM2Z2
KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3Jt
M2l2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlm
b3JtNGZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRV
bmlmb3JtNGl2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHRVbmlmb3JtTWF0cml4MmZ2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRl
cmluZ0NvbnRleHRVbmlmb3JtTWF0cml4M2Z2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtTWF0cml4NGZ2KTsKKyAgICAgICAgREVDTEFSRV9D
QUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRWZXJ0ZXhBdHRyaWIxZnYpOworICAgICAgICBE
RUNMQVJFX0NBTExCQUNLKFdlYkdMUmVuZGVyaW5nQ29udGV4dFZlcnRleEF0dHJpYjJmdik7Cisg
ICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xSZW5kZXJpbmdDb250ZXh0VmVydGV4QXR0cmli
M2Z2KTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFJlbmRlcmluZ0NvbnRleHRWZXJ0
ZXhBdHRyaWI0ZnYpOworCisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xBcnJheUJ1ZmZl
ckNvbnN0cnVjdG9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTEJ5dGVBcnJheUNv
bnN0cnVjdG9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTEZsb2F0QXJyYXlDb25z
dHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xJbnRBcnJheUNvbnN0cnVj
dG9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFNob3J0QXJyYXlDb25zdHJ1Y3Rv
cik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0
cnVjdG9yKTsKKyAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhXZWJHTFVuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3Rvcik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXlDb25zdHJ1Y3Rvcik7CiAjZW5kaWYKIAogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FD
Q0VTU09SX0dFVFRFUihDbGlwYm9hcmRUeXBlcyk7CkBAIC01MjgsMzIgKzUyOCwzMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIERFQ0xBUkVfTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhU
TUxBbGxDb2xsZWN0aW9uKTsKICAgICAgICAgREVDTEFSRV9OQU1FRF9QUk9QRVJUWV9HRVRURVIo
SFRNTENvbGxlY3Rpb24pOwogCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgREVDTEFS
RV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNCeXRlQXJyYXkpOwotICAgICAgICBERUNM
QVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0J5dGVBcnJheSk7Ci0KLSAgICAgICAg
REVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKLSAgICAg
ICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNGbG9hdEFycmF5KTsKLQot
ICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0ludEFycmF5KTsK
LSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNJbnRBcnJheSk7
Ci0jZW5kaWYKLQogICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZh
c1BpeGVsQXJyYXkpOwogICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENh
bnZhc1BpeGVsQXJyYXkpOwogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKLSAgICAgICAgREVDTEFS
RV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKLSAgICAgICAgREVD
TEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNTaG9ydEFycmF5KTsKKyAgICAgICAg
REVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTEJ5dGVBcnJheSk7CisgICAgICAg
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xCeXRlQXJyYXkpOworCisgICAg
ICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xGbG9hdEFycmF5KTsKKyAg
ICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTEZsb2F0QXJyYXkpOwor
CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xJbnRBcnJheSk7
CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xJbnRBcnJheSk7
CisKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFNob3J0QXJy
YXkpOworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMU2hvcnRB
cnJheSk7CiAKLSAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheSk7Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRU
RVIoQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkpOworICAgICAgICBERUNMQVJFX0lOREVYRURfUFJP
UEVSVFlfR0VUVEVSKFdlYkdMVW5zaWduZWRCeXRlQXJyYXkpOworICAgICAgICBERUNMQVJFX0lO
REVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMVW5zaWduZWRCeXRlQXJyYXkpOwogCi0gICAgICAg
IERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRJbnRBcnJheSk7
Ci0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzVW5zaWduZWRJ
bnRBcnJheSk7CisgICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xV
bnNpZ25lZEludEFycmF5KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRF
UihXZWJHTFVuc2lnbmVkSW50QXJyYXkpOwogCi0gICAgICAgIERFQ0xBUkVfSU5ERVhFRF9QUk9Q
RVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KTsKLSAgICAgICAgREVDTEFSRV9J
TkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkpOworICAgICAg
ICBERUNMQVJFX0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
KTsKKyAgICAgICAgREVDTEFSRV9JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheSk7CiAjZW5kaWYKIAogICAgICAgICBERUNMQVJFX1BST1BFUlRZX0FDQ0VTU09S
X0dFVFRFUihNZXNzYWdlRXZlbnRQb3J0cyk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52
YXNDCiAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwogI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCiAgICAgZWxzZSBpZiAocmVzdWx0LT5pczNkKCkpCi0gICAgICAgIHJldHVybiBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVS
SU5HQ09OVEVYVDNELCByZXN1bHQpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQkdMUkVOREVSSU5HQ09OVEVYVCwgcmVzdWx0
KTsKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDEwIEBAIENBTExC
QUNLX0ZVTkNfREVDTChIVE1MQ2FudmFzRWxlbWVudEdldEMKICAgICAgICAgcmV0dXJuIFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdD
T05URVhUMkQsIHJlc3VsdCk7CiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICAgICBlbHNlIGlmIChy
ZXN1bHQtPmlzM2QoKSkKLSAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUM0QsIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6V0VCR0xSRU5ERVJJTkdDT05URVhULCByZXN1bHQpOwogI2VuZGlmCiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
QXJyYXlCdWZmZXJDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjAxKQkoZnJv
bSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tLmNw
cDo1MDYwMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZl
ckN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1
ZmZlci5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJh
eUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJv
eHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNBcnJh
eUJ1ZmZlci5Db250cnVjdG9yIik7CisKKyAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkp
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5v
dCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTsKKworICAgIGludCBhcmdMZW4gPSBhcmdzLkxl
bmd0aCgpOworICAgIC8vIFN1cHBvcnRlZCBjb25zdHJ1Y3RvcnM6CisgICAgLy8gQ2FudmFzQXJy
YXlCdWZmZXIobikgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgorICAgIC8vICAgLS0gY3JlYXRlIGFu
IGVtcHR5IGJ1ZmZlciBvZiBuIGJ5dGVzCisKKyAgICBpZiAoYXJnTGVuICE9IDEpCisgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIHNwZWNpZmllZCB0
byBjb25zdHJ1Y3RvciAocmVxdWlyZXMgMSkiKTsKKworICAgIGludCBsZW4gPSAwOworICAgIGlm
ICghYXJnc1swXS0+SXNJbnQzMigpKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQXJndW1l
bnQgdG8gQ2FudmFzQXJyYXlCdWZmZXIgY29uc3RydWN0b3Igd2FzIG5vdCBhbiBpbnRlZ2VyIik7
CisgICAgbGVuID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZm
ZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuKTsKKyAgICAvLyBUcmFu
c2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRoZSBhcnJheS4KKyAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4
OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZQlVGRkVSKSwgYnVmZmVyLmdldCgpKTsK
KyAgICByZXR1cm4gdG9WOChidWZmZXIucmVsZWFzZSgpLCBhcmdzLkhvbGRlcigpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUJ1ZmZlckN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5
QnVmZmVyQ3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMQXJyYXlCdWZmZXJDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MiwyNSArMzIsMjUgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKIAogI2luY2x1
ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKICNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCisjaW5jbHVkZSAi
VjhXZWJHTEFycmF5QnVmZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc0FycmF5QnVmZmVyQ29uc3RydWN0b3IpCitDQUxMQkFDS19GVU5DX0RF
Q0woV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVjdG9yKQogewotICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc0FycmF5QnVmZmVyLkNvbnRydWN0b3IiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEFy
cmF5QnVmZmVyLkNvbnRydWN0b3IiKTsKIAogICAgIGlmICghYXJncy5Jc0NvbnN0cnVjdENhbGwo
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3IgY2Fu
bm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOwogCiAgICAgaW50IGFyZ0xlbiA9IGFyZ3Mu
TGVuZ3RoKCk7CiAgICAgLy8gU3VwcG9ydGVkIGNvbnN0cnVjdG9yczoKLSAgICAvLyBDYW52YXNB
cnJheUJ1ZmZlcihuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CisgICAgLy8gV2ViR0xBcnJheUJ1
ZmZlcihuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CiAgICAgLy8gICAtLSBjcmVhdGUgYW4gZW1w
dHkgYnVmZmVyIG9mIG4gYnl0ZXMKIAogICAgIGlmIChhcmdMZW4gIT0gMSkKQEAgLTU4LDExICs1
OCwxMSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzQXJyYXlCdWZmZXJDb25zCiAKICAgICBp
bnQgbGVuID0gMDsKICAgICBpZiAoIWFyZ3NbMF0tPklzSW50MzIoKSkKLSAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoIkFyZ3VtZW50IHRvIENhbnZhc0FycmF5QnVmZmVyIGNvbnN0cnVjdG9yIHdh
cyBub3QgYW4gaW50ZWdlciIpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQXJndW1lbnQg
dG8gV2ViR0xBcnJheUJ1ZmZlciBjb25zdHJ1Y3RvciB3YXMgbm90IGFuIGludGVnZXIiKTsKICAg
ICBsZW4gPSB0b0ludDMyKGFyZ3NbMF0pOwotICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4g
YnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW4pOworICAgIFJlZlB0cjxXZWJH
TEFycmF5QnVmZmVyPiBidWZmZXIgPSBXZWJHTEFycmF5QnVmZmVyOjpjcmVhdGUobGVuKTsKICAg
ICAvLyBUcmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRoZSBh
cnJheS4KLSAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhD
bGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZQlVGRkVSKSwgYnVmZmVy
LmdldCgpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwg
VjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMQVJSQVlCVUZGRVIpLCBidWZm
ZXIuZ2V0KCkpOwogICAgIHJldHVybiB0b1Y4KGJ1ZmZlci5yZWxlYXNlKCksIGFyZ3MuSG9sZGVy
KCkpOwogfQogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlD
dXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
QXJyYXlDdXN0b20uaAkocmV2aXNpb24gNTA2MDEpCShmcm9tIFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzQXJyYXlDdXN0b20uaDo1MDYwMSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2lu
Y2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNp
bmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5n
LmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAv
LyBUZW1wbGF0ZSBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBDYW52YXNBcnJheSpDb25zdHJ1Y3RvciBj
YWxsYmFja3MuCisgICAgdGVtcGxhdGU8Y2xhc3MgQXJyYXlDbGFzcz4KKyAgICB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY29uc3RydWN0Q2FudmFzQXJyYXkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNs
YXNzSW5kZXgpCisgICAgeworICAgICAgICBpZiAoIWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5u
b3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7CisKKyAgICAgICAgaW50IGFyZ0xlbiA9IGFy
Z3MuTGVuZ3RoKCk7CisgICAgICAgIC8vIFN1cHBvcnRlZCBjb25zdHJ1Y3RvcnM6CisgICAgICAg
IC8vIENhbnZhczxUPkFycmF5KG4pIHdoZXJlIG4gaXMgYW4gaW50ZWdlcjoKKyAgICAgICAgLy8g
ICAtLSBjcmVhdGUgYW4gZW1wdHkgYXJyYXkgb2YgbiBlbGVtZW50cworICAgICAgICAvLyBDYW52
YXM8VD5BcnJheShhcnIpIHdoZXJlIGFyciBpcyBhbiBhcnJheToKKyAgICAgICAgLy8gICAtLSBj
cmVhdGUgYSBDYW52YXM8VD5BcnJheSBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiAiYXJyIgor
ICAgICAgICAvLyBDYW52YXM8VD5BcnJheShidWYsIG9mZnNldCwgbGVuZ3RoKQorICAgICAgICAv
LyAgIC0tIGNyZWF0ZSBhIENhbnZhczxUPkFycmF5IHBvaW50aW5nIHRvIHRoZSBDYW52YXNBcnJh
eUJ1ZmZlcgorICAgICAgICAvLyAgICAgICJidWYiLCBzdGFydGluZyBhdCB0aGUgc3BlY2lmaWVk
IG9mZnNldCwgZm9yIHRoZSBnaXZlbgorICAgICAgICAvLyAgICAgIGxlbmd0aAorCisgICAgICAg
IGlmIChhcmdMZW4gPT0gMCkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJObyBhcmd1
bWVudHMgc3BlY2lmaWVkIHRvIGNvbnN0cnVjdG9yIik7CisKKyAgICAgICAgLy8gU2VlIHdoZXRo
ZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgQ2FudmFzQXJyYXlCdWZmZXIuCisgICAgICAgIGlm
IChWOENhbnZhc0FycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkgeworICAgICAgICAg
ICAgaWYgKGFyZ0xlbiA+IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldy
b25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5
QnVmZmVyLCBpbnQsIGludCkiKTsKKworICAgICAgICAgICAgQ2FudmFzQXJyYXlCdWZmZXIqIGJ1
ZiA9CisgICAgICAgICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
Q2FudmFzQXJyYXlCdWZmZXI+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVlCVUZGRVIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZ3NbMF0tPlRvT2JqZWN0KCkpOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBO
VUxMKQorICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVy
dCBhcmd1bWVudCAwIHRvIGEgQ2FudmFzQXJyYXlCdWZmZXIiKTsKKyAgICAgICAgICAgIGJvb2wg
b2s7CisgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGlmIChhcmdMZW4g
PiAxKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gdG9JbnQzMihhcmdzWzFdLCBvayk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDEgdG8gYW4gaW50ZWdlciIpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaW50IGxlbmd0aCA9IGJ1Zi0+Ynl0ZUxlbmd0aCgpIC0g
b2Zmc2V0OworICAgICAgICAgICAgaWYgKGFyZ0xlbiA+IDIpIHsKKyAgICAgICAgICAgICAgICBs
ZW5ndGggPSB0b0ludDMyKGFyZ3NbMl0sIG9rKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQg
YXJndW1lbnQgMiB0byBhbiBpbnRlZ2VyIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTGVuZ3Ro
IC8gb2Zmc2V0IG91dCBvZiByYW5nZSIpOworCisgICAgICAgICAgICBSZWZQdHI8QXJyYXlDbGFz
cz4gYXJyYXkgPSBBcnJheUNsYXNzOjpjcmVhdGUoYnVmLCBvZmZzZXQsIGxlbmd0aCk7CisgICAg
ICAgICAgICBpZiAoYXJyYXkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5
QnVmZmVyLCBpbnQsIGludCkiKTsKKyAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVy
IGludG8gYSB3cmFwcGVyIG9iamVjdCBmb3IgdGhlIGFycmF5LgorICAgICAgICAgICAgVjhET01X
cmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIGNsYXNzSW5kZXgsIGFycmF5Lmdl
dCgpKTsKKyAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SW5kZXhlZFByb3BlcnRpZXNUb0V4
dGVybmFsQXJyYXkoYXJncy5Ib2xkZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NJbmRleCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXku
Z2V0KCktPmJhc2VBZGRyZXNzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LmdldCgpLT5sZW5ndGgoKSk7CisgICAg
ICAgICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVyKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IGxlbiA9IDA7CisgICAgICAgIHY4OjpIYW5kbGU8djg6OkFy
cmF5PiBzcmNBcnJheTsKKyAgICAgICAgaWYgKGFyZ0xlbiAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3IENhbnZhczxU
PkFycmF5KGludCAvIGFycmF5KSIpOworCisgICAgICAgIGlmIChhcmdzWzBdLT5Jc0ludDMyKCkp
IHsKKyAgICAgICAgICAgIGxlbiA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoYXJnc1swXS0+SXNBcnJheSgpKSB7CisgICAgICAgICAgICBzcmNBcnJheSA9IHY4OjpMb2Nh
bDx2ODo6QXJyYXk+OjpDYXN0KGFyZ3NbMF0pOworICAgICAgICAgICAgaWYgKHNyY0FycmF5Lklz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNv
bnZlcnQgYXJndW1lbnQgMCB0byBhbiBhcnJheSIpOworICAgICAgICAgICAgbGVuID0gc3JjQXJy
YXktPkxlbmd0aCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vy
cm9yKCJDb3VsZCBub3QgY29udmVydCBhcmd1bWVudCAwIHRvIGVpdGhlciBhbiBpbnQzMiBvciBh
biBhcnJheSIpOworCisgICAgICAgIFJlZlB0cjxBcnJheUNsYXNzPiBhcnJheSA9IEFycmF5Q2xh
c3M6OmNyZWF0ZShsZW4pOworICAgICAgICBpZiAoIXNyY0FycmF5LklzRW1wdHkoKSkgeworICAg
ICAgICAgICAgLy8gTmVlZCB0byBjb3B5IHRoZSBpbmNvbWluZyBhcnJheSBpbnRvIHRoZSBuZXds
eSBjcmVhdGVkIENhbnZhc0FycmF5LgorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBs
ZW47IGkrKykgeworICAgICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IHNy
Y0FycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgICAgICAgICAgaWYgKCF2
YWwtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBidWZbMjU2XTsKKyAg
ICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJDb3VsZCBub3QgY29udmVydCBhcnJheSBl
bGVtZW50ICVkIHRvIGEgbnVtYmVyIiwgaSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGJ1Zik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFycmF5
LT5zZXQoaSwgdmFsLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgaG9sZGVyIGludG8gYSB3cmFwcGVyIG9iamVjdCBm
b3IgdGhlIGFycmF5LgorICAgICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5I
b2xkZXIoKSwgY2xhc3NJbmRleCwgYXJyYXkuZ2V0KCkpOworICAgICAgICBWOERPTVdyYXBwZXI6
OnNldEluZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFyZ3MuSG9sZGVyKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3NJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhcnJheS5nZXQoKS0+YmFzZUFkZHJlc3MoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5nZXQoKS0+bGVu
Z3RoKCkpOworICAgICAgICByZXR1cm4gdG9WOChhcnJheS5yZWxlYXNlKCksIGFyZ3MuSG9sZGVy
KCkpOworICAgIH0KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5oCShyZXZp
c2lvbiA1MDYwMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1
c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw0NyArMzIsNDcgQEAKIAogI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMQXJyYXlCdWZmZXIuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4
Q2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOFdlYkdMQXJyYXlCdWZmZXIuaCIKICNp
bmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotICAgIC8vIFRlbXBsYXRlIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIENh
bnZhc0FycmF5KkNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KKyAgICAvLyBUZW1wbGF0ZSBmdW5jdGlv
biB1c2VkIGJ5IHRoZSBXZWJHTEFycmF5KkNvbnN0cnVjdG9yIGNhbGxiYWNrcy4KICAgICB0ZW1w
bGF0ZTxjbGFzcyBBcnJheUNsYXNzPgotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb25zdHJ1
Y3RDYW52YXNBcnJheShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xhc3NJbmRleCkKKyAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0V2ViR0xBcnJheShjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBjbGFzc0luZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFhcmdzLklzQ29uc3RydWN0Q2FsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkRPTSBvYmplY3QgY29uc3RydWN0b3Ig
Y2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpOwogCiAgICAgICAgIGludCBhcmdMZW4g
PSBhcmdzLkxlbmd0aCgpOwogICAgICAgICAvLyBTdXBwb3J0ZWQgY29uc3RydWN0b3JzOgotICAg
ICAgICAvLyBDYW52YXM8VD5BcnJheShuKSB3aGVyZSBuIGlzIGFuIGludGVnZXI6CisgICAgICAg
IC8vIFdlYkdMPFQ+QXJyYXkobikgd2hlcmUgbiBpcyBhbiBpbnRlZ2VyOgogICAgICAgICAvLyAg
IC0tIGNyZWF0ZSBhbiBlbXB0eSBhcnJheSBvZiBuIGVsZW1lbnRzCi0gICAgICAgIC8vIENhbnZh
czxUPkFycmF5KGFycikgd2hlcmUgYXJyIGlzIGFuIGFycmF5OgotICAgICAgICAvLyAgIC0tIGNy
ZWF0ZSBhIENhbnZhczxUPkFycmF5IGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICJhcnIiCi0g
ICAgICAgIC8vIENhbnZhczxUPkFycmF5KGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpCi0gICAgICAgIC8v
ICAgLS0gY3JlYXRlIGEgQ2FudmFzPFQ+QXJyYXkgcG9pbnRpbmcgdG8gdGhlIENhbnZhc0FycmF5
QnVmZmVyCisgICAgICAgIC8vIFdlYkdMPFQ+QXJyYXkoYXJyKSB3aGVyZSBhcnIgaXMgYW4gYXJy
YXk6CisgICAgICAgIC8vICAgLS0gY3JlYXRlIGEgV2ViR0w8VD5BcnJheSBjb250YWluaW5nIHRo
ZSBjb250ZW50cyBvZiAiYXJyIgorICAgICAgICAvLyBXZWJHTDxUPkFycmF5KGJ1Ziwgb2Zmc2V0
LCBsZW5ndGgpCisgICAgICAgIC8vICAgLS0gY3JlYXRlIGEgV2ViR0w8VD5BcnJheSBwb2ludGlu
ZyB0byB0aGUgV2ViR0xBcnJheUJ1ZmZlcgogICAgICAgICAvLyAgICAgICJidWYiLCBzdGFydGlu
ZyBhdCB0aGUgc3BlY2lmaWVkIG9mZnNldCwgZm9yIHRoZSBnaXZlbgogICAgICAgICAvLyAgICAg
IGxlbmd0aAogCiAgICAgICAgIGlmIChhcmdMZW4gPT0gMCkKICAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKCJObyBhcmd1bWVudHMgc3BlY2lmaWVkIHRvIGNvbnN0cnVjdG9yIik7CiAKLSAg
ICAgICAgLy8gU2VlIHdoZXRoZXIgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgQ2FudmFzQXJyYXlC
dWZmZXIuCi0gICAgICAgIGlmIChWOENhbnZhc0FycmF5QnVmZmVyOjpIYXNJbnN0YW5jZShhcmdz
WzBdKSkgeworICAgICAgICAvLyBTZWUgd2hldGhlciB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBX
ZWJHTEFycmF5QnVmZmVyLgorICAgICAgICBpZiAoVjhXZWJHTEFycmF5QnVmZmVyOjpIYXNJbnN0
YW5jZShhcmdzWzBdKSkgewogICAgICAgICAgICAgaWYgKGFyZ0xlbiA+IDMpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgdG8gbmV3
IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVmZmVyLCBpbnQsIGludCkiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBu
ZXcgV2ViR0w8VD5BcnJheShXZWJHTEFycmF5QnVmZmVyLCBpbnQsIGludCkiKTsKIAotICAgICAg
ICAgICAgQ2FudmFzQXJyYXlCdWZmZXIqIGJ1ZiA9Ci0gICAgICAgICAgICAgICAgVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJyYXlCdWZmZXI+KFY4Q2xhc3NJbmRl
eDo6Q0FOVkFTQVJSQVlCVUZGRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMF0tPlRvT2JqZWN0KCkp
OworICAgICAgICAgICAgV2ViR0xBcnJheUJ1ZmZlciogYnVmID0KKyAgICAgICAgICAgICAgICBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEFycmF5QnVmZmVyPihWOENs
YXNzSW5kZXg6OldFQkdMQVJSQVlCVUZGRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXS0+VG9PYmpl
Y3QoKSk7CiAgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IDAgdG8gYSBDYW52YXNB
cnJheUJ1ZmZlciIpOworICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJDb3VsZCBu
b3QgY29udmVydCBhcmd1bWVudCAwIHRvIGEgV2ViR0xBcnJheUJ1ZmZlciIpOwogICAgICAgICAg
ICAgYm9vbCBvazsKICAgICAgICAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICAgICAgICAgaWYg
KGFyZ0xlbiA+IDEpIHsKQEAgLTkxLDcgKzkxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4gYXJyYXkgPSBBcnJheUNsYXNzOjpjcmVhdGUo
YnVmLCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICBpZiAoYXJyYXkgPT0gTlVMTCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbmV3
IENhbnZhczxUPkFycmF5KENhbnZhc0FycmF5QnVmZmVyLCBpbnQsIGludCkiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gbmV3IFdlYkdM
PFQ+QXJyYXkoV2ViR0xBcnJheUJ1ZmZlciwgaW50LCBpbnQpIik7CiAgICAgICAgICAgICAvLyBU
cmFuc2Zvcm0gdGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRoZSBhcnJheS4K
ICAgICAgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBj
bGFzc0luZGV4LCBhcnJheS5nZXQoKSk7CiAgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldElu
ZGV4ZWRQcm9wZXJ0aWVzVG9FeHRlcm5hbEFycmF5KGFyZ3MuSG9sZGVyKCksCkBAIC0xMDQsNyAr
MTA0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBpbnQgbGVuID0gMDsKICAgICAg
ICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHNyY0FycmF5OwogICAgICAgICBpZiAoYXJnTGVuICE9
IDEpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyB0byBuZXcgQ2FudmFzPFQ+QXJyYXkoaW50IC8gYXJyYXkpIik7CisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcigiV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBuZXcgV2ViR0w8
VD5BcnJheShpbnQgLyBhcnJheSkiKTsKIAogICAgICAgICBpZiAoYXJnc1swXS0+SXNJbnQzMigp
KSB7CiAgICAgICAgICAgICBsZW4gPSB0b0ludDMyKGFyZ3NbMF0pOwpAQCAtMTE4LDcgKzExOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBSZWZQdHI8QXJyYXlDbGFzcz4gYXJy
YXkgPSBBcnJheUNsYXNzOjpjcmVhdGUobGVuKTsKICAgICAgICAgaWYgKCFzcmNBcnJheS5Jc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIC8vIE5lZWQgdG8gY29weSB0aGUgaW5jb21pbmcgYXJyYXkg
aW50byB0aGUgbmV3bHkgY3JlYXRlZCBDYW52YXNBcnJheS4KKyAgICAgICAgICAgIC8vIE5lZWQg
dG8gY29weSB0aGUgaW5jb21pbmcgYXJyYXkgaW50byB0aGUgbmV3bHkgY3JlYXRlZCBXZWJHTEFy
cmF5LgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAg
ICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IHNyY0FycmF5LT5HZXQodjg6Oklu
dGVnZXI6Ok5ldyhpKSk7CiAgICAgICAgICAgICAgICAgaWYgKCF2YWwtPklzTnVtYmVyKCkpIHsK
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRlQXJyYXlDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xCeXRl
QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYwMSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhDYW52YXNCeXRlQXJyYXlDdXN0b20uY3BwOjUwNjAxKQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZh
c0J5dGVBcnJheS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc0J5dGVBcnJheUNvbnN0cnVj
dG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5Db250cnVjdG9yIik7
CisKKyAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzQnl0ZUFycmF5Pihhcmdz
LCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQllURUFSUkFZKSk7Cit9
CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGJ5dGUgYnVmZmVyIGFuZCBy
ZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNj
ZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYnl0ZSBidWZmZXIgcmFuZ2UgcmV0dXJuICJ1bmRlZmlu
ZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzQnl0ZUFycmF5KQoreworICAgIElO
Q19TVEFUUygiRE9NLkNhbnZhc0J5dGVBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAg
ICBDYW52YXNCeXRlQXJyYXkqIGJ5dGVCdWZmZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxDYW52YXNCeXRlQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQllURUFSUkFZ
LCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYnl0
ZUJ1ZmZlci0+bGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAg
IHNpZ25lZCBjaGFyIHJlc3VsdDsKKyAgICBpZiAoIWJ5dGVCdWZmZXItPmdldChpbmRleCwgcmVz
dWx0KSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdjg6Ok51
bWJlcjo6TmV3KHJlc3VsdCk7Cit9CisKKy8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRo
ZSBieXRlIGJ1ZmZlci4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYnl0ZSBidWZmZXIgcmFu
Z2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNC
eXRlQXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzQnl0ZUFycmF5LkluZGV4ZWRQ
cm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc0J5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNCeXRlQXJyYXk+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPj0gMCkg
JiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZhbHVlLT5Jc051
bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0
IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7CisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgs
IHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEJ5dGVBcnJh
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjAxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTEJ5dGVBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI5ICsz
MiwyOSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5
QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xB
cnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQnl0ZUFycmF5LmgiCiAKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAi
VjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4V2ViR0xBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlY4V2ViR0xBcnJheUN1c3RvbS5oIgogI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQUxM
QkFDS19GVU5DX0RFQ0woQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IpCitDQUxMQkFDS19GVU5D
X0RFQ0woV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3RvcikKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5D
YW52YXNCeXRlQXJyYXkuQ29udHJ1Y3RvciIpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0
ZUFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxD
YW52YXNCeXRlQXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpD
QU5WQVNCWVRFQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTEJ5
dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMQllU
RUFSUkFZKSk7CiB9CiAKIC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGJ5dGUg
YnVmZmVyIGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVj
dCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYnl0ZSBidWZmZXIgcmFuZ2UgcmV0
dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzQnl0ZUFycmF5
KQorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xCeXRlQXJyYXkpCiB7Ci0gICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIENh
bnZhc0J5dGVBcnJheSogYnl0ZUJ1ZmZlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENhbnZhc0J5dGVBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNCWVRFQVJSQVksIGlu
Zm8uSG9sZGVyKCkpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMQnl0ZUFycmF5LkluZGV4ZWRQ
cm9wZXJ0eUdldHRlciIpOworICAgIFdlYkdMQnl0ZUFycmF5KiBieXRlQnVmZmVyID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xCeXRlQXJyYXk+KFY4Q2xhc3NJbmRl
eDo6V0VCR0xCWVRFQVJSQVksIGluZm8uSG9sZGVyKCkpOwogCiAgICAgaWYgKChpbmRleCA8IDAp
IHx8IChpbmRleCA+PSBieXRlQnVmZmVyLT5sZW5ndGgoKSkpCiAgICAgICAgIHJldHVybiB2ODo6
VW5kZWZpbmVkKCk7CkBAIC02NSwxMCArNjUsMTAgQEAgSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIo
Q2FudmFzQnl0ZUFycmF5KQogfQogCiAvLyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUg
Ynl0ZSBidWZmZXIuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIGJ5dGUgYnVmZmVyIHJhbmdl
IGFyZSBzaWxlbnRseSBpZ25vcmVkLgotSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoQ2FudmFzQnl0
ZUFycmF5KQorSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xCeXRlQXJyYXkpCiB7Ci0gICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOwot
ICAgIENhbnZhc0J5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDYW52YXNCeXRlQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQllURUFSUkFZLCBp
bmZvLkhvbGRlcigpKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEJ5dGVBcnJheS5JbmRleGVk
UHJvcGVydHlTZXR0ZXIiKTsKKyAgICBXZWJHTEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEJ5dGVBcnJheT4oVjhDbGFzc0luZGV4OjpX
RUJHTEJZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoKGluZGV4ID49IDApICYm
IChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKICAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1i
ZXIoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5
Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMRmxvYXRBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjAxKQkoZnJvbSBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc0Zsb2F0QXJyYXlDdXN0b20uY3BwOjUwNjAxKQorKysg
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNs
dWRlICJDYW52YXNGbG9hdEFycmF5LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNs
dWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3Rv
bS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUgIlY4UHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0Zsb2F0QXJyYXku
Q29udHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0Zs
b2F0QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNG
TE9BVEFSUkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFy
cmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0
byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRl
ZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSkKK3sKKyAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIp
OworICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFS
UkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0g
YXJyYXktPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICBm
bG9hdCByZXN1bHQ7CisgICAgaWYgKCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVz
dWx0KTsKK30KKworLy8gU2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nl
c3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4K
K0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkpCit7CisgICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzRmxvYXRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBD
YW52YXNGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgaW5m
by5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5s
ZW5ndGgoKSkpCisgICAgICAgIGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgp
KTsKKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMRmxvYXRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYw
MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xGbG9hdEFycmF5Q3VzdG9t
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjkgKzMyLDI5IEBACiAKICNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQogCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52
YXNGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUg
IldlYkdMRmxvYXRBcnJheS5oIgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAi
VjhDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIK
KyNpbmNsdWRlICJWOFdlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOFdlYkdMQXJyYXlD
dXN0b20uaCIKICNpbmNsdWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc0Zs
b2F0QXJyYXlDb25zdHJ1Y3RvcikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTEZsb2F0QXJyYXlD
b25zdHJ1Y3RvcikKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5LkNvbnRy
dWN0b3IiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEZsb2F0QXJyYXkuQ29udHJ1Y3RvciIp
OwogCi0gICAgcmV0dXJuIGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc0Zsb2F0QXJyYXk+KGFy
Z3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZKSk7
CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xGbG9hdEFycmF5PihhcmdzLCBW
OENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xGTE9BVEFSUkFZKSk7CiB9CiAK
IC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQg
d3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0
c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgotSU5ERVhFRF9Q
Uk9QRVJUWV9HRVRURVIoQ2FudmFzRmxvYXRBcnJheSkKK0lOREVYRURfUFJPUEVSVFlfR0VUVEVS
KFdlYkdMRmxvYXRBcnJheSkKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNGbG9hdEFycmF5
LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIENhbnZhc0Zsb2F0QXJyYXkqIGFycmF5ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzRmxvYXRBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNGTE9BVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKyAgICBJTkNfU1RB
VFMoIkRPTS5XZWJHTEZsb2F0QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgV2Vi
R0xGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFdlYkdMRmxvYXRBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTEZMT0FUQVJSQVksIGluZm8uSG9s
ZGVyKCkpOwogCiAgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3Ro
KCkpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNjUsMTAgKzY1LDEwIEBA
IElOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0Zsb2F0QXJyYXkKIH0KIAogLy8gU2V0IHRo
ZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxp
ZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlfU0VU
VEVSKENhbnZhc0Zsb2F0QXJyYXkpCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTEZsb2F0
QXJyYXkpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzRmxvYXRBcnJheS5JbmRleGVkUHJv
cGVydHlTZXR0ZXIiKTsKLSAgICBDYW52YXNGbG9hdEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTRkxPQVRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisgICAgSU5DX1NUQVRTKCJET00uV2Vi
R0xGbG9hdEFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIFdlYkdMRmxvYXRBcnJh
eSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEZsb2F0
QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xGTE9BVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKIAog
ICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkKICAgICAg
ICAgYXJyYXktPnNldChpbmRleCwgdmFsdWUtPk51bWJlclZhbHVlKCkpOwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3Bw
CShyZXZpc2lvbiA1MDYwMSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNJbnRBcnJheUN1c3RvbS5jcHA6NTA2MDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVk
ZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgorCisj
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOEN1c3RvbUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ0FM
TEJBQ0tfRlVOQ19ERUNMKENhbnZhc0ludEFycmF5Q29uc3RydWN0b3IpCit7CisgICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzSW50QXJyYXkuQ29udHJ1Y3RvciIpOworCisgICAgcmV0dXJuIGNvbnN0
cnVjdENhbnZhc0FycmF5PENhbnZhc0ludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVkpKTsKK30KKworLy8gR2V0IHRoZSBzcGVjaWZp
ZWQgdmFsdWUgZnJvbSB0aGUgaW50ZWdlciBhcnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMg
YSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIHBpeGVsIGJ1ZmZlciByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihDYW52YXNJbnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNJ
bnRBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBDYW52YXNJbnRBcnJheSogYXJy
YXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNJbnRBcnJheT4o
VjhDbGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAo
KGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCisgICAgICAgIHJldHVy
biB2ODo6VW5kZWZpbmVkKCk7CisgICAgaW50IHJlc3VsdDsKKyAgICBpZiAoIWFycmF5LT5nZXQo
aW5kZXgsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0
dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQgdGhlIHNwZWNpZmllZCB2
YWx1ZSBpbiB0aGUgaW50ZWdlciBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgaW50
ZWdlciBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlf
U0VUVEVSKENhbnZhc0ludEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc0ludEFy
cmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc0ludEFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0ludEFycmF5PihWOENs
YXNzSW5kZXg6OkNBTlZBU0lOVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlmICgoaW5k
ZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAgICBpZiAoIXZh
bHVlLT5Jc051bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNvdWxkIG5v
dCBjb252ZXJ0IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7CisgICAgICAgIGFycmF5LT5z
ZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FO
VkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEludEFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
SW50QXJyYXlDdXN0b20uY3BwCShyZXZpc2lvbiA1MDYwMSkKKysrIFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xJbnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDI5ICszMiwyOSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZh
c0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlICJX
ZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgogCiAjaW5jbHVk
ZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1
ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNsdWRlICJWOFdlYkdMQXJyYXlCdWZmZXIu
aCIKKyNpbmNsdWRlICJWOFdlYkdMQXJyYXlDdXN0b20uaCIKICNpbmNsdWRlICJWOEN1c3RvbUJp
bmRpbmcuaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Q0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc0ludEFycmF5Q29uc3RydWN0b3IpCitDQUxMQkFDS19G
VU5DX0RFQ0woV2ViR0xJbnRBcnJheUNvbnN0cnVjdG9yKQogewotICAgIElOQ19TVEFUUygiRE9N
LkNhbnZhc0ludEFycmF5LkNvbnRydWN0b3IiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTElu
dEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxD
YW52YXNJbnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNB
TlZBU0lOVEFSUkFZKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdFdlYkdMQXJyYXk8V2ViR0xJbnRB
cnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJS
QVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgaW50ZWdlciBh
cnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3Qg
dG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIHBpeGVsIGJ1ZmZlciByYW5nZSByZXR1
cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNJbnRBcnJheSkK
K0lOREVYRURfUFJPUEVSVFlfR0VUVEVSKFdlYkdMSW50QXJyYXkpCiB7Ci0gICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgQ2FudmFz
SW50QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2Fu
dmFzSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGluZm8uSG9sZGVyKCkp
OworICAgIElOQ19TVEFUUygiRE9NLldlYkdMSW50QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVy
Iik7CisgICAgV2ViR0xJbnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTEludEFycmF5PihWOENsYXNzSW5kZXg6OldFQkdMSU5UQVJSQVksIGlu
Zm8uSG9sZGVyKCkpOwogCiAgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+
bGVuZ3RoKCkpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNjUsMTAgKzY1
LDEwIEBAIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc0ludEFycmF5KQogfQogCiAvLyBT
ZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgaW50ZWdlciBhcnJheS4gQWNjZXNzZXMgb3V0
c2lkZSB0aGUgdmFsaWQgaW50ZWdlciBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4K
LUlOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc0ludEFycmF5KQorSU5ERVhFRF9QUk9QRVJU
WV9TRVRURVIoV2ViR0xJbnRBcnJheSkKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNJbnRB
cnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBDYW52YXNJbnRBcnJheSogYXJyYXkg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNJbnRBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisgICAgSU5DX1NUQVRT
KCJET00uV2ViR0xJbnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBXZWJHTElu
dEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdM
SW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAK
ICAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKICAg
ICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAJKHJldmlzaW9uIDUwNjAxKQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzREN1c3RvbS5jcHA6NTA2MDEpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisK
KyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2luY2x1ZGUgIlY4QmluZGluZy5o
IgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc0J5dGVBcnJh
eS5oIgorI2luY2x1ZGUgIlY4Q2FudmFzRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIlY4Q2FudmFz
SW50QXJyYXkuaCIKKyNpbmNsdWRlICJWOENhbnZhc1Nob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJW
OENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZElu
dEFycmF5LmgiCisjaW5jbHVkZSAiVjhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaCIKKyNpbmNs
dWRlICJWOEhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworLy8gQWxsb2NhdGVzIG5ldyBzdG9yYWdlIHZpYSB0cnlGYXN0TWFs
bG9jLgorLy8gUmV0dXJucyBOVUxMIGlmIGFycmF5IGZhaWxlZCB0byBjb252ZXJ0IGZvciBhbnkg
cmVhc29uLgorc3RhdGljIGZsb2F0KiBqc0FycmF5VG9GbG9hdEFycmF5KHY4OjpIYW5kbGU8djg6
OkFycmF5PiBhcnJheSwgdWludDMyX3QgbGVuKQoreworICAgIC8vIENvbnZlcnQgdGhlIGRhdGEg
ZWxlbWVudC1ieS1lbGVtZW50LgorICAgIGZsb2F0KiBkYXRhOworICAgIGlmICghdHJ5RmFzdE1h
bGxvYyhsZW4gKiBzaXplb2YoZmxvYXQpKS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IGFycmF5LT5HZXQodjg6OkludGVnZXI6Ok5ldyhpKSk7
CisgICAgICAgIGlmICghdmFsLT5Jc051bWJlcigpKSB7CisgICAgICAgICAgICBmYXN0RnJlZShk
YXRhKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGRhdGFbaV0g
PSB0b0Zsb2F0KHZhbCk7CisgICAgfQorICAgIHJldHVybiBkYXRhOworfQorCisvLyBBbGxvY2F0
ZXMgbmV3IHN0b3JhZ2UgdmlhIHRyeUZhc3RNYWxsb2MuCisvLyBSZXR1cm5zIE5VTEwgaWYgYXJy
YXkgZmFpbGVkIHRvIGNvbnZlcnQgZm9yIGFueSByZWFzb24uCitzdGF0aWMgaW50KiBqc0FycmF5
VG9JbnRBcnJheSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIHVpbnQzMl90IGxlbikKK3sK
KyAgICAvLyBDb252ZXJ0IHRoZSBkYXRhIGVsZW1lbnQtYnktZWxlbWVudC4KKyAgICBpbnQqIGRh
dGE7CisgICAgaWYgKCF0cnlGYXN0TWFsbG9jKGxlbiAqIHNpemVvZihpbnQpKS5nZXRWYWx1ZShk
YXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbCA9IGFycmF5LT5HZXQo
djg6OkludGVnZXI6Ok5ldyhpKSk7CisgICAgICAgIGJvb2wgb2s7CisgICAgICAgIGludCBpdmFs
ID0gdG9JbnQzMih2YWwsIG9rKTsKKyAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAgZmFz
dEZyZWUoZGF0YSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBk
YXRhW2ldID0gaXZhbDsKKyAgICB9CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK0NBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RCdWZmZXJEYXRhKQoreworICAgIElOQ19T
VEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5idWZmZXJEYXRhKCkiKTsKKworICAg
IC8vIEZvcm1zOgorICAgIC8vICogYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBDYW52YXNBcnJh
eSBkYXRhLCBHTGVudW0gdXNhZ2UpOworICAgIC8vICAgLSBTZXRzIHRoZSBidWZmZXIncyBkYXRh
IGZyb20gdGhlIGdpdmVuIENhbnZhc0FycmF5CisgICAgLy8gKiBidWZmZXJEYXRhKEdMZW51bSB0
YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsKKyAgICAvLyAgIC0gU2V0cyB0
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIHRoZSBnaXZlbiBzaXplIGluIGJ5dGVzCisgICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgIT0gMykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24o
U1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwor
ICAgIH0KKworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAg
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkpOworICAgIGJvb2wgb2s7CisgICAgaW50IHRhcmdldCA9
IHRvSW50MzIoYXJnc1swXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaW50IHVzYWdlID0gdG9JbnQzMihhcmdzWzJdLCBv
ayk7CisgICAgaWYgKCFvaykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lO
VEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAg
IH0KKyAgICBpZiAoYXJnc1sxXS0+SXNJbnQzMigpKSB7CisgICAgICAgIGludCBzaXplID0gdG9J
bnQzMihhcmdzWzFdKTsKKyAgICAgICAgY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUs
IHVzYWdlKTsKKyAgICB9IGVsc2UgaWYgKFY4Q2FudmFzQXJyYXk6Okhhc0luc3RhbmNlKGFyZ3Nb
MV0pKSB7CisgICAgICAgIENhbnZhc0FycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENhbnZhc0FycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZLCBh
cmdzWzFdLT5Ub09iamVjdCgpKTsKKyAgICAgICAgY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQs
IGFycmF5LCB1c2FnZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhj
ZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0
b3IoKTsKKyAgICB9CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzREJ1ZmZlclN1YkRhdGEpCit7CisgICAg
SU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmJ1ZmZlclN1YkRhdGEoKSIp
OworCisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgQ2FudmFzQXJyYXkgZGF0YSk7CisgICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgIT0gMykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAgIFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFy
Z3MuSG9sZGVyKCkpOworICAgIGJvb2wgb2s7CisgICAgaW50IHRhcmdldCA9IHRvSW50MzIoYXJn
c1swXSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3Io
KTsKKyAgICB9CisgICAgaW50IG9mZnNldCA9IHRvSW50MzIoYXJnc1sxXSwgb2spOworICAgIGlm
ICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwor
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgaWYg
KCFWOENhbnZhc0FycmF5OjpIYXNJbnN0YW5jZShhcmdzWzJdKSkgeworICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4OjpD
QU5WQVNBUlJBWSwgYXJnc1syXS0+VG9PYmplY3QoKSk7CisgICAgY29udGV4dC0+YnVmZmVyU3Vi
RGF0YSh0YXJnZXQsIG9mZnNldCwgYXJyYXkpOworICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7
Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RUZXhJbWFn
ZTJEKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC50ZXhJ
bWFnZTJEKCkiKTsKKworICAgIC8vIEN1cnJlbnRseSBzdXBwb3J0ZWQgZm9ybXM6CisgICAgLy8g
KiB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsCisgICAg
Ly8gICAgICAgICAgICAgICAgICAgaW4gR0xpbnQgaW50ZXJuYWxmb3JtYXQsCisgICAgLy8gICAg
ICAgICAgICAgICAgICAgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIGluIEdM
aW50IGJvcmRlciwKKyAgICAvLyAgICAgICAgICAgICAgICAgICBpbiBHTGVudW0gZm9ybWF0LCBp
biBHTGVudW0gdHlwZSwgaW4gQ2FudmFzQXJyYXkgcGl4ZWxzKTsKKyAgICAvLyAqIHZvaWQgdGV4
SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gSFRNTEltYWdlRWxl
bWVudCBpbWFnZSwKKyAgICAvLyAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIGluIEdMYm9v
bGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gcHJlbXVsdGlwbHlBbHBoYSk7Cisg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMyAmJgorICAgICAgICBhcmdzLkxlbmd0aCgpICE9IDQg
JiYKKyAgICAgICAgYXJncy5MZW5ndGgoKSAhPSA1ICYmCisgICAgICAgIGFyZ3MuTGVuZ3RoKCkg
IT0gOSkgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7Cisg
ICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAgIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAgIFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3Mu
SG9sZGVyKCkpOworICAgIGJvb2wgb2s7CisgICAgaW50IHRhcmdldCA9IHRvSW50MzIoYXJnc1sw
XSwgb2spOworICAgIGlmICghb2spIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
KyAgICB9CisgICAgaW50IGxldmVsID0gdG9JbnQzMihhcmdzWzFdLCBvayk7CisgICAgaWYgKCFv
aykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAg
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgpID09IDMgfHwKKyAgICAgICAg
YXJncy5MZW5ndGgoKSA9PSA0IHx8CisgICAgICAgIGFyZ3MuTGVuZ3RoKCkgPT0gNSkgeworICAg
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1syXTsKKyAgICAgICAgaWYgKFY4
SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJnKSkgeworICAgICAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChh
cmcpKTsKKyAgICAgICAgICAgIGJvb2wgZmxpcFkgPSBmYWxzZTsKKyAgICAgICAgICAgIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgICAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
Pj0gNCkKKyAgICAgICAgICAgICAgICBmbGlwWSA9IGFyZ3NbM10tPkJvb2xlYW5WYWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPj0gNSkKKyAgICAgICAgICAgICAgICBwcmVt
dWx0aXBseUFscGhhID0gYXJnc1s0XS0+Qm9vbGVhblZhbHVlKCk7CisgICAgICAgICAgICBjb250
ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGltYWdlX2VsZW1lbnQsIGZsaXBZLCBwcmVt
dWx0aXBseUFscGhhLCBlYyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2VwdGlvbiB0eXBlLgorICAgICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gRmFs
bCB0aHJvdWdoCisgICAgfSBlbHNlIGlmIChhcmdzLkxlbmd0aCgpID09IDkpIHsKKyAgICAgICAg
aW50IGludGVybmFsZm9ybWF0ID0gdG9JbnQzMihhcmdzWzJdLCBvayk7CisgICAgICAgIGlmICgh
b2spIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsK
KyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAgICB9
CisgICAgICAgIGludCB3aWR0aCA9IHRvSW50MzIoYXJnc1szXSwgb2spOworICAgICAgICBpZiAo
IW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAg
fQorICAgICAgICBpbnQgaGVpZ2h0ID0gdG9JbnQzMihhcmdzWzRdLCBvayk7CisgICAgICAgIGlm
ICghb2spIHsKKyAgICAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJS
KTsKKyAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgICAg
ICB9CisgICAgICAgIGludCBib3JkZXIgPSB0b0ludDMyKGFyZ3NbNV0sIG9rKTsKKyAgICAgICAg
aWYgKCFvaykgeworICAgICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9F
UlIpOworICAgICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaW50IGZvcm1hdCA9IHRvSW50MzIoYXJnc1s2XSwgb2spOworICAgICAg
ICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgdHlwZSA9IHRvSW50MzIoYXJnc1s3XSwgb2spOworICAgICAg
ICBpZiAoIW9rKSB7CisgICAgICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAg
ICAgICAgfQorICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJnID0gYXJnc1s4XTsKKyAg
ICAgICAgaWYgKFY4Q2FudmFzQXJyYXk6Okhhc0luc3RhbmNlKGFyZykpIHsKKyAgICAgICAgICAg
IENhbnZhc0FycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc0FycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0FSUkFZLCBhcmctPlRvT2JqZWN0KCkp
OworICAgICAgICAgICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlvbiBzaW1pbGFyIHRvIEpP
R0wncyB0byBlbnN1cmUgdGhhdAorICAgICAgICAgICAgLy8gdGhlIGluY29taW5nIGFycmF5IGlz
IG9mIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGggYW5kIHR5cGUKKyAgICAgICAgICAgIGNvbnRleHQt
PnRleEltYWdlMkQodGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWMpOworICAgICAgICAg
ICAgLy8gRmFsbCB0aHJvdWdoCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgICAgICByZXR1cm4gbm90SGFu
ZGxlZEJ5SW50ZXJjZXB0b3IoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lO
VEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAg
IH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsK
KyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOworICAgIH0KKyAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEVGV4U3ViSW1hZ2UyRCkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QudGV4U3ViSW1hZ2UyRCgpIik7CisKKyAgICAvLyBGSVhNRTogaW1w
bGVtZW50CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIHJldHVybiB2ODo6VW5kZWZpbmVk
KCk7Cit9CisKK2VudW0gRnVuY3Rpb25Ub0NhbGwgeworICAgIGtVbmlmb3JtMXYsIGtVbmlmb3Jt
MnYsIGtVbmlmb3JtM3YsIGtVbmlmb3JtNHYsCisgICAga1ZlcnRleEF0dHJpYjF2LCBrVmVydGV4
QXR0cmliMnYsIGtWZXJ0ZXhBdHRyaWIzdiwga1ZlcnRleEF0dHJpYjR2Cit9OworCitzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVG9DYWxsIGZ1bmN0aW9uVG9DYWxsKSB7
CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24sIEFy
cmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNG
bG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMmZ2KEdMaW50IGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGludCBsb2NhdGlvbiwgQ2FudmFz
RmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTNmdihHTGludCBsb2NhdGlvbiwg
QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zZnYoR0xpbnQgbG9jYXRpb24sIENhbnZh
c0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00ZnYoR0xpbnQgbG9jYXRpb24s
IEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtNGZ2KEdMaW50IGxvY2F0aW9uLCBDYW52
YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9j
YXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9j
YXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFZlcnRleEF0dHJpYjJm
dihHTGludCBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVy
dGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVmVy
dGV4QXR0cmliM2Z2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOworICAg
IC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkg
ZGF0YSk7CisKKyAgICBpZiAoYXJncy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CisgICAgfQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBj
b250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZl
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsK
KyAgICBpbnQgbG9jYXRpb24gPSB0b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7
CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAgfQorICAgIGlmIChWOENhbnZh
c0Zsb2F0QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7CisgICAgICAgIENhbnZhc0Zsb2F0
QXJyYXkqIGFycmF5ID0gCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDYW52YXNGbG9hdEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0ZMT0FUQVJSQVks
IGFyZ3NbMV0tPlRvT2JqZWN0KCkpOworICAgICAgICBBU1NFUlQoYXJyYXkgIT0gTlVMTCk7Cisg
ICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZv
cm0xdjogY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAg
ICAgICAgIGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgYXJy
YXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1VuaWZvcm00
djogY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkpOyBicmVhazsKKyAgICAgICAg
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRp
b24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29u
dGV4dC0+dmVydGV4QXR0cmliMmZ2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBrVmVydGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlv
biwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250
ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpB
cnJheT4gYXJyYXkgPQorICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1sxXSk7
CisgICAgaWYgKGFycmF5LklzRW1wdHkoKSkgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNl
cHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOworICAgIH0KKyAgICB1aW50MzJfdCBsZW4gPSBhcnJheS0+TGVuZ3RoKCk7CisgICAgZmxv
YXQqIGRhdGEgPSBqc0FycmF5VG9GbG9hdEFycmF5KGFycmF5LCBsZW4pOworICAgIGlmICghZGF0
YSkgeworICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2Vw
dGlvbiB0eXBlLgorICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7
CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBz
d2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgICAgIGNhc2Uga1VuaWZvcm0xdjogY29udGV4
dC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Ug
a1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJl
YWs7CisgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlv
biwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1Zl
cnRleEF0dHJpYjF2OiBjb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYobG9jYXRpb24sIGRhdGEsIGxl
bik7IGJyZWFrOworICAgICAgICBjYXNlIGtWZXJ0ZXhBdHRyaWIydjogY29udGV4dC0+dmVydGV4
QXR0cmliMmZ2KGxvY2F0aW9uLCBkYXRhLCBsZW4pOyBicmVhazsKKyAgICAgICAgY2FzZSBrVmVy
dGV4QXR0cmliM3Y6IGNvbnRleHQtPnZlcnRleEF0dHJpYjNmdihsb2NhdGlvbiwgZGF0YSwgbGVu
KTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1ZlcnRleEF0dHJpYjR2OiBjb250ZXh0LT52ZXJ0ZXhB
dHRyaWI0ZnYobG9jYXRpb24sIGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBkZWZhdWx0OiBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsgYnJlYWs7CisgICAgfQorICAgIGZhc3RGcmVlKGRhdGEpOwor
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7Cit9CisKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gdW5pZm9ybUhlbHBlcmkoY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Ub0NhbGwgZnVuY3Rp
b25Ub0NhbGwpIHsKKyAgICAvLyBGb3JtczoKKyAgICAvLyAqIGdsVW5pZm9ybTFpdihHTGludCBs
b2NhdGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xaXYoR0xpbnQgbG9jYXRp
b24sIENhbnZhc0ludEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtMml2KEdMaW50IGxv
Y2F0aW9uLCBBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTJpdihHTGludCBsb2NhdGlv
biwgQ2FudmFzSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0zaXYoR0xpbnQgbG9j
YXRpb24sIEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtM2l2KEdMaW50IGxvY2F0aW9u
LCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTRpdihHTGludCBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm00aXYoR0xpbnQgbG9jYXRpb24s
IENhbnZhc0ludEFycmF5IGRhdGEpOworCisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMykgewor
ICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJl
dHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCogY29udGV4dCA9CisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkp
OworICAgIGJvb2wgb2s7CisgICAgaW50IGxvY2F0aW9uID0gdG9JbnQzMihhcmdzWzBdLCBvayk7
CisgICAgaWYgKCFvaykgeworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0K
KyAgICBpZiAoVjhDYW52YXNJbnRBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkpIHsKKyAgICAg
ICAgQ2FudmFzSW50QXJyYXkqIGFycmF5ID0gCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNJbnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNJ
TlRBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7CisgICAgICAgIEFTU0VSVChhcnJheSAhPSBO
VUxMKTsKKyAgICAgICAgc3dpdGNoIChmdW5jdGlvblRvQ2FsbCkgeworICAgICAgICAgICAgY2Fz
ZSBrVW5pZm9ybTF2OiBjb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFr
OworICAgICAgICAgICAgY2FzZSBrVW5pZm9ybTJ2OiBjb250ZXh0LT51bmlmb3JtMml2KGxvY2F0
aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBrVW5pZm9ybTN2OiBjb250ZXh0
LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBr
VW5pZm9ybTR2OiBjb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheSk7IGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgdjg6Okhh
bmRsZTx2ODo6QXJyYXk+IGFycmF5ID0KKyAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpDYXN0
KGFyZ3NbMV0pOworICAgIGlmIChhcnJheS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgVjhQcm94eTo6
c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5
SW50ZXJjZXB0b3IoKTsKKyAgICB9CisgICAgdWludDMyX3QgbGVuID0gYXJyYXktPkxlbmd0aCgp
OworICAgIGludCogZGF0YSA9IGpzQXJyYXlUb0ludEFycmF5KGFycmF5LCBsZW4pOworICAgIGlm
ICghZGF0YSkgeworICAgICAgICAvLyBGSVhNRTogY29uc2lkZXIgZGlmZmVyZW50IC8gYmV0dGVy
IGV4Y2VwdGlvbiB0eXBlLgorICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFY
X0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0K
KyAgICBzd2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CisgICAgICAgIGNhc2Uga1VuaWZvcm0xdjog
Y29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAg
IGNhc2Uga1VuaWZvcm0ydjogY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgZGF0YSwgbGVu
KTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1VuaWZvcm0zdjogY29udGV4dC0+dW5pZm9ybTNpdihs
b2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNhc2Uga1VuaWZvcm00djogY29u
dGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbiwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyBicmVhazsKKyAgICB9CisgICAgZmFzdEZyZWUo
ZGF0YSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0xZnYpCit7CisgICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0xZnYoKSIpOworICAgIHJldHVy
biB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVW5pZm9ybTF2KTsKK30KKwor
Q0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0xaXYpCit7
CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0xaXYo
KSIpOworICAgIHJldHVybiB1bmlmb3JtSGVscGVyaShhcmdzLCBrVW5pZm9ybTF2KTsKK30KKwor
Q0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm0yZnYpCit7
CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0yZnYo
KSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVW5p
Zm9ybTJ2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RFVuaWZvcm0yaXYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELnVuaWZvcm0yaXYoKSIpOworICAgIHJldHVybiB1bmlmb3JtSGVscGVyaShhcmdzLCBrVW5p
Zm9ybTJ2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RFVuaWZvcm0zZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELnVuaWZvcm0zZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVs
cGVyZihhcmdzLCBrVW5pZm9ybTN2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRFVuaWZvcm0zaXYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm0zaXYoKSIpOworICAgIHJldHVybiB1bmlmb3JtSGVs
cGVyaShhcmdzLCBrVW5pZm9ybTN2KTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRFVuaWZvcm00ZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm00ZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRy
aWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVW5pZm9ybTR2KTsKK30KKworQ0FMTEJBQ0tfRlVO
Q19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm00aXYpCit7CisgICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm00aXYoKSIpOworICAgIHJl
dHVybiB1bmlmb3JtSGVscGVyaShhcmdzLCBrVW5pZm9ybTR2KTsKK30KKworc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB1bmlmb3JtTWF0cml4SGVscGVyKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG1hdHJpeFNpemUpCit7CisgICAgLy8gRm9ybXM6CisgICAgLy8gKiBnbFVuaWZvcm1NYXRy
aXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFycmF5IGRhdGEpOwor
ICAgIC8vICogZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtTWF0cml4
M2Z2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBBcnJheSBkYXRhKTsKKyAg
ICAvLyAqIGdsVW5pZm9ybU1hdHJpeDNmdihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5z
cG9zZSwgQ2FudmFzRmxvYXRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybU1hdHJpeDRm
dihHTGludCBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgQXJyYXkgZGF0YSk7CisgICAg
Ly8gKiBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8KKyAgICAvLyBGSVhNRTogbmVlZCB0
byBjaGFuZ2UgdG8gYWNjZXB0IENhbnZhc0Zsb2F0QXJyYXkgYXMgd2VsbC4KKyAgICBpZiAoYXJn
cy5MZW5ndGgoKSAhPSAzKSB7CisgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihTWU5U
QVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CisgICAg
fQorCisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjb250ZXh0ID0KKyAgICAgICAgVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgYm9vbCBvazsKKyAgICBpbnQgbG9jYXRpb24gPSB0
b0ludDMyKGFyZ3NbMF0sIG9rKTsKKyAgICBpZiAoIW9rKSB7CisgICAgICAgIFY4UHJveHk6OnNl
dERPTUV4Y2VwdGlvbihTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUlu
dGVyY2VwdG9yKCk7CisgICAgfQorICAgIGJvb2wgdHJhbnNwb3NlID0gYXJnc1sxXS0+Qm9vbGVh
blZhbHVlKCk7CisgICAgaWYgKFY4Q2FudmFzRmxvYXRBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1sy
XSkpIHsKKyAgICAgICAgQ2FudmFzRmxvYXRBcnJheSogYXJyYXkgPSAKKyAgICAgICAgICAgIFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xh
c3NJbmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgYXJnc1syXS0+VG9PYmplY3QoKSk7CisgICAgICAg
IEFTU0VSVChhcnJheSAhPSBOVUxMKTsKKyAgICAgICAgc3dpdGNoIChtYXRyaXhTaXplKSB7Cisg
ICAgICAgICAgICBjYXNlIDI6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRy
YW5zcG9zZSwgYXJyYXkpOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMzogY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheSk7IGJyZWFrOworICAgICAg
ICAgICAgY2FzZSA0OiBjb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIGFycmF5KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
KyAgICB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXkgPQorICAgICAgdjg6Okxv
Y2FsPHY4OjpBcnJheT46OkNhc3QoYXJnc1syXSk7CisgICAgaWYgKGFycmF5LklzRW1wdHkoKSkg
eworICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAg
IHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICB1aW50MzJfdCBs
ZW4gPSBhcnJheS0+TGVuZ3RoKCk7CisgICAgZmxvYXQqIGRhdGEgPSBqc0FycmF5VG9GbG9hdEFy
cmF5KGFycmF5LCBsZW4pOworICAgIGlmICghZGF0YSkgeworICAgICAgICAvLyBGSVhNRTogY29u
c2lkZXIgZGlmZmVyZW50IC8gYmV0dGVyIGV4Y2VwdGlvbiB0eXBlLgorICAgICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VSUik7CisgICAgICAgIHJldHVybiBub3RIYW5kbGVk
QnlJbnRlcmNlcHRvcigpOworICAgIH0KKyAgICBzd2l0Y2ggKG1hdHJpeFNpemUpIHsKKyAgICAg
ICAgY2FzZSAyOiBjb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IGRhdGEsIGxlbik7IGJyZWFrOworICAgICAgICBjYXNlIDM6IGNvbnRleHQtPnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgZGF0YSwgbGVuKTsgYnJlYWs7CisgICAgICAgIGNh
c2UgNDogY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBkYXRh
LCBsZW4pOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogQVNTRVJUX05PVF9SRUFDSEVEKCk7IGJy
ZWFrOworICAgIH0KKyAgICBmYXN0RnJlZShkYXRhKTsKKyAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5p
Zm9ybU1hdHJpeDJmdikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QudW5pZm9ybU1hdHJpeDJmdigpIik7CisgICAgcmV0dXJuIHVuaWZvcm1NYXRyaXhIZWxw
ZXIoYXJncywgMik7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4M2Z2KCkiKTsKKyAgICByZXR1cm4gdW5pZm9ybU1h
dHJpeEhlbHBlcihhcmdzLCAzKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRFVuaWZvcm1NYXRyaXg0ZnYpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm1NYXRyaXg0ZnYoKSIpOworICAgIHJldHVybiB1
bmlmb3JtTWF0cml4SGVscGVyKGFyZ3MsIDQpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliMWZ2KQoreworICAgIElOQ19TVEFUUygi
RE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhBdHRyaWIxZnYoKSIpOworICAgIHJl
dHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliMXYp
OworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4
QXR0cmliMmZ2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC52ZXJ0ZXhBdHRyaWIyZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3Jt
SGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliMnYpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0wo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4QXR0cmliM2Z2KQoreworICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhBdHRyaWIzZnYoKSIpOworICAg
IHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmli
M3YpOworfQorCitDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVy
dGV4QXR0cmliNGZ2KQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC52ZXJ0ZXhBdHRyaWI0ZnYoKSIpOworICAgIHJldHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlm
b3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliNHYpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDcgKzMyLDcgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
IAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKIApAQCAtNDEsMTQgKzQxLDkgQEAKICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiVjhDYW52YXNBcnJheS5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQnl0ZUFycmF5LmgiCi0jaW5j
bHVkZSAiVjhDYW52YXNGbG9hdEFycmF5LmgiCi0jaW5jbHVkZSAiVjhDYW52YXNJbnRBcnJheS5o
IgotI2luY2x1ZGUgIlY4Q2FudmFzU2hvcnRBcnJheS5oIgotI2luY2x1ZGUgIlY4Q2FudmFzVW5z
aWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIK
LSNpbmNsdWRlICJWOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5oIgorI2luY2x1ZGUgIlY4V2Vi
R0xBcnJheS5oIgorI2luY2x1ZGUgIlY4V2ViR0xGbG9hdEFycmF5LmgiCisjaW5jbHVkZSAiVjhX
ZWJHTEludEFycmF5LmgiCiAjaW5jbHVkZSAiVjhIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogCkBAIC05NCwxMyArODksMTMgQEAgc3RhdGljIGludCoganNBcnJheVRv
SW50QXJyYXkodjg6OkhhbmRsZQogICAgIHJldHVybiBkYXRhOwogfQogCi1DQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQnVmZmVyRGF0YSkKK0NBTExCQUNLX0ZVTkNf
REVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRCdWZmZXJEYXRhKQogewotICAgIElOQ19TVEFUUygi
RE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5idWZmZXJEYXRhKCkiKTsKKyAgICBJTkNfU1RB
VFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQuYnVmZmVyRGF0YSgpIik7CiAKICAgICAvLyBG
b3JtczoKLSAgICAvLyAqIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQ2FudmFzQXJyYXkgZGF0
YSwgR0xlbnVtIHVzYWdlKTsKLSAgICAvLyAgIC0gU2V0cyB0aGUgYnVmZmVyJ3MgZGF0YSBmcm9t
IHRoZSBnaXZlbiBDYW52YXNBcnJheQorICAgIC8vICogYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0
LCBXZWJHTEFycmF5IGRhdGEsIEdMZW51bSB1c2FnZSk7CisgICAgLy8gICAtIFNldHMgdGhlIGJ1
ZmZlcidzIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gV2ViR0xBcnJheQogICAgIC8vICogYnVmZmVyRGF0
YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7CiAgICAgLy8g
ICAtIFNldHMgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciB0byB0aGUgZ2l2ZW4gc2l6ZSBpbiBieXRl
cwogICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKQEAgLTEwOCw4ICsxMDMsOCBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgICAgIHJldHVybiBub3RI
YW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+KGFyZ3MuSG9sZGVyKCkpOworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9CisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVy
KCkpOwogICAgIGJvb2wgb2s7CiAgICAgaW50IHRhcmdldCA9IHRvSW50MzIoYXJnc1swXSwgb2sp
OwogICAgIGlmICghb2spIHsKQEAgLTEyNCw4ICsxMTksOCBAQCBDQUxMQkFDS19GVU5DX0RFQ0wo
Q2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKGFyZ3NbMV0tPklzSW50MzIoKSkgewogICAg
ICAgICBpbnQgc2l6ZSA9IHRvSW50MzIoYXJnc1sxXSk7CiAgICAgICAgIGNvbnRleHQtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7Ci0gICAgfSBlbHNlIGlmIChWOENhbnZhc0FycmF5
OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgewotICAgICAgICBDYW52YXNBcnJheSogYXJyYXkgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNBcnJheT4oVjhDbGFzc0lu
ZGV4OjpDQU5WQVNBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7CisgICAgfSBlbHNlIGlmIChW
OFdlYkdMQXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7CisgICAgICAgIFdlYkdMQXJyYXkq
IGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xBcnJheT4o
VjhDbGFzc0luZGV4OjpXRUJHTEFSUkFZLCBhcmdzWzFdLT5Ub09iamVjdCgpKTsKICAgICAgICAg
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGFycmF5LCB1c2FnZSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwpAQCAtMTM0LDE5
ICsxMjksMTkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RCdWZmZXJTdWJEYXRhKQorQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJ1ZmZlclN1YkRhdGEpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmJ1ZmZlclN1YkRhdGEoKSIpOworICAgIElOQ19TVEFUUygi
RE9NLldlYkdMUmVuZGVyaW5nQ29udGV4dC5idWZmZXJTdWJEYXRhKCkiKTsKIAogICAgIC8vIEZv
cm1zOgotICAgIC8vICogYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIENhbnZhc0FycmF5IGRhdGEpOworICAgIC8vICogYnVmZmVyU3ViRGF0YShHTGVudW0gdGFy
Z2V0LCBHTGludHB0ciBvZmZzZXQsIFdlYkdMQXJyYXkgZGF0YSk7CiAgICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgIT0gMykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VS
Uik7CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAot
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9Ci0gICAgICAgIFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q+
KGFyZ3MuSG9sZGVyKCkpOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCA9Cisg
ICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxXZWJHTFJlbmRl
cmluZ0NvbnRleHQ+KGFyZ3MuSG9sZGVyKCkpOwogICAgIGJvb2wgb2s7CiAgICAgaW50IHRhcmdl
dCA9IHRvSW50MzIoYXJnc1swXSwgb2spOwogICAgIGlmICghb2spIHsKQEAgLTE1OCwyNCArMTUz
LDI0IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAg
VjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90
SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9Ci0gICAgaWYgKCFWOENhbnZhc0FycmF5OjpI
YXNJbnN0YW5jZShhcmdzWzJdKSkgeworICAgIGlmICghVjhXZWJHTEFycmF5OjpIYXNJbnN0YW5j
ZShhcmdzWzJdKSkgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oU1lOVEFYX0VS
Uik7CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KLSAg
ICBDYW52YXNBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxDYW52YXNBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNBUlJBWSwgYXJnc1syXS0+VG9PYmpl
Y3QoKSk7CisgICAgV2ViR0xBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTEFycmF5PihWOENsYXNzSW5kZXg6OldFQkdMQVJSQVksIGFyZ3NbMl0t
PlRvT2JqZWN0KCkpOwogICAgIGNvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQs
IGFycmF5KTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVGV4SW1hZ2UyRCkKK0NBTExCQUNLX0ZVTkNf
REVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRUZXhJbWFnZTJEKQogewotICAgIElOQ19TVEFUUygi
RE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC50ZXhJbWFnZTJEKCkiKTsKKyAgICBJTkNfU1RB
VFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudGV4SW1hZ2UyRCgpIik7CiAKICAgICAvLyBD
dXJyZW50bHkgc3VwcG9ydGVkIGZvcm1zOgogICAgIC8vICogdm9pZCB0ZXhJbWFnZTJEKGluIEdM
ZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLAogICAgIC8vICAgICAgICAgICAgICAgICAgIGlu
IEdMaW50IGludGVybmFsZm9ybWF0LAogICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMc2l6
ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCBpbiBHTGludCBib3JkZXIsCi0gICAgLy8gICAg
ICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIENhbnZh
c0FycmF5IHBpeGVscyk7CisgICAgLy8gICAgICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1h
dCwgaW4gR0xlbnVtIHR5cGUsIGluIFdlYkdMQXJyYXkgcGl4ZWxzKTsKICAgICAvLyAqIHZvaWQg
dGV4SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gSFRNTEltYWdl
RWxlbWVudCBpbWFnZSwKICAgICAvLyAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIGluIEdM
Ym9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gcHJlbXVsdGlwbHlBbHBoYSk7
CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgIT0gMyAmJgpAQCAtMTg2LDggKzE4MSw4IEBAIENBTExC
QUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgfQogCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0ID0KLSAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4oYXJncy5Ib2xkZXIoKSk7CisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0ID0KKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oYXJncy5Ib2xkZXIo
KSk7CiAgICAgYm9vbCBvazsKICAgICBpbnQgdGFyZ2V0ID0gdG9JbnQzMihhcmdzWzBdLCBvayk7
CiAgICAgaWYgKCFvaykgewpAQCAtMjUyLDggKzI0Nyw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChD
YW52YXNSZW5kZXJpbmdDb250ZXgKICAgICAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRl
cmNlcHRvcigpOwogICAgICAgICB9CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcg
PSBhcmdzWzhdOwotICAgICAgICBpZiAoVjhDYW52YXNBcnJheTo6SGFzSW5zdGFuY2UoYXJnKSkg
ewotICAgICAgICAgICAgQ2FudmFzQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8Q2FudmFzQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTQVJSQVksIGFy
Zy0+VG9PYmplY3QoKSk7CisgICAgICAgIGlmIChWOFdlYkdMQXJyYXk6Okhhc0luc3RhbmNlKGFy
ZykpIHsKKyAgICAgICAgICAgIFdlYkdMQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xBcnJheT4oVjhDbGFzc0luZGV4OjpXRUJHTEFSUkFZLCBh
cmctPlRvT2JqZWN0KCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IG11c3QgZG8gdmFsaWRhdGlv
biBzaW1pbGFyIHRvIEpPR0wncyB0byBlbnN1cmUgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGlu
Y29taW5nIGFycmF5IGlzIG9mIHRoZSBhcHByb3ByaWF0ZSBsZW5ndGggYW5kIHR5cGUKICAgICAg
ICAgICAgIGNvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LApAQCAtMjgzLDkgKzI3OCw5IEBAIENB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXgKICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEVGV4U3ViSW1hZ2UyRCkKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRUZXhTdWJJbWFnZTJEKQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRC50ZXhTdWJJbWFnZTJEKCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRl
cmluZ0NvbnRleHQudGV4U3ViSW1hZ2UyRCgpIik7CiAKICAgICAvLyBGSVhNRTogaW1wbGVtZW50
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTMwMiwzOCArMjk3LDM4IEBAIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmVydGV4QXR0cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25Ub0NhbGwgZnVuY3Rpb25U
b0NhbGwpIHsKICAgICAvLyBGb3JtczoKICAgICAvLyAqIGdsVW5pZm9ybTFmdihHTGludCBsb2Nh
dGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0xZnYoR0xpbnQgbG9jYXRpb24s
IENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0xZnYoR0xpbnQgbG9j
YXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAgICAvLyAqIGdsVW5pZm9ybTJmdihHTGlu
dCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yZnYoR0xpbnQgbG9j
YXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0yZnYoR0xp
bnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAgICAvLyAqIGdsVW5pZm9ybTNm
dihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0zZnYoR0xp
bnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZvcm0z
ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAgICAvLyAqIGdsVW5p
Zm9ybTRmdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm00
ZnYoR0xpbnQgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVu
aWZvcm00ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAgICAvLyAq
IGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAq
IGdsVmVydGV4QXR0cmliMWZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEp
OworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIxZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRB
cnJheSBkYXRhKTsKICAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxvY2F0aW9uLCBB
cnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmliMmZ2KEdMaW50IGxvY2F0aW9uLCBD
YW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWIyZnYoR0xpbnQg
bG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAgICAvLyAqIGdsVmVydGV4QXR0cmli
M2Z2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVmVydGV4QXR0cmli
M2Z2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xW
ZXJ0ZXhBdHRyaWIzZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSBkYXRhKTsKICAg
ICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAg
ICAvLyAqIGdsVmVydGV4QXR0cmliNGZ2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5
IGRhdGEpOworICAgIC8vICogZ2xWZXJ0ZXhBdHRyaWI0ZnYoR0xpbnQgbG9jYXRpb24sIFdlYkdM
RmxvYXRBcnJheSBkYXRhKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDMpIHsKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9CiAKLSAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QqIGNvbnRleHQgPQotICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFw
cGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6
OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2ViR0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhv
bGRlcigpKTsKICAgICBib29sIG9rOwogICAgIGludCBsb2NhdGlvbiA9IHRvSW50MzIoYXJnc1sw
XSwgb2spOwogICAgIGlmICghb2spIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
ICAgICB9Ci0gICAgaWYgKFY4Q2FudmFzRmxvYXRBcnJheTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkp
IHsKLSAgICAgICAgQ2FudmFzRmxvYXRBcnJheSogYXJyYXkgPSAKLSAgICAgICAgICAgIFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc0Zsb2F0QXJyYXk+KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTRkxPQVRBUlJBWSwgYXJnc1sxXS0+VG9PYmplY3QoKSk7CisgICAgaWYgKFY4
V2ViR0xGbG9hdEFycmF5OjpIYXNJbnN0YW5jZShhcmdzWzFdKSkgeworICAgICAgICBXZWJHTEZs
b2F0QXJyYXkqIGFycmF5ID0gCisgICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxXZWJHTEZsb2F0QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xGTE9BVEFSUkFZ
LCBhcmdzWzFdLT5Ub09iamVjdCgpKTsKICAgICAgICAgQVNTRVJUKGFycmF5ICE9IE5VTEwpOwog
ICAgICAgICBzd2l0Y2ggKGZ1bmN0aW9uVG9DYWxsKSB7CiAgICAgICAgICAgICBjYXNlIGtVbmlm
b3JtMXY6IGNvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5KTsgYnJlYWs7CkBAIC0z
ODEsMzAgKzM3NiwzMCBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1IZWxw
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVG9D
YWxsIGZ1bmN0aW9uVG9DYWxsKSB7CiAgICAgLy8gRm9ybXM6CiAgICAgLy8gKiBnbFVuaWZvcm0x
aXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtMWl2KEdM
aW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5pZm9ybTFp
dihHTGludCBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKICAgICAvLyAqIGdsVW5pZm9y
bTJpdihHTGludCBsb2NhdGlvbiwgQXJyYXkgZGF0YSk7Ci0gICAgLy8gKiBnbFVuaWZvcm0yaXYo
R0xpbnQgbG9jYXRpb24sIENhbnZhc0ludEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3Jt
Mml2KEdMaW50IGxvY2F0aW9uLCBXZWJHTEludEFycmF5IGRhdGEpOwogICAgIC8vICogZ2xVbmlm
b3JtM2l2KEdMaW50IGxvY2F0aW9uLCBBcnJheSBkYXRhKTsKLSAgICAvLyAqIGdsVW5pZm9ybTNp
dihHTGludCBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkgZGF0YSk7CisgICAgLy8gKiBnbFVuaWZv
cm0zaXYoR0xpbnQgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkgZGF0YSk7CiAgICAgLy8gKiBnbFVu
aWZvcm00aXYoR0xpbnQgbG9jYXRpb24sIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3Jt
NGl2KEdMaW50IGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSBkYXRhKTsKKyAgICAvLyAqIGdsVW5p
Zm9ybTRpdihHTGludCBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSBkYXRhKTsKIAogICAgIGlmIChh
cmdzLkxlbmd0aCgpICE9IDMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZ
TlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAg
ICB9CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQotICAgICAgICBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKICAgICBib29sIG9rOwogICAgIGlu
dCBsb2NhdGlvbiA9IHRvSW50MzIoYXJnc1swXSwgb2spOwogICAgIGlmICghb2spIHsKICAgICAg
ICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKICAgICB9Ci0gICAgaWYgKFY4Q2FudmFzSW50QXJy
YXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7Ci0gICAgICAgIENhbnZhc0ludEFycmF5KiBhcnJh
eSA9IAotICAgICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2Fu
dmFzSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTSU5UQVJSQVksIGFyZ3NbMV0tPlRvT2Jq
ZWN0KCkpOworICAgIGlmIChWOFdlYkdMSW50QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMV0pKSB7
CisgICAgICAgIFdlYkdMSW50QXJyYXkqIGFycmF5ID0gCisgICAgICAgICAgICBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTEludEFycmF5PihWOENsYXNzSW5kZXg6OldF
QkdMSU5UQVJSQVksIGFyZ3NbMV0tPlRvT2JqZWN0KCkpOwogICAgICAgICBBU1NFUlQoYXJyYXkg
IT0gTlVMTCk7CiAgICAgICAgIHN3aXRjaCAoZnVuY3Rpb25Ub0NhbGwpIHsKICAgICAgICAgICAg
IGNhc2Uga1VuaWZvcm0xdjogY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkpOyBi
cmVhazsKQEAgLTQ0MCw1MSArNDM1LDUxIEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dW5pZm9ybUhlbHAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19G
VU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTFmdikKK0NBTExCQUNLX0ZV
TkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMWZ2KQogewotICAgIElOQ19TVEFU
UygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMWZ2KCkiKTsKKyAgICBJTkNf
U1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudW5pZm9ybTFmdigpIik7CiAgICAgcmV0
dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3MsIGtVbmlmb3JtMXYpOwogfQog
Ci1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTFpdikK
K0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMWl2KQogewot
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMWl2KCki
KTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudW5pZm9ybTFpdigp
Iik7CiAgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtVbmlmb3JtMXYpOwogfQogCi1D
QUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9ybTJmdikKK0NB
TExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtMmZ2KQogewotICAg
IElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3JtMmZ2KCkiKTsK
KyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudW5pZm9ybTJmdigpIik7
CiAgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3MsIGtVbmlmb3Jt
MnYpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5p
Zm9ybTJpdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3Jt
Mml2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlm
b3JtMml2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudW5p
Zm9ybTJpdigpIik7CiAgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtVbmlmb3JtMnYp
OwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVW5pZm9y
bTNmdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRVbmlmb3JtM2Z2
KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC51bmlmb3Jt
M2Z2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRleHQudW5pZm9y
bTNmdigpIik7CiAgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFyZ3Ms
IGtVbmlmb3JtM3YpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEVW5pZm9ybTNpdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRl
eHRVbmlmb3JtM2l2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC51bmlmb3JtM2l2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0Nv
bnRleHQudW5pZm9ybTNpdigpIik7CiAgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJpKGFyZ3MsIGtV
bmlmb3JtM3YpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEVW5pZm9ybTRmdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRV
bmlmb3JtNGZ2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC51bmlmb3JtNGZ2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmluZ0NvbnRl
eHQudW5pZm9ybTRmdigpIik7CiAgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxw
ZXJmKGFyZ3MsIGtVbmlmb3JtNHYpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEVW5pZm9ybTRpdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRl
cmluZ0NvbnRleHRVbmlmb3JtNGl2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC51bmlmb3JtNGl2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJl
bmRlcmluZ0NvbnRleHQudW5pZm9ybTRpdigpIik7CiAgICAgcmV0dXJuIHVuaWZvcm1IZWxwZXJp
KGFyZ3MsIGtVbmlmb3JtNHYpOwogfQogCkBAIC00OTMsMjAgKzQ4OCwyMCBAQCBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1NYXRyCiB7CiAgICAgLy8gRm9ybXM6CiAgICAgLy8g
KiBnbFVuaWZvcm1NYXRyaXgyZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9u
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICog
Z2xVbmlmb3JtTWF0cml4MmZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBX
ZWJHTEZsb2F0QXJyYXkgZGF0YSk7CiAgICAgLy8gKiBnbFVuaWZvcm1NYXRyaXgzZnYoR0xpbnQg
bG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xV
bmlmb3JtTWF0cml4M2Z2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBDYW52
YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8vICogZ2xVbmlmb3JtTWF0cml4M2Z2KEdMaW50IGxv
Y2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7CiAgICAg
Ly8gKiBnbFVuaWZvcm1NYXRyaXg0ZnYoR0xpbnQgbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEFycmF5IGRhdGEpOwotICAgIC8vICogZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0
aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5IGRhdGEpOworICAgIC8v
ICogZ2xVbmlmb3JtTWF0cml4NGZ2KEdMaW50IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3Nl
LCBXZWJHTEZsb2F0QXJyYXkgZGF0YSk7CiAgICAgLy8KLSAgICAvLyBGSVhNRTogbmVlZCB0byBj
aGFuZ2UgdG8gYWNjZXB0IENhbnZhc0Zsb2F0QXJyYXkgYXMgd2VsbC4KKyAgICAvLyBGSVhNRTog
bmVlZCB0byBjaGFuZ2UgdG8gYWNjZXB0IFdlYkdMRmxvYXRBcnJheSBhcyB3ZWxsLgogICAgIGlm
IChhcmdzLkxlbmd0aCgpICE9IDMpIHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9u
KFNZTlRBWF9FUlIpOwogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsK
ICAgICB9CiAKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQgPQotICAgICAg
ICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEPihhcmdzLkhvbGRlcigpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQgPQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PihhcmdzLkhvbGRlcigpKTsKICAgICBib29sIG9rOwogICAg
IGludCBsb2NhdGlvbiA9IHRvSW50MzIoYXJnc1swXSwgb2spOwogICAgIGlmICghb2spIHsKQEAg
LTUxNCw5ICs1MDksOSBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHVuaWZvcm1NYXRy
CiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KICAgICBi
b29sIHRyYW5zcG9zZSA9IGFyZ3NbMV0tPkJvb2xlYW5WYWx1ZSgpOwotICAgIGlmIChWOENhbnZh
c0Zsb2F0QXJyYXk6Okhhc0luc3RhbmNlKGFyZ3NbMl0pKSB7Ci0gICAgICAgIENhbnZhc0Zsb2F0
QXJyYXkqIGFycmF5ID0gCi0gICAgICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxDYW52YXNGbG9hdEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU0ZMT0FUQVJSQVks
IGFyZ3NbMl0tPlRvT2JqZWN0KCkpOworICAgIGlmIChWOFdlYkdMRmxvYXRBcnJheTo6SGFzSW5z
dGFuY2UoYXJnc1syXSkpIHsKKyAgICAgICAgV2ViR0xGbG9hdEFycmF5KiBhcnJheSA9IAorICAg
ICAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xGbG9hdEFy
cmF5PihWOENsYXNzSW5kZXg6OldFQkdMRkxPQVRBUlJBWSwgYXJnc1syXS0+VG9PYmplY3QoKSk7
CiAgICAgICAgIEFTU0VSVChhcnJheSAhPSBOVUxMKTsKICAgICAgICAgc3dpdGNoIChtYXRyaXhT
aXplKSB7CiAgICAgICAgICAgICBjYXNlIDI6IGNvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24sIHRyYW5zcG9zZSwgYXJyYXkpOyBicmVhazsKQEAgLTU1MCw0NSArNTQ1LDQ1IEBAIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdW5pZm9ybU1hdHIKICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEVW5pZm9ybU1hdHJpeDJmdikKK0NBTExCQUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRVbmlmb3JtTWF0cml4MmZ2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRC51bmlmb3JtTWF0cml4MmZ2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5X
ZWJHTFJlbmRlcmluZ0NvbnRleHQudW5pZm9ybU1hdHJpeDJmdigpIik7CiAgICAgcmV0dXJuIHVu
aWZvcm1NYXRyaXhIZWxwZXIoYXJncywgMik7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0RVbmlmb3JtTWF0cml4M2Z2KQorQ0FMTEJBQ0tfRlVOQ19ERUNM
KFdlYkdMUmVuZGVyaW5nQ29udGV4dFVuaWZvcm1NYXRyaXgzZnYpCiB7Ci0gICAgSU5DX1NUQVRT
KCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnVuaWZvcm1NYXRyaXgzZnYoKSIpOworICAg
IElOQ19TVEFUUygiRE9NLldlYkdMUmVuZGVyaW5nQ29udGV4dC51bmlmb3JtTWF0cml4M2Z2KCki
KTsKICAgICByZXR1cm4gdW5pZm9ybU1hdHJpeEhlbHBlcihhcmdzLCAzKTsKIH0KIAotQ0FMTEJB
Q0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFVuaWZvcm1NYXRyaXg0ZnYpCitD
QUxMQkFDS19GVU5DX0RFQ0woV2ViR0xSZW5kZXJpbmdDb250ZXh0VW5pZm9ybU1hdHJpeDRmdikK
IHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QudW5pZm9ybU1h
dHJpeDRmdigpIik7CisgICAgSU5DX1NUQVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LnVu
aWZvcm1NYXRyaXg0ZnYoKSIpOwogICAgIHJldHVybiB1bmlmb3JtTWF0cml4SGVscGVyKGFyZ3Ms
IDQpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVy
dGV4QXR0cmliMWZ2KQorQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dFZl
cnRleEF0dHJpYjFmdikKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QudmVydGV4QXR0cmliMWZ2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRl
cmluZ0NvbnRleHQudmVydGV4QXR0cmliMWZ2KCkiKTsKICAgICByZXR1cm4gdmVydGV4QXR0cmli
QW5kVW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjF2KTsKIH0KIAotQ0FMTEJBQ0tf
RlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRFZlcnRleEF0dHJpYjJmdikKK0NBTExC
QUNLX0ZVTkNfREVDTChXZWJHTFJlbmRlcmluZ0NvbnRleHRWZXJ0ZXhBdHRyaWIyZnYpCiB7Ci0g
ICAgSU5DX1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELnZlcnRleEF0dHJpYjJm
digpIik7CisgICAgSU5DX1NUQVRTKCJET00uV2ViR0xSZW5kZXJpbmdDb250ZXh0LnZlcnRleEF0
dHJpYjJmdigpIik7CiAgICAgcmV0dXJuIHZlcnRleEF0dHJpYkFuZFVuaWZvcm1IZWxwZXJmKGFy
Z3MsIGtWZXJ0ZXhBdHRyaWIydik7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0RWZXJ0ZXhBdHRyaWIzZnYpCitDQUxMQkFDS19GVU5DX0RFQ0woV2ViR0xS
ZW5kZXJpbmdDb250ZXh0VmVydGV4QXR0cmliM2Z2KQogewotICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRC52ZXJ0ZXhBdHRyaWIzZnYoKSIpOworICAgIElOQ19TVEFU
UygiRE9NLldlYkdMUmVuZGVyaW5nQ29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoKSIpOwogICAgIHJl
dHVybiB2ZXJ0ZXhBdHRyaWJBbmRVbmlmb3JtSGVscGVyZihhcmdzLCBrVmVydGV4QXR0cmliM3Yp
OwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEVmVydGV4
QXR0cmliNGZ2KQorQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMUmVuZGVyaW5nQ29udGV4dFZlcnRl
eEF0dHJpYjRmdikKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QudmVydGV4QXR0cmliNGZ2KCkiKTsKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTFJlbmRlcmlu
Z0NvbnRleHQudmVydGV4QXR0cmliNGZ2KCkiKTsKICAgICByZXR1cm4gdmVydGV4QXR0cmliQW5k
VW5pZm9ybUhlbHBlcmYoYXJncywga1ZlcnRleEF0dHJpYjR2KTsKIH0KIApJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNob3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTA2MDEpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q2FudmFzU2hvcnRBcnJheUN1c3RvbS5jcHA6NTA2MDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1Nob3J0QXJy
YXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhD
dXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IpCit7
CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJheS5Db250cnVjdG9yIik7CisKKyAg
ICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzU2hvcnRBcnJheT4oYXJncywgVjhD
bGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVkpKTsKK30KKwor
Ly8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVybiBpdCB3
cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3NlcyBvdXRz
aWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFycmF5KQoreworICAgIElOQ19TVEFUUygiRE9NLkNh
bnZhc1Nob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzU2hvcnRB
cnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNT
aG9ydEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkp
OworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJheS0+bGVuZ3RoKCkpKQor
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHNob3J0IHJlc3VsdDsKKyAgICBp
ZiAoIWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZp
bmVkKCk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQg
dGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgYXJyYXkuIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIGFycmF5IHJhbmdlIGFyZSBzaWxlbnRseSBpZ25vcmVkLgorSU5ERVhFRF9QUk9QRVJUWV9T
RVRURVIoQ2FudmFzU2hvcnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNTaG9y
dEFycmF5LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIENhbnZhc1Nob3J0QXJyYXkqIGFy
cmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzU2hvcnRBcnJh
eT4oVjhDbGFzc0luZGV4OjpDQU5WQVNTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAg
IGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkgeworICAgICAg
ICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IkNvdWxkIG5vdCBjb252ZXJ0IHZhbHVlIGFyZ3VtZW50IHRvIGEgbnVtYmVyIik7CisgICAgICAg
IGFycmF5LT5zZXQoaW5kZXgsIHZhbHVlLT5OdW1iZXJWYWx1ZSgpKTsKKyAgICB9CisgICAgcmV0
dXJuIHZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFNo
b3J0QXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xTaG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMU2hvcnRBcnJheUN1c3RvbS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDI5ICszMiwyOSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAot
I2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzU2hvcnRBcnJh
eS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFNob3J0
QXJyYXkuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAi
VjhXZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhXZWJHTEFycmF5Q3VzdG9tLmgiCiAj
aW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUNBTExCQUNLX0ZVTkNfREVDTChDYW52YXNTaG9ydEFycmF5Q29u
c3RydWN0b3IpCitDQUxMQkFDS19GVU5DX0RFQ0woV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3Ip
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJheS5Db250cnVjdG9yIik7Cisg
ICAgSU5DX1NUQVRTKCJET00uV2ViR0xTaG9ydEFycmF5LkNvbnRydWN0b3IiKTsKIAotICAgIHJl
dHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNTaG9ydEFycmF5PihhcmdzLCBWOENsYXNz
SW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Q0FOVkFTU0hPUlRBUlJBWSkpOworICAgIHJldHVy
biBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMU2hvcnRBcnJheT4oYXJncywgVjhDbGFzc0luZGV4
OjpUb0ludChWOENsYXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWSkpOwogfQogCiAvLyBHZXQgdGhl
IHNwZWNpZmllZCB2YWx1ZSBmcm9tIHRoZSBhcnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMg
YSBKYXZhU2NyaXB0IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZh
bGlkIGFycmF5IHJhbmdlIHJldHVybiAidW5kZWZpbmVkIi4KLUlOREVYRURfUFJPUEVSVFlfR0VU
VEVSKENhbnZhc1Nob3J0QXJyYXkpCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFNob3J0
QXJyYXkpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzU2hvcnRBcnJheS5JbmRleGVkUHJv
cGVydHlHZXR0ZXIiKTsKLSAgICBDYW52YXNTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Nob3J0QXJyYXk+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisgICAgSU5DX1NUQVRTKCJET00uV2Vi
R0xTaG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOworICAgIFdlYkdMU2hvcnRBcnJh
eSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTFNob3J0
QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKIAog
ICAgIGlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBJTkRFWEVEX1BS
T1BFUlRZX0dFVFRFUihDYW52YXNTaG9ydEFycmF5CiB9CiAKIC8vIFNldCB0aGUgc3BlY2lmaWVk
IHZhbHVlIGluIHRoZSBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFu
Z2UgYXJlIHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNT
aG9ydEFycmF5KQorSU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoV2ViR0xTaG9ydEFycmF5KQogewot
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Nob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVy
Iik7Ci0gICAgQ2FudmFzU2hvcnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxDYW52YXNTaG9ydEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1NIT1JU
QVJSQVksIGluZm8uSG9sZGVyKCkpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMU2hvcnRBcnJh
eS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBXZWJHTFNob3J0QXJyYXkqIGFycmF5ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xTaG9ydEFycmF5PihWOENs
YXNzSW5kZXg6OldFQkdMU0hPUlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoKGlu
ZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKICAgICAgICAgaWYgKCF2
YWx1ZS0+SXNOdW1iZXIoKSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNp
b24gNTA2MDEpCShmcm9tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXlDdXN0b20uY3BwOjUwNjAxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykK
KworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkuaCIKKworI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4Q2Fu
dmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5j
bHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0NBTExCQUNLX0ZVTkNfREVDTChDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eUNvbnN0cnVjdG9yKQoreworICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5LkNvbnRydWN0b3IiKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5k
ZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZKSk7Cit9CisKKy8vIEdldCB0aGUgc3BlY2lmaWVk
IHZhbHVlIGZyb20gdGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3Jp
cHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkg
cmFuZ2UgcmV0dXJuICJ1bmRlZmluZWQiLgorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7CisgICAgQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFz
VW5zaWduZWRCeXRlQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRFQVJSQVks
IGluZm8uSG9sZGVyKCkpOworCisgICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBhcnJh
eS0+bGVuZ3RoKCkpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworICAgIHVuc2ln
bmVkIGNoYXIgcmVzdWx0OworICAgIGlmICghYXJyYXktPmdldChpbmRleCwgcmVzdWx0KSkKKyAg
ICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICByZXR1cm4gdjg6Ok51bWJlcjo6TmV3
KHJlc3VsdCk7Cit9CisKKy8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBhcnJheS4g
QWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgYXJlIHNpbGVudGx5IGlnbm9y
ZWQuCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSkKK3sK
KyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5JbmRleGVkUHJvcGVy
dHlTZXR0ZXIiKTsKKyAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNVTlNJR05FREJZVEVBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAg
ICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5ndGgoKSkpIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51bWJlciIpOworICAgICAg
ICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7CisgICAgfQorICAgIHJl
dHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24g
NTA2MDEpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRCeXRl
QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyOSArMzIsMjkgQEAKIAogI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKIAogI2luY2x1ZGUg
IlY4QmluZGluZy5oIgotI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRl
ICJWOENhbnZhc0FycmF5Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhXZWJHTEFycmF5QnVmZmVyLmgi
CisjaW5jbHVkZSAiVjhXZWJHTEFycmF5Q3VzdG9tLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5k
aW5nLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yKQorQ0FM
TEJBQ0tfRlVOQ19ERUNMKFdlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvcikKIHsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5Db250cnVjdG9yIik7Cisg
ICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5Db250cnVjdG9yIik7CiAK
LSAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+
KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FREJZ
VEVBUlJBWSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMVW5zaWduZWRC
eXRlQXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJHTFVO
U0lHTkVEQllURUFSUkFZKSk7CiB9CiAKIC8vIEdldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGZyb20g
dGhlIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFTY3JpcHQgTnVtYmVyIG9i
amVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgcmV0dXJu
ICJ1bmRlZmluZWQiLgotSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRCeXRl
QXJyYXkpCitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KQog
ewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5LkluZGV4ZWRQcm9w
ZXJ0eUdldHRlciIpOwotICAgIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KiBhcnJheSA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PihW
OENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKyAg
ICBJTkNfU1RBVFMoIkRPTS5XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LkluZGV4ZWRQcm9wZXJ0eUdl
dHRlciIpOworICAgIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkqIGFycmF5ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4oVjhDbGFzc0lu
ZGV4OjpXRUJHTFVOU0lHTkVEQllURUFSUkFZLCBpbmZvLkhvbGRlcigpKTsKIAogICAgIGlmICgo
aW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKICAgICAgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBJTkRFWEVEX1BST1BFUlRZX0dF
VFRFUihDYW52YXNVbnNpZ25lZEJ5CiB9CiAKIC8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVlIGlu
IHRoZSBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgYXJlIHNp
bGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheSkKK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKFdlYkdMVW5zaWduZWRCeXRlQXJyYXkp
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuSW5kZXhlZFBy
b3BlcnR5U2V0dGVyIik7Ci0gICAgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkqIGFycmF5ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURCWVRFQVJSQVksIGluZm8uSG9sZGVyKCkpOwor
ICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRCeXRlQXJyYXkuSW5kZXhlZFByb3BlcnR5
U2V0dGVyIik7CisgICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSogYXJyYXkgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PihWOENsYXNz
SW5kZXg6OldFQkdMVU5TSUdORURCWVRFQVJSQVksIGluZm8uSG9sZGVyKCkpOwogCiAgICAgaWYg
KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7CiAgICAgICAgIGlm
ICghdmFsdWUtPklzTnVtYmVyKCkpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCShyZXZp
c2lvbiA1MDYwMSkJKGZyb20gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNVbnNp
Z25lZEludEFycmF5Q3VzdG9tLmNwcDo1MDYwMSkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykK
KworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlDdXN0b20uaCIKKyNpbmNs
dWRlICJWOEN1c3RvbUJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3RvcikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZEludEFycmF5
LkNvbnRydWN0b3IiKTsKKworICAgIHJldHVybiBjb25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNV
bnNpZ25lZEludEFycmF5PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTVU5TSUdORURJTlRBUlJBWSkpOworfQorCisvLyBHZXQgdGhlIHNwZWNpZmllZCB2YWx1
ZSBmcm9tIHRoZSBpbnRlZ2VyIGFycmF5IGFuZCByZXR1cm4gaXQgd3JhcHBlZCBhcyBhIEphdmFT
Y3JpcHQgTnVtYmVyIG9iamVjdCB0byBWOC4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgcGl4
ZWwgYnVmZmVyIHJhbmdlIHJldHVybiAidW5kZWZpbmVkIi4KK0lOREVYRURfUFJPUEVSVFlfR0VU
VEVSKENhbnZhc1Vuc2lnbmVkSW50QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFz
VW5zaWduZWRJbnRBcnJheS5JbmRleGVkUHJvcGVydHlHZXR0ZXIiKTsKKyAgICBDYW52YXNVbnNp
Z25lZEludEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURJTlRB
UlJBWSwgaW5mby5Ib2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49
IGFycmF5LT5sZW5ndGgoKSkpCisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAg
dW5zaWduZWQgaW50IHJlc3VsdDsKKyAgICBpZiAoIWFycmF5LT5nZXQoaW5kZXgsIHJlc3VsdCkp
CisgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CisgICAgcmV0dXJuIHY4OjpOdW1iZXI6
Ok5ldyhyZXN1bHQpOworfQorCisvLyBTZXQgdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgaW50
ZWdlciBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgaW50ZWdlciBhcnJheSByYW5n
ZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VUVEVSKENhbnZhc1Vu
c2lnbmVkSW50QXJyYXkpCit7CisgICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRJbnRB
cnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKKyAgICBDYW52YXNVbnNpZ25lZEludEFycmF5
KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2ln
bmVkSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURJTlRBUlJBWSwgaW5mby5I
b2xkZXIoKSk7CisKKyAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IGFycmF5LT5sZW5n
dGgoKSkpIHsKKyAgICAgICAgaWYgKCF2YWx1ZS0+SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKCJDb3VsZCBub3QgY29udmVydCB2YWx1ZSBhcmd1bWVudCB0byBhIG51
bWJlciIpOworICAgICAgICBhcnJheS0+c2V0KGluZGV4LCB2YWx1ZS0+TnVtYmVyVmFsdWUoKSk7
CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V2ViR0xVbnNpZ25lZEludEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbS5j
cHAJKHJldmlzaW9uIDUwNjAxKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJH
TFVuc2lnbmVkSW50QXJyYXlDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyOSArMzIs
MjkgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1
ZmZlci5oIgotI2luY2x1ZGUgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuaCIKKyNpbmNsdWRlICJX
ZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xVbnNpZ25lZEludEFycmF5LmgiCiAK
ICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgi
Ci0jaW5jbHVkZSAiVjhDYW52YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4V2ViR0xBcnJh
eUJ1ZmZlci5oIgorI2luY2x1ZGUgIlY4V2ViR0xBcnJheUN1c3RvbS5oIgogI2luY2x1ZGUgIlY4
Q3VzdG9tQmluZGluZy5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1DQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzVW5zaWduZWRJbnRBcnJheUNvbnN0cnVj
dG9yKQorQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9y
KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkuQ29udHJ1Y3Rv
ciIpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRJbnRBcnJheS5Db250cnVjdG9y
Iik7CiAKLSAgICByZXR1cm4gY29uc3RydWN0Q2FudmFzQXJyYXk8Q2FudmFzVW5zaWduZWRJbnRB
cnJheT4oYXJncywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lH
TkVESU5UQVJSQVkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0V2ViR0xBcnJheTxXZWJHTFVuc2ln
bmVkSW50QXJyYXk+KGFyZ3MsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXRUJH
TFVOU0lHTkVESU5UQVJSQVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJv
bSB0aGUgaW50ZWdlciBhcnJheSBhbmQgcmV0dXJuIGl0IHdyYXBwZWQgYXMgYSBKYXZhU2NyaXB0
IE51bWJlciBvYmplY3QgdG8gVjguIEFjY2Vzc2VzIG91dHNpZGUgdGhlIHZhbGlkIHBpeGVsIGJ1
ZmZlciByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihD
YW52YXNVbnNpZ25lZEludEFycmF5KQorSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoV2ViR0xVbnNp
Z25lZEludEFycmF5KQogewotICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1Vuc2lnbmVkSW50QXJy
YXkuSW5kZXhlZFByb3BlcnR5R2V0dGVyIik7Ci0gICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheSog
YXJyYXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25l
ZEludEFycmF5PihWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVESU5UQVJSQVksIGluZm8uSG9s
ZGVyKCkpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRJbnRBcnJheS5JbmRleGVk
UHJvcGVydHlHZXR0ZXIiKTsKKyAgICBXZWJHTFVuc2lnbmVkSW50QXJyYXkqIGFycmF5ID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V2ViR0xVbnNpZ25lZEludEFycmF5PihW
OENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURJTlRBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAKICAg
ICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IGFycmF5LT5sZW5ndGgoKSkpCiAgICAgICAg
IHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC02NSwxMCArNjUsMTAgQEAgSU5ERVhFRF9QUk9Q
RVJUWV9HRVRURVIoQ2FudmFzVW5zaWduZWRJbgogfQogCiAvLyBTZXQgdGhlIHNwZWNpZmllZCB2
YWx1ZSBpbiB0aGUgaW50ZWdlciBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgaW50
ZWdlciBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KLUlOREVYRURfUFJPUEVSVFlf
U0VUVEVSKENhbnZhc1Vuc2lnbmVkSW50QXJyYXkpCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihX
ZWJHTFVuc2lnbmVkSW50QXJyYXkpCiB7Ci0gICAgSU5DX1NUQVRTKCJET00uQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheS5JbmRleGVkUHJvcGVydHlTZXR0ZXIiKTsKLSAgICBDYW52YXNVbnNpZ25lZElu
dEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZh
c1Vuc2lnbmVkSW50QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTVU5TSUdORURJTlRBUlJBWSwg
aW5mby5Ib2xkZXIoKSk7CisgICAgSU5DX1NUQVRTKCJET00uV2ViR0xVbnNpZ25lZEludEFycmF5
LkluZGV4ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIFdlYkdMVW5zaWduZWRJbnRBcnJheSogYXJy
YXkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXZWJHTFVuc2lnbmVkSW50
QXJyYXk+KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRElOVEFSUkFZLCBpbmZvLkhvbGRlcigp
KTsKIAogICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkg
ewogICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eUN1c3RvbS5jcHAJKHJldmlzaW9uIDUwNjAxKQkoZnJvbSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheUN1c3RvbS5jcHA6NTA2MDEpCisrKyBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisj
aW5jbHVkZSAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisKKyNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKKyNpbmNsdWRlICJWOENhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhDYW52
YXNBcnJheUN1c3RvbS5oIgorI2luY2x1ZGUgIlY4Q3VzdG9tQmluZGluZy5oIgorI2luY2x1ZGUg
IlY4UHJveHkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDQUxMQkFDS19GVU5DX0RFQ0wo
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IpCit7CisgICAgSU5DX1NUQVRTKCJE
T00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkNvbnRydWN0b3IiKTsKKworICAgIHJldHVybiBj
b25zdHJ1Y3RDYW52YXNBcnJheTxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KGFyZ3MsIFY4Q2xh
c3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVkpKTsK
K30KKworLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJyYXkgYW5kIHJldHVy
biBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRvIFY4LiBBY2Nlc3Nl
cyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVmaW5lZCIuCitJTkRF
WEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkpCit7CisgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdldHRl
ciIpOworICAgIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSogYXJyYXkgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTVU5TSUdORURTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKworICAgIGlm
ICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKKyAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBzaG9ydCByZXN1bHQ7CisgICAgaWYg
KCFhcnJheS0+Z2V0KGluZGV4LCByZXN1bHQpKQorICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5l
ZCgpOworICAgIHJldHVybiB2ODo6TnVtYmVyOjpOZXcocmVzdWx0KTsKK30KKworLy8gU2V0IHRo
ZSBzcGVjaWZpZWQgdmFsdWUgaW4gdGhlIGFycmF5LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxp
ZCBhcnJheSByYW5nZSBhcmUgc2lsZW50bHkgaWdub3JlZC4KK0lOREVYRURfUFJPUEVSVFlfU0VU
VEVSKENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSkKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5DYW52
YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7CisgICAgQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJ
R05FRFNIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkpOworCisgICAgaWYgKChpbmRleCA+PSAwKSAm
JiAoaW5kZXggPCBhcnJheS0+bGVuZ3RoKCkpKSB7CisgICAgICAgIGlmICghdmFsdWUtPklzTnVt
YmVyKCkpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiQ291bGQgbm90IGNvbnZlcnQg
dmFsdWUgYXJndW1lbnQgdG8gYSBudW1iZXIiKTsKKyAgICAgICAgYXJyYXktPnNldChpbmRleCwg
dmFsdWUtPk51bWJlclZhbHVlKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3Vz
dG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdM
VW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTA2MDEpCisrKyBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMjkgKzMyLDI5IEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQogCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVk
ZSAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaCIKIAogI2luY2x1ZGUgIlY4QmluZGluZy5oIgot
I2luY2x1ZGUgIlY4Q2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJWOENhbnZhc0FycmF5
Q3VzdG9tLmgiCisjaW5jbHVkZSAiVjhXZWJHTEFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiVjhX
ZWJHTEFycmF5Q3VzdG9tLmgiCiAjaW5jbHVkZSAiVjhDdXN0b21CaW5kaW5nLmgiCiAjaW5jbHVk
ZSAiVjhQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNBTExCQUNLX0ZVTkNfREVD
TChDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25zdHJ1Y3RvcikKK0NBTExCQUNLX0ZVTkNfREVD
TChXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yKQogewotICAgIElOQ19TVEFUUygi
RE9NLkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5Db250cnVjdG9yIik7CisgICAgSU5DX1NUQVRT
KCJET00uV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuQ29udHJ1Y3RvciIpOwogCi0gICAgcmV0dXJu
IGNvbnN0cnVjdENhbnZhc0FycmF5PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oYXJncywgVjhD
bGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkNBTlZBU1VOU0lHTkVEU0hPUlRBUlJBWSkp
OworICAgIHJldHVybiBjb25zdHJ1Y3RXZWJHTEFycmF5PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5
PihhcmdzLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V0VCR0xVTlNJR05FRFNI
T1JUQVJSQVkpKTsKIH0KIAogLy8gR2V0IHRoZSBzcGVjaWZpZWQgdmFsdWUgZnJvbSB0aGUgYXJy
YXkgYW5kIHJldHVybiBpdCB3cmFwcGVkIGFzIGEgSmF2YVNjcmlwdCBOdW1iZXIgb2JqZWN0IHRv
IFY4LiBBY2Nlc3NlcyBvdXRzaWRlIHRoZSB2YWxpZCBhcnJheSByYW5nZSByZXR1cm4gInVuZGVm
aW5lZCIuCi1JTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkp
CitJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSkKIHsKLSAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5kZXhlZFByb3BlcnR5
R2V0dGVyIik7Ci0gICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4oVjhD
bGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVksIGluZm8uSG9sZGVyKCkpOworICAg
IElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRTaG9ydEFycmF5LkluZGV4ZWRQcm9wZXJ0eUdl
dHRlciIpOworICAgIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdMVW5zaWduZWRTaG9ydEFycmF5PihWOENsYXNz
SW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKIAogICAgIGlm
ICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPj0gYXJyYXktPmxlbmd0aCgpKSkKICAgICAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTY1LDEwICs2NSwxMCBAQCBJTkRFWEVEX1BST1BFUlRZ
X0dFVFRFUihDYW52YXNVbnNpZ25lZFNoCiB9CiAKIC8vIFNldCB0aGUgc3BlY2lmaWVkIHZhbHVl
IGluIHRoZSBhcnJheS4gQWNjZXNzZXMgb3V0c2lkZSB0aGUgdmFsaWQgYXJyYXkgcmFuZ2UgYXJl
IHNpbGVudGx5IGlnbm9yZWQuCi1JTkRFWEVEX1BST1BFUlRZX1NFVFRFUihDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkpCitJTkRFWEVEX1BST1BFUlRZX1NFVFRFUihXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheSkKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuSW5k
ZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KiBhcnJh
eSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5WQVNVTlNJR05FRFNIT1JUQVJSQVksIGluZm8uSG9s
ZGVyKCkpOworICAgIElOQ19TVEFUUygiRE9NLldlYkdMVW5zaWduZWRTaG9ydEFycmF5LkluZGV4
ZWRQcm9wZXJ0eVNldHRlciIpOworICAgIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KiBhcnJheSA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5PihWOENsYXNzSW5kZXg6OldFQkdMVU5TSUdORURTSE9SVEFSUkFZLCBpbmZvLkhvbGRlcigp
KTsKIAogICAgIGlmICgoaW5kZXggPj0gMCkgJiYgKGluZGV4IDwgYXJyYXktPmxlbmd0aCgpKSkg
ewogICAgICAgICBpZiAoIXZhbHVlLT5Jc051bWJlcigpKQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJD
YW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCiAj
aWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjZW5kaWYKICNpbmNs
dWRlICJDYW52YXNTdHlsZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtMTcyLDcgKzE3Miw3
IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAg
IGlmIChtX2NvbnRleHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBt
X2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZSh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBtX2NvbnRleHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0aGlz
KTsKICAgICAgICAgICAgICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVy
IGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzCiAgICAgICAgICAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFuZ2UpOwpAQCAtMjQ5LDkgKzI0OSw5IEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KICAgICAgICAgcmV0dXJuOwog
ICAgIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
KiBjb250ZXh0M0QgPSBOVUxMOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dDNE
ID0gTlVMTDsKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpKSB7Ci0gICAg
ICAgIGNvbnRleHQzRCA9IHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCo+KG1f
Y29udGV4dC5nZXQoKSk7CisgICAgICAgIGNvbnRleHQzRCA9IHN0YXRpY19jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSk7CiAgICAgICAgIGNvbnRleHQzRC0+YmVn
aW5QYWludCgpOwogICAgIH0KICNlbmRpZgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNBY3RpdmVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNB
Y3RpdmVJbmZvLmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNBY3RpdmVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc0FjdGl2
ZUluZm9faAotI2RlZmluZSBDYW52YXNBY3RpdmVJbmZvX2gKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENhbnZhc0FjdGl2ZUlu
Zm8gOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNBY3RpdmVJbmZvPiB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQWN0aXZlSW5mbz4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
bmFtZSwgdW5zaWduZWQgdHlwZSwgaW50IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENhbnZhc0FjdGl2ZUluZm8obmFtZSwgdHlwZSwgc2l6ZSkpOwotICAgIH0KLSAg
ICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQotICAgIHVuc2lnbmVkIHR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotCi1wcml2YXRlOgotICAgIENhbnZhc0FjdGl2ZUluZm8oY29uc3QgU3Ry
aW5nJiBuYW1lLCB1bnNpZ25lZCB0eXBlLCBpbnQgc2l6ZSkKLSAgICAgICAgOiBtX25hbWUobmFt
ZSkKLSAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChuYW1lLmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKHR5cGUpOwot
ICAgICAgICBBU1NFUlQoc2l6ZSk7Ci0gICAgfQotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgdW5z
aWduZWQgbV90eXBlOwotICAgIGludCBtX3NpemU7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBDYW52
YXNBY3RpdmVJbmZvX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQWN0aXZlSW5m
by5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBY3RpdmVJbmZv
LmlkbAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FjdGl2
ZUluZm8uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGh0bWwgewotCi0gICAgaW50
ZXJmYWNlIFsKLSAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAotICAgIF0gQ2FudmFzQWN0
aXZlSW5mbyB7Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBpbnQgc2l6ZTsKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGludCB0eXBlOwotICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7Ci0gICAgfTsKLQotfQpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNBcnJheS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5WQVMpCi0KLSNpbmNs
dWRlICJDYW52YXNBcnJheS5oIgotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBDYW52YXNBcnJheTo6Q2FudmFzQXJyYXkoUGFzc1JlZlB0
cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQpCi0gICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAs
IG1fYnVmZmVyKGJ1ZmZlcikKLSAgICB7Ci0gICAgICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZl
ciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX29mZnNldCkgOiAw
OwotICAgIH0KLQotICAgIENhbnZhc0FycmF5Ojp+Q2FudmFzQXJyYXkoKQotICAgIHsKLSAgICB9
Ci0KLSAgICB1bnNpZ25lZCBDYW52YXNBcnJheTo6YWxpZ25lZFNpemVJbkJ5dGVzKCkgY29uc3Qg
ewotICAgICAgICAvLyBBc3N1bWUgd2Ugb25seSBuZWVkIHRvIHJvdW5kIHVwIHRvIDQtYnl0ZSBi
b3VuZGFyaWVzIGZvciBhbGlnbm1lbnQuCi0gICAgICAgIHJldHVybiAoKHNpemVJbkJ5dGVzKCkg
KyAzKSAvIDQpICogNDsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXkuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNzUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzQXJyYXlfaAotI2RlZmluZSBDYW52YXNBcnJh
eV9oCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVm
ZmVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBDYW52YXNBcnJheSA6IHB1
YmxpYyBSZWZDb3VudGVkPENhbnZhc0FycmF5PiB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2
aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEJ5dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJyYXkoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRBcnJheSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJy
YXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGbG9h
dEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgCi0gICAgICAgIFBhc3NS
ZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlcigpIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlcjsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQqIGJhc2VBZGRyZXNzKCkgewotICAg
ICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNp
Z25lZCBvZmZzZXQoKSBjb25zdCB7Ci0gICAgICAgICAgICByZXR1cm4gbV9vZmZzZXQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0ID0gMDsKLSAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0ID0gMDsKLSAgICAgICAg
dmlydHVhbCB1bnNpZ25lZCBhbGlnbmVkU2l6ZUluQnl0ZXMoKSBjb25zdDsKLSAgICAgICAgdmly
dHVhbCB+Q2FudmFzQXJyYXkoKTsKLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ2FudmFzQXJy
YXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQp
OwotCi0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIENhbnZhc0FycmF5QnVm
ZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgb2Zmc2V0LgotICAgICAgICB2b2lkKiBtX2Jhc2VBZGRy
ZXNzOwotICAgICAgICB1bnNpZ25lZCBtX29mZnNldDsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToK
LSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBtX2J1ZmZlcjsKLSAgICB9OwotICAg
IAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FudmFzQXJyYXlfaApJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlv
bmFsPTNEX0NBTlZBUywgQ3VzdG9tVG9KU10gQ2FudmFzQXJyYXkgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7Ci0gICAgICAgIGludCBzaXplSW5CeXRlcygpOwotICAg
ICAgICBpbnQgYWxpZ25lZFNpemVJbkJ5dGVzKCk7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotICAgIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IENh
bnZhc0FycmF5QnVmZmVyOjpjcmVhdGUodW5zaWduZWQgc2l6ZUluQnl0ZXMpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0FycmF5QnVmZmVyKHNpemVJbkJ5dGVzKSk7
Ci0gICAgfQotICAgIAotICAgIENhbnZhc0FycmF5QnVmZmVyOjpDYW52YXNBcnJheUJ1ZmZlcih1
bnNpZ25lZCBzaXplSW5CeXRlcykgewotICAgICAgICBtX3NpemVJbkJ5dGVzID0gc2l6ZUluQnl0
ZXM7Ci0gICAgICAgIG1fZGF0YSA9IFdURjo6ZmFzdFplcm9lZE1hbGxvYyhzaXplSW5CeXRlcyk7
Ci0gICAgfQotICAgIAotICAgIHZvaWQqIENhbnZhc0FycmF5QnVmZmVyOjpkYXRhKCkgewotICAg
ICAgICByZXR1cm4gbV9kYXRhOwotICAgIH0KLQotICAgIHVuc2lnbmVkIENhbnZhc0FycmF5QnVm
ZmVyOjpieXRlTGVuZ3RoKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9zaXplSW5CeXRlczsK
LSAgICB9Ci0KLSAgICBDYW52YXNBcnJheUJ1ZmZlcjo6fkNhbnZhc0FycmF5QnVmZmVyKCkgewot
ICAgICAgICBXVEY6OmZhc3RGcmVlKG1fZGF0YSk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVy
LmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENhbnZhc0FycmF5QnVmZmVyX2gKLSNkZWZpbmUgQ2FudmFzQXJyYXlCdWZmZXJfaAotCi0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzQXJyYXlCdWZmZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxDYW52YXNBcnJheUJ1ZmZlcj4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBz
aXplSW5CeXRlcyk7Ci0KLSAgICAgICAgdm9pZCogZGF0YSgpOwotICAgICAgICB1bnNpZ25lZCBi
eXRlTGVuZ3RoKCkgY29uc3Q7Ci0KLSAgICAgICAgfkNhbnZhc0FycmF5QnVmZmVyKCk7Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBDYW52YXNBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRl
cyk7Ci0gICAgICAgIHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7Ci0gICAgICAgIHZvaWQqIG1fZGF0
YTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2Fu
dmFzQXJyYXlCdWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1
ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1
ZmZlci5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNB
cnJheUJ1ZmZlci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2Fu
dmFzQXJyYXlCdWZmZXIgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgaW50IGJ5dGVMZW5n
dGg7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAKLVBhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBDYW52YXNCdWZmZXI6OmNyZWF0
ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENhbnZhc0J1ZmZlcihjdHgpKTsKLX0KLQotQ2FudmFzQnVmZmVyOjpDYW52YXNCdWZmZXIo
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjdHgpCi0gICAgOiBDYW52YXNPYmplY3QoY3R4KQot
ewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1
ZmZlcigpKTsKLX0KLQotdm9pZCBDYW52YXNCdWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0z
RE9iamVjdCBvYmplY3QpCi17Ci0gICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5k
ZWxldGVCdWZmZXIob2JqZWN0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCdWZmZXIuaAkocmV2aXNpb24gNTA2MzQpCisr
KyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc0J1ZmZlcl9oCi0jZGVmaW5lIENh
bnZhc0J1ZmZlcl9oCi0KLSNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKLQotI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIAotICAgIGNsYXNzIENhbnZhc0J1ZmZlciA6IHB1YmxpYyBDYW52YXNP
YmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FudmFzQnVmZmVyKCkgeyBk
ZWxldGVPYmplY3QoKTsgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzQnVmZmVyPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7Ci0gICAgICAgIAot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ2FudmFzQnVmZmVyKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCBvKTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gQ2FudmFzQnVmZmVyX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzQnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J1
ZmZlci5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNC
dWZmZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi1tb2R1
bGUgaHRtbCB7Ci0gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc0J1
ZmZlciB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJh
eS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCeXRl
QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2Fu
dmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNCeXRlQXJyYXkuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIAotUGFzc1JlZlB0cjxDYW52YXNCeXRlQXJyYXk+IENhbnZhc0J5
dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6
ZW9mKHNpZ25lZCBjaGFyKSk7Ci0gICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7
Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0
ZShzaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBSZWZQdHI8Q2Fu
dmFzQnl0ZUFycmF5PiBhID0gQ2FudmFzQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgIGEtPnNldChpLCBh
cnJheVtpXSk7Ci0gICAgcmV0dXJuIGE7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5
PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBi
dWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoYnVmZmVyKSB7
Ci0gICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZh
bGlkIHJlZ2lvbiBvZgotICAgICAgICAvLyB0aGUgZ2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBz
dG9yYWdlLgotICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2Yoc2lnbmVkIGNo
YXIpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0J5dGVBcnJheShidWZm
ZXIsIG9mZnNldCwgbGVuZ3RoKSk7Ci19Ci0KLUNhbnZhc0J5dGVBcnJheTo6Q2FudmFzQnl0ZUFy
cmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCi0gICAgLCBt
X3NpemUobGVuZ3RoKQotewotfQotCi11bnNpZ25lZCBDYW52YXNCeXRlQXJyYXk6Omxlbmd0aCgp
IGNvbnN0IHsKLSAgICByZXR1cm4gbV9zaXplOwotfQotICAgIAotdW5zaWduZWQgQ2FudmFzQnl0
ZUFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKLSAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXpl
b2Yoc2lnbmVkIGNoYXIpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5oCShyZXZpc2lvbiA1MDYzNCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzQnl0ZUFycmF5X2gKLSNk
ZWZpbmUgQ2FudmFzQnl0ZUFycmF5X2gKLQotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCi0jaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzQXJyYXlCdWZmZXI7Ci0KLSAgICBjbGFz
cyBDYW52YXNCeXRlQXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQot
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J5dGVBcnJheT4g
Y3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNB
cnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAg
ICAgIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFkZHJlc3Mo
KSk7IH0KLQotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBz
ZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAg
aWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAotICAgICAgICAgICAgICAgIHZh
bHVlID0gMDsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8c2ln
bmVkIGNoYXI+OjptaW4oKSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2lnbmVkIGNoYXI+OjptaW4oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4g
c3RkOjpudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj46Om1heCgpKQotICAgICAgICAgICAgICAg
IHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj46Om1heCgpOwotICAgICAg
ICAgICAgc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcio+KG1f
YmFzZUFkZHJlc3MpOwotICAgICAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDxz
aWduZWQgY2hhcj4odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdl
dCh1bnNpZ25lZCBpbmRleCwgc2lnbmVkIGNoYXImIHJlc3VsdCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBzaWduZWQgY2hhciogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHNp
Z25lZCBjaGFyKj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICByZXN1bHQgPSBzdG9yYWdl
W2luZGV4XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
c2lnbmVkIGNoYXIgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAgICAgIHNpZ25lZCBjaGFyKiBz
dG9yYWdlID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXIqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAg
ICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKLSAgICAgICAgfQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIENhbnZhc0J5dGVBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZm
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAg
IH07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYW52YXNCeXRl
QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNCeXRlQXJyYXkuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmlkbAkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJheS5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1vZHVsZSBodG1sIHsK
LSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCi0gICAgICAg
IEhhc051bWVyaWNJbmRleEdldHRlciwKLSAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIsCi0g
ICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAotICAgICAgICBHZW5lcmF0ZUN1c3RvbUNv
bnN0cnVjdG9yLAotICAgICAgICBDdXN0b21Ub0pTCi0gICAgXSBDYW52YXNCeXRlQXJyYXkgOiBD
YW52YXNBcnJheSB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
RmxvYXRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNG
bG9hdEFycmF5LmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc0Zsb2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5j
bHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0g
ICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNGbG9hdEFycmF5OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZihmbG9h
dCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKLSAgICB9Ci0K
LSAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc0Zsb2F0QXJyYXk6OmNyZWF0
ZShmbG9hdCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBhID0gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAg
IGEtPnNldChpLCBhcnJheVtpXSk7Ci0gICAgICAgIHJldHVybiBhOwotICAgIH0KLQotICAgIFBh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQotICAgIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2
YWxpZCBhbGlnbm1lbnQuCi0gICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKGZsb2F0KSkgIT0g
MCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIGlmIChidWZmZXIpIHsKLSAg
ICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZh
bGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVy
J3Mgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihm
bG9hdCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBO
VUxMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzRmxvYXRB
cnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIAotICAgIENhbnZhc0Zs
b2F0QXJyYXk6OkNhbnZhc0Zsb2F0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4g
YnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogQ2FudmFzQXJy
YXkoYnVmZmVyLCBvZmZzZXQpCi0gICAgICAgICwgbV9zaXplKGxlbmd0aCkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHVuc2lnbmVkIENhbnZhc0Zsb2F0QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsK
LSAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIENh
bnZhc0Zsb2F0QXJyYXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbGVu
Z3RoKCkgKiBzaXplb2YoZmxvYXQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaAkocmV2aXNp
b24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYW52YXNGbG9h
dEFycmF5X2gKLSNkZWZpbmUgQ2FudmFzRmxvYXRBcnJheV9oCi0KLSNpbmNsdWRlICJDYW52YXNB
cnJheS5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzRmxvYXRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJh
eSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGbG9hdEFycmF5KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDYW52YXNGbG9hdEFycmF5PiBjcmVhdGUoZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgICAgIGZsb2F0KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQqPihiYXNlQWRkcmVzcygpKTsgfQotCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5
dGVzKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFt
cCBOYU4gdG8gMAotICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgIGZsb2F0
KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAg
ICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHZhbHVlKTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIGZsb2F0JiByZXN1
bHQpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgcmVzdWx0ID0gaXRlbShp
bmRleCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgZmxvYXQgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKLSAgICAgICAgICAgIGZsb2F0KiBzdG9yYWdl
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAgICAgIGZsb2F0
IHJlc3VsdCA9IHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICAgICAgaWYgKGlzbmFuKHJlc3VsdCkp
IHsKLSAgICAgICAgICAgICAgICAvLyBDbGFtcCBOYU4gdG8gMAotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgQ2FudmFzRmxvYXRBcnJheShQYXNzUmVmUHRy
PENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FudmFzRmxvYXRBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0Zsb2F0QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNGbG9hdEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwz
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZh
Y2UgWwotICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCi0gICAgICAgIEhhc051bWVyaWNJ
bmRleEdldHRlciwKLSAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIsCi0gICAgICAgIEdlbmVy
YXRlTmF0aXZlQ29udmVydGVyLAotICAgICAgICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAot
ICAgICAgICBDdXN0b21Ub0pTCi0gICAgXSBDYW52YXNGbG9hdEFycmF5IDogQ2FudmFzQXJyYXkg
ewotICAgIH07Ci19CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVy
LmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1l
YnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUgIkNh
bnZhc0ZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgi
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLVBhc3NSZWZQdHI8Q2FudmFzRnJhbWVidWZm
ZXI+IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBj
dHgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNGcmFtZWJ1ZmZlcihjdHgpKTsK
LX0KLQotQ2FudmFzRnJhbWVidWZmZXI6OkNhbnZhc0ZyYW1lYnVmZmVyKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRCogY3R4KQotICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKLXsKLSAgICBzZXRPYmpl
Y3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVGcmFtZWJ1ZmZlcigpKTsK
LX0KLQotdm9pZCBDYW52YXNGcmFtZWJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2Jq
ZWN0IG9iamVjdCkKLXsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0
ZUZyYW1lYnVmZmVyKG9iamVjdCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNGcmFtZWJ1ZmZlci5oCShyZXZpc2lv
biA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzRnJhbWVidWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYW52YXNGcmFt
ZWJ1ZmZlcl9oCi0jZGVmaW5lIENhbnZhc0ZyYW1lYnVmZmVyX2gKLQotI2luY2x1ZGUgIkNhbnZh
c09iamVjdC5oIgotCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2Fu
dmFzRnJhbWVidWZmZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgfkNhbnZhc0ZyYW1lYnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQotICAg
ICAgICAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IGNyZWF0
ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgot
ICAgICAgICBDYW52YXNGcmFtZWJ1ZmZlcihDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKLSAg
ICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmpl
Y3QpOwotICAgIH07Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBD
YW52YXNGcmFtZWJ1ZmZlcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1l
YnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1l
YnVmZmVyLmlkbAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0ZyYW1lYnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwyOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotbW9kdWxlIGh0bWwgewotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBD
YW52YXNGcmFtZWJ1ZmZlciB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzSW50QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzSW50QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5j
bHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJh
eT4gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCi0gICAgewotICAgICAg
ICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpj
cmVhdGUobGVuZ3RoICogc2l6ZW9mKGludCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZl
ciwgMCwgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBD
YW52YXNJbnRBcnJheTo6Y3JlYXRlKGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7
Ci0gICAgICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYSA9IENhbnZhc0ludEFycmF5OjpjcmVh
dGUobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQotICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKLSAgICAgICAgcmV0dXJuIGE7Ci0g
ICAgfQotCi0gICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzSW50QXJyYXk6OmNy
ZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0
cyBpbiB2YWxpZCBhbGlnbm1lbnQuCi0gICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKGludCkp
ICE9IDApCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBpZiAoYnVmZmVyKSB7
Ci0gICAgICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQg
YSB2YWxpZCByZWdpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1
ZmZlcidzIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXpl
b2YoaW50KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q2FudmFzSW50QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwotICAgIH0KLSAgICAKLSAg
ICBDYW52YXNJbnRBcnJheTo6Q2FudmFzSW50QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1
ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDogQ2Fu
dmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCi0gICAgICAgICwgbV9zaXplKGxlbmd0aCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIENhbnZhc0ludEFycmF5OjpsZW5ndGgoKSBjb25z
dCB7Ci0gICAgICAgIHJldHVybiBtX3NpemU7Ci0gICAgfQotICAgICAgICAKLSAgICB1bnNpZ25l
ZCBDYW52YXNJbnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBs
ZW5ndGgoKSAqIHNpemVvZihpbnQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ludEFycmF5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRBcnJheS5oCShyZXZpc2lvbiA1
MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYW52YXNJbnRBcnJheV9o
Ci0jZGVmaW5lIENhbnZhc0ludEFycmF5X2gKLQotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCi0j
aW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzSW50QXJyYXkgOiBwdWJsaWMgQ2Fu
dmFzQXJyYXkgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCBib29sIGlzSW50QXJyYXko
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXNJbnRBcnJheT4gY3JlYXRlKGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBjcmVhdGUoUGFz
c1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOwotCi0gICAgICAgIGludCogZGF0YSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludCo+
KGJhc2VBZGRyZXNzKCkpOyB9Ci0KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OwotCi0g
ICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKLSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1pbigpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgICAgICBpbnQqIHN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDxpbnQqPihtX2Jhc2VBZGRyZXNzKTsKLSAgICAgICAgICAgIHN0b3JhZ2Vb
aW5kZXhdID0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCBpbnQmIHJlc3VsdCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBpdGVtKGluZGV4KTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpbnQgaXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGluZGV4
IDwgbV9zaXplKTsKLSAgICAgICAgICAgIGludCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PGludCo+
KG1fYmFzZUFkZHJlc3MpOwotICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAg
ICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDYW52YXNJbnRBcnJheShQYXNzUmVmUHRy
PENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IHVuc2lnbmVkIG1fc2l6ZTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gQ2FudmFzSW50QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNJbnRBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNJbnRBcnJheS5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD0z
RF9DQU5WQVMsCi0gICAgICAgIEhhc051bWVyaWNJbmRleEdldHRlciwKLSAgICAgICAgSGFzQ3Vz
dG9tSW5kZXhTZXR0ZXIsCi0gICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAotICAgICAg
ICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAotICAgICAgICBDdXN0b21Ub0pTCi0gICAgXSBD
YW52YXNJbnRBcnJheSA6IENhbnZhc0FycmF5IHsKLSAgICB9OwotfQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNOdW1iZXJBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJDYW52YXNOdW1iZXJBcnJheS5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLVBhc3NSZWZQ
dHI8Q2FudmFzTnVtYmVyQXJyYXk+IENhbnZhc051bWJlckFycmF5OjpjcmVhdGUodW5zaWduZWQg
bGVuZ3RoKQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzTnVtYmVyQXJyYXkobGVu
Z3RoKSk7Ci19Ci0KLUNhbnZhc051bWJlckFycmF5OjpDYW52YXNOdW1iZXJBcnJheSh1bnNpZ25l
ZCBsZW5ndGgpCi0gICAgOiBtX2RhdGEobGVuZ3RoKQotewotfQotCi19Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNOdW1iZXJB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzTnVtYmVyQXJy
YXkuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc051bWJl
ckFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgQ2FudmFzTnVtYmVyQXJyYXlfaAotI2RlZmluZSBDYW52YXNOdW1iZXJBcnJheV9oCi0KLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPGxpbWl0cz4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi0gICAgY2xhc3MgU3RyaW5nOwotICAgIAotICAgIGNsYXNzIENhbnZhc051bWJl
ckFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzTnVtYmVyQXJyYXk+IHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc051bWJlckFycmF5PiBjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxmbG9hdD4mIGRhdGEo
KSB7IHJldHVybiBtX2RhdGE7IH0KLSAgICAgICAgY29uc3QgVmVjdG9yPGZsb2F0PiYgZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQotCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YS5zaXplKCk7IH0KLSAgICAgICAgZmxvYXQgaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gKGluZGV4ID49IG1fZGF0YS5zaXplKCkpID8gMCA6IG1f
ZGF0YVtpbmRleF07IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc051bWJlckFycmF5
KHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIFZlY3RvcjxmbG9hdD4gbV9kYXRhOwotICAgIH07
Ci0gICAgCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYW52YXNOdW1iZXJB
cnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc051bWJlckFycmF5LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc051bWJlckFycmF5LmlkbAko
cmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc051bWJlckFycmF5
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGh0
bWwgewotICAgIGludGVyZmFjZSBbCi0gICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKLSAg
ICAgICAgR2VuZXJhdGVDb25zdHJ1Y3RvciwKLSAgICAgICAgSGFzQ3VzdG9tSW5kZXhHZXR0ZXIK
LSAgICBdIENhbnZhc051bWJlckFycmF5IHsKLSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgIH07Ci19CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNPYmplY3QuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQotI2luY2x1ZGUg
IkNhbnZhc09iamVjdC5oIgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1DYW52YXNPYmplY3Q6OkNhbnZhc09iamVjdChD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpCi0gICAgOiBtX29iamVjdCgwKQotICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCi17Ci19Ci0KLUNhbnZhc09iamVjdDo6fkNhbnZhc09iamVj
dCgpCi17Ci0gICAgaWYgKG1fY29udGV4dCkKLSAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVPYmpl
Y3QodGhpcyk7Ci19Ci0KLXZvaWQgQ2FudmFzT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCi17Ci0gICAgaWYgKG9iamVjdCA9PSBtX29iamVjdCkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBkZWxldGVPYmplY3QoKTsKLSAgICBtX29iamVjdCA9IG9iamVj
dDsKLX0KLQotdm9pZCBDYW52YXNPYmplY3Q6OmRlbGV0ZU9iamVjdCgpCi17Ci0gICAgaWYgKG1f
b2JqZWN0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgICAgICAg
ICBfZGVsZXRlT2JqZWN0KG1fb2JqZWN0KTsKLSAgICAgICAgfQotICAgICAgICBtX29iamVjdCA9
IDA7Ci0gICAgfQotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc09iamVjdC5oCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzT2JqZWN0X2gKLSNkZWZpbmUgQ2FudmFzT2JqZWN0
X2gKLQotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDsKLSAgICAKLSAgICBj
bGFzcyBDYW52YXNPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNPYmplY3Q+IHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNhbnZhc09iamVjdCgpOwotICAgICAgICAKLSAg
ICAgICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsg
fQotICAgICAgICB2b2lkIHNldE9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICAgICAgdm9p
ZCBkZWxldGVPYmplY3QoKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgZGV0YWNoQ29udGV4dCgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZU9iamVjdCgpOwotICAgICAgICAgICAgbV9j
b250ZXh0ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQotCi0gICAgcHJvdGVjdGVk
OgotICAgICAgICBDYW52YXNPYmplY3QoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKLSAg
ICAKLSAgICBwcml2YXRlOgotICAgICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OwotICAg
ICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIG1fY29udGV4dDsKLSAgICB9OwotICAgIAot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FudmFzT2JqZWN0X2gKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNQcm9ncmFtLmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1QYXNz
UmVmUHRyPENhbnZhc1Byb2dyYW0+IENhbnZhc1Byb2dyYW06OmNyZWF0ZShDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QqIGN0eCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1Byb2dy
YW0oY3R4KSk7Ci19Ci0KLUNhbnZhc1Byb2dyYW06OkNhbnZhc1Byb2dyYW0oQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKiBjdHgpCi0gICAgOiBDYW52YXNPYmplY3QoY3R4KQotewotICAgIHNldE9i
amVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVByb2dyYW0oKSk7Ci19
Ci0KLXZvaWQgQ2FudmFzUHJvZ3JhbTo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9i
amVjdCkKLXsKLSAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZVByb2dy
YW0ob2JqZWN0KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5oCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc1Byb2dyYW1faAotI2RlZmluZSBDYW52YXNQ
cm9ncmFtX2gKLQotI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgotCi0jaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzUHJvZ3JhbSA6IHB1YmxpYyBDYW52YXNPYmpl
Y3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FudmFzUHJvZ3JhbSgpIHsgZGVs
ZXRlT2JqZWN0KCk7IH0KLSAgICAgICAgCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c1Byb2dyYW0+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKLSAgICAgICAgCi0g
ICAgcHJvdGVjdGVkOgotICAgICAgICBDYW52YXNQcm9ncmFtKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRCopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxh
dGZvcm0zRE9iamVjdCk7Ci0gICAgfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIENhbnZhc1Byb2dyYW1faApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNQcm9ncmFtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1By
b2dyYW0uaWRsCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UHJvZ3JhbS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1v
ZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFz
UHJvZ3JhbSB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJidWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0j
aW5jbHVkZSAiQ2FudmFzUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLVBhc3NSZWZQdHI8Q2Fu
dmFzUmVuZGVyYnVmZmVyPiBDYW52YXNSZW5kZXJidWZmZXI6OmNyZWF0ZShDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QqIGN0eCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1JlbmRl
cmJ1ZmZlcihjdHgpKTsKLX0KLQotQ2FudmFzUmVuZGVyYnVmZmVyOjpDYW52YXNSZW5kZXJidWZm
ZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjdHgpCi0gICAgOiBDYW52YXNPYmplY3QoY3R4
KQotewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0
ZVJlbmRlcmJ1ZmZlcigpKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJidWZmZXI6Ol9kZWxldGVP
YmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCi17Ci0gICAgY29udGV4dCgpLT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5kZWxldGVSZW5kZXJidWZmZXIob2JqZWN0KTsKLX0KLQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCi0jZGVmaW5lIENhbnZhc1JlbmRlcmJ1
ZmZlcl9oCi0KLSNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKLQotI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIAotICAgIGNsYXNzIENhbnZhc1JlbmRlcmJ1ZmZlciA6IHB1YmxpYyBDYW52YXNP
YmplY3QgewotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyYnVmZmVy
KCkgeyBkZWxldGVPYmplY3QoKTsgfQotICAgICAgICAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7
Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgQ2FudmFzUmVuZGVyYnVmZmVyKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRCopOwotICAgICAgICAKLSAgICAgICAgdmlydHVhbCB2b2lk
IF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgfTsKLSAgICAKLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJidWZmZXIuaWRsCShyZXZpc2lvbiA1MDYz
NCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyYnVmZmVyLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGh0bWwgewotICAgIGlu
dGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNSZW5kZXJidWZmZXIgewotICAg
IH07Ci19CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNTYxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQotCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJD
YW52YXNBY3RpdmVJbmZvLmgiCi0jaW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgiCi0jaW5jbHVkZSAi
Q2FudmFzRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNQcm9ncmFtLmgiCi0jaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIkNhbnZhc1NoYWRlci5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0j
aW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcykK
LXsKLSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0Q6OmNyZWF0ZSgpKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotICAg
ICAgICAKLSAgICByZXR1cm4gbmV3IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChjYW52YXMsIGNv
bnRleHQucmVsZWFzZSgpKTsKLX0KLQotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKLSAgICA6IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQocGFzc2VkQ2FudmFzKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX25l
ZWRzVXBkYXRlKHRydWUpCi0gICAgLCBtX21hcmtlZENhbnZhc0RpcnR5KGZhbHNlKQotewotICAg
IEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKLX0KLQotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKCkKLXsKLSAgICBkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjptYXJrQ29udGV4
dENoYW5nZWQoKQotewotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICBpZiAo
Y2FudmFzKCktPnJlbmRlckJveCgpICYmIGNhbnZhcygpLT5yZW5kZXJCb3goKS0+aGFzTGF5ZXIo
KSkgewotICAgICAgICBjYW52YXMoKS0+cmVuZGVyQm94KCktPmxheWVyKCktPnJlbmRlcmVyQ29u
dGVudENoYW5nZWQoKTsKLSAgICB9IGVsc2UgewotI2VuZGlmCi0gICAgICAgIGlmICghbV9tYXJr
ZWRDYW52YXNEaXJ0eSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBp
bWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgotICAgICAgICAgICAgY2FudmFzKCktPmJ1ZmZlcigp
OwotICAgICAgICAgICAgY2FudmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMo
KS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmJlZ2luUGFpbnQoKQotewotICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAg
IG1fY29udGV4dC0+YmVnaW5QYWludCh0aGlzKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjplbmRQYWludCgpCi17Ci0gICAgaWYgKG1fbWFya2VkQ2FudmFzRGly
dHkpIHsKLSAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICBtX2Nv
bnRleHQtPmVuZFBhaW50KCk7Ci0gICAgfQotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgaWYgKG1fbmVlZHNV
cGRhdGUpIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0gICAgICAgIGlmIChj
YW52YXMoKS0+cmVuZGVyQm94KCkgJiYgY2FudmFzKCktPnJlbmRlckJveCgpLT5oYXNMYXllcigp
KQotICAgICAgICAgICAgY2FudmFzKCktPnJlbmRlckJveCgpLT5sYXllcigpLT5yZW5kZXJlckNv
bnRlbnRDaGFuZ2VkKCk7Ci0jZW5kaWYKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwot
ICAgIH0KLSAgICAKLSAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci19Ci0K
LWludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNpemVJbkJ5dGVzKGludCB0eXBlLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5zaXplSW5CeXRl
cyh0eXBlKTsKLSAgICBpZiAocmVzdWx0IDw9IDApIHsKLSAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpCi17Ci0gICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphdHRhY2hT
aGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkg
IT0gdGhpcyB8fCAhc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAg
ICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBt
X2NvbnRleHQtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpiaW5kQXR0cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9u
ZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMg
PSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0J1ZmZlciogYnVm
ZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBidWZm
ZXIpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRh
cmdldCwgQ2FudmFzRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBidWZmZXIpOwotICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIq
IHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHJlbmRlckJ1ZmZl
ciAmJiByZW5kZXJCdWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5i
aW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyQnVmZmVyKTsKLSAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzVGV4dHVyZSogdGV4dHVy
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4
dHVyZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdy
ZWVuLCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKQotewotICAgIG1fY29udGV4dC0+YmxlbmRD
b2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kRXF1
YXRpb24oIHVuc2lnbmVkIGxvbmcgbW9kZSApCi17Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0
aW9uKG1vZGUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSkKLXsKLSAgICBtX2NvbnRl
eHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcg
ZGZhY3RvcikKLXsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfSAgICAgICAKLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
c3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5z
aWduZWQgbG9uZyBkc3RBbHBoYSkKLXsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRl
KHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpi
dWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1
c2FnZSkKLXsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7
Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZh
c0FycmF5KiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlKQotewotICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YSh0YXJnZXQsIGRhdGEsIHVzYWdlKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YnVmZmVyU3Vi
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc0FycmF5KiBkYXRh
KQotewotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgZGF0YSk7
Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdW5zaWduZWQgbG9u
ZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWdu
ZWQgbG9uZyB0YXJnZXQpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyh0YXJnZXQpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhcih1bnNpZ25lZCBsb25nIG1h
c2spCi17Ci0gICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwodHJ1ZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVh
ckNvbG9yKGRvdWJsZSByLCBkb3VibGUgZywgZG91YmxlIGIsIGRvdWJsZSBhKQotewotICAgIGlm
IChpc25hbihyKSkKLSAgICAgICAgciA9IDA7Ci0gICAgaWYgKGlzbmFuKGcpKQotICAgICAgICBn
ID0gMDsKLSAgICBpZiAoaXNuYW4oYikpCi0gICAgICAgIGIgPSAwOwotICAgIGlmIChpc25hbihh
KSkKLSAgICAgICAgYSA9IDE7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkKLXsKLSAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwo
bG9uZyBzKQotewotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpjb2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBo
YSkKLXsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgp
ICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Y29weVRleEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25l
ZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpCi17Ci0gICAg
bV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29weVRleFN1
YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwg
bG9uZyB5b2Zmc2V0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpCi17Ci0gICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi1QYXNzUmVmUHRyPENhbnZhc0J1
ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIoKQotewotICAgIFJl
ZlB0cjxDYW52YXNCdWZmZXI+IG8gPSBDYW52YXNCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBh
ZGRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0gICAgICAgIAotUGFzc1JlZlB0
cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVGcmFt
ZWJ1ZmZlcigpCi17Ci0gICAgUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBvID0gQ2FudmFzRnJh
bWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAgICBSZWZQdHI8Q2FudmFzVGV4dHVyZT4gbyA9
IENhbnZhc1RleHR1cmU6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQoKSk7Ci0g
ICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBSZWZQdHI8Q2FudmFzUHJvZ3Jh
bT4gbyA9IENhbnZhc1Byb2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRPYmplY3Qoby5nZXQo
KSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgUmVm
UHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gbyA9IENhbnZhc1JlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOwotICAgIGFkZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1Jl
ZlB0cjxDYW52YXNTaGFkZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVy
KHVuc2lnbmVkIGxvbmcgdHlwZSkKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbmNsdWRlIEdM
XyBjb25zdGFudHMgZm9yIGludGVybmFsIHVzZQotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRvIHBh
cmFtIGNoZWNraW5nIGFuZCB0aHJvdyBleGNlcHRpb24gaWYgYW4gaWxsZWdhbCB2YWx1ZSBpcyBw
YXNzZWQgaW4KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI7Ci0gICAgaWYgKHR5cGUgPT0gMHg4QjMw
KSAvLyBHTF9GUkFHTUVOVF9TSEFERVIKLSAgICAgICAgc2hhZGVyVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFHTUVOVF9TSEFERVI7Ci0gICAgICAgIAotICAgIFJlZlB0cjxDYW52YXNTaGFk
ZXI+IG8gPSBDYW52YXNTaGFkZXI6OmNyZWF0ZSh0aGlzLCBzaGFkZXJUeXBlKTsKLSAgICBhZGRP
YmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpjdWxsRmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCi17Ci0gICAgbV9jb250ZXh0
LT5jdWxsRmFjZShtb2RlKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKENhbnZhc0J1
ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZl
cikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
ZnJhbWVidWZmZXItPmRlbGV0ZU9iamVjdCgpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGlm
ICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHByb2dyYW0tPmRlbGV0ZU9i
amVjdCgpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVy
YnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQotewotICAgIGlmICghcmVu
ZGVyYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgcmVuZGVyYnVmZmVyLT5kZWxl
dGVPYmplY3QoKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNo
YWRlcihDYW52YXNTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlcikKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHNoYWRlci0+ZGVsZXRlT2JqZWN0KCk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKENhbnZhc1RleHR1cmUqIHRleHR1
cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdGV4
dHVyZS0+ZGVsZXRlT2JqZWN0KCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQotewotICAgIG1fY29udGV4dC0+ZGVwdGhG
dW5jKGZ1bmMpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0aE1hc2soYm9vbCBmbGFnKQotewotICAg
IG1fY29udGV4dC0+ZGVwdGhNYXNrKGZsYWcpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0aFJhbmdl
KGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCi17Ci0gICAgbV9jb250ZXh0LT5kZXB0aFJhbmdl
KHpOZWFyLCB6RmFyKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKENhbnZhc1Byb2dy
YW0qIHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIXNoYWRl
ciB8fCBzaGFkZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNN
QVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kZXRhY2hT
aGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwotfQotCi0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkaXNhYmxlKHVuc2ln
bmVkIGxvbmcgY2FwKQotewotICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKLXsK
LSAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci0gICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6ZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxv
bmcgY291bnQpCi17Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3Vu
dCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwotfQotCi12b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5z
aWduZWQgbG9uZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCkKLXsKLSAg
ICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKLSAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCi17Ci0gICAgbV9jb250ZXh0
LT5lbmFibGUoY2FwKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZW5hYmxlVmVydGV4QXR0cmliQXJyYXko
dW5zaWduZWQgbG9uZyBpbmRleCkKLXsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KGluZGV4KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZmluaXNoKCkKLXsKLSAgICBtX2NvbnRl
eHQtPmZpbmlzaCgpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKLX0KLQot
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Zmx1c2goKQotewotICAgIG1fY29udGV4
dC0+Zmx1c2goKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7Ci19Ci0KLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25n
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgQ2FudmFzUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhp
cykgewotICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwotICAgICAgICByZXR1cm47Ci0g
ICAgfSAgICAgICAKLSAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdl
dCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXIpOwotICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgQ2FudmFzVGV4dHVyZSog
dGV4dHVyZSwgbG9uZyBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKHRleHR1
cmUgJiYgdGV4dHVyZS0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01J
U01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCi17
Ci0gICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdlbmVy
YXRlTWlwbWFwKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQotewotICAgIG1fY29udGV4dC0+Z2VuZXJh
dGVNaXBtYXAodGFyZ2V0KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwot
fQotCi1QYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0QWN0aXZlQXR0cmliKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICBp
ZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIW1fY29udGV4dC0+
Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKSkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIENhbnZh
c0FjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotUGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlm
ICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhbV9jb250ZXh0LT5n
ZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKSkgewotICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIENhbnZh
c0FjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRpb24oQ2FudmFz
UHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIHJldHVybiBtX2Nv
bnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOwotfQotCi1ib29sIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVhbih1bnNpZ25lZCBsb25nIHBuYW1lKQotewot
ICAgIGJvb2wgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRCb29sZWFuKHBuYW1lKTsKLSAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBh
c3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSkKLXsKLSAgICBSZWZQdHI8Q2FudmFz
VW5zaWduZWRCeXRlQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSk7
Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7
Ci19Ci0KLWludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcmko
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgaW50IHJl
c3VsdCA9IG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKLSAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUpCi17Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+
Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAgcmV0dXJuIG1fY29u
dGV4dC0+Z2V0RXJyb3IoKTsKLX0KLQotZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
ZXRGbG9hdCh1bnNpZ25lZCBsb25nIHBuYW1lKQotewotICAgIGZsb2F0IHJlc3VsdCA9IG1fY29u
dGV4dC0+Z2V0RmxvYXQocG5hbWUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1l
KQotewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAg
IHJldHVybiBhcnJheTsKLX0KLQotaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQotewotICAgIGludCByZXN1
bHQgPSBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1f
Y29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAg
ICByZXR1cm4gYXJyYXk7Ci19Ci0KLWludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldElu
dGVnZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKLXsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRl
eHQtPmdldEludGVnZXIocG5hbWUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1l
KQotewotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAg
IHJldHVybiBhcnJheTsKLX0KLQotaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAh
PSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFByb2dyYW1pKHBy
b2dyYW0sIHBuYW1lKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghcHJvZ3Jh
bSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewotICAgICAgICBlYyA9IFRZUEVfTUlT
TUFUQ0hfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgUmVmUHRyPENhbnZhc0lu
dEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lKTsK
LSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiBhcnJheTsK
LX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2co
Q2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFw
cm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gICAgU3RyaW5nIHMg
PSBtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLWludCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4
dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKLSAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCi17Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWludCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlcmkoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghc2hhZGVyIHx8
IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGludCByZXN1bHQgPSBtX2NvbnRl
eHQtPmdldFNoYWRlcmkoc2hhZGVyLCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNzUmVmUHRyPENhbnZhc0lu
dEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFNoYWRlcml2KENhbnZhc1NoYWRl
ciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBpZiAoIXNoYWRlciB8fCBzaGFkZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQ
dHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRTaGFkZXJpdihzaGFkZXIs
IHBuYW1lKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVy
biBhcnJheTsKLX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVy
SW5mb0xvZyhDYW52YXNTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFzaGFkZXIgfHwgc2hhZGVyLT5jb250ZXh0KCkgIT0gdGhpcykgewotICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOwotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfQotICAgIFN0cmlu
ZyBzID0gbV9jb250ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Ci0gICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gczsKLX0KLQotU3RyaW5nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKENhbnZhc1NoYWRlciogc2hhZGVy
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXNoYWRlciB8fCBzaGFkZXItPmNvbnRl
eHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAg
IHJldHVybiAiIjsKLSAgICB9Ci0gICAgU3RyaW5nIHMgPSBtX2NvbnRleHQtPmdldFNoYWRlclNv
dXJjZShzaGFkZXIpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAg
cmV0dXJuIHM7Ci19Ci0KLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFN0cmlu
Zyh1bnNpZ25lZCBsb25nIG5hbWUpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5n
KG5hbWUpOwotfQotCi1mbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFt
ZXRlcmYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAg
ZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHBuYW1lKQotewotICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29u
dGV4dC0+Z2V0VGV4UGFyYW1ldGVyZnYodGFyZ2V0LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWludCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0
VGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgUmVmUHRyPENhbnZh
c0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4g
YXJyYXk7Ci19Ci0KLWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYo
Q2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0g
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1mKHByb2dyYW0sIGxvY2F0
aW9uKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRVbmlmb3JtZnYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2Nh
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0t
PmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbik7Ci0gICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWxv
bmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXBy
b2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGxvbmcgcmVzdWx0
ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtaShwcm9ncmFtLCBsb2NhdGlvbik7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNz
UmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZv
cm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMp
IHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFVu
aWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKLSAgICByZXR1cm4gYXJyYXk7Ci19Ci0KLWxvbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXByb2dyYW0gfHwg
cHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKLX0KLQotZmxvYXQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJmKGluZGV4LCBwbmFtZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1QYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJy
YXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKLXsKLSAgICBSZWZQdHI8Q2FudmFzRmxv
YXRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYmZ2KGluZGV4LCBwbmFt
ZSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLSAgICByZXR1cm4gYXJy
YXk7Ci19Ci0KLWxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJp
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCi17Ci0gICAgbG9uZyBy
ZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYmkoaW5kZXgsIHBuYW1lKTsKLSAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
VmVydGV4QXR0cmliaXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
LXsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0
ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Ci0gICAgcmV0dXJuIGFycmF5OwotfQotCi1sb25nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVk
IGxvbmcgcG5hbWUpCi17Ci0gICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0
dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSkKLXsK
LSAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwotfQotCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNC
dWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlcik7
Ci19Ci0KLWJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0VuYWJsZWQodW5zaWduZWQg
bG9uZyBjYXApCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Ci19Ci0K
LWJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKENhbnZhc0ZyYW1l
YnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVm
ZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omlz
UHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIHJldHVybiBtX2NvbnRleHQt
PmlzUHJvZ3JhbShwcm9ncmFtKTsKLX0KLQotYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQotewotICAg
IHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLWJv
b2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc1NoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRl
cikKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXIpOwotfQotCi1ib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNUZXh0dXJlKENhbnZhc1RleHR1cmUqIHRleHR1
cmUpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0dXJlKHRleHR1cmUpOwotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6bGluZVdpZHRoKGRvdWJsZSB3aWR0aCkKLXsK
LSAgICBtX2NvbnRleHQtPmxpbmVXaWR0aCgoZmxvYXQpIHdpZHRoKTsKLSAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6bGlua1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7Ci0g
ICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgICAgIAotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ocHJvZ3JhbSk7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUsIGxvbmcgcGFyYW0pCi17Ci0g
ICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojpwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cykKLXsKLSAgICBtX2Nv
bnRleHQtPnBvbHlnb25PZmZzZXQoKGZsb2F0KSBmYWN0b3IsIChmbG9hdCkgdW5pdHMpOwotICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLVBhc3NSZWZQdHI8Q2FudmFz
QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxv
bmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpCi17Ci0gICAgUmVmUHRyPENhbnZhc0FycmF5
PiBhcnJheSA9IG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci0gICAgcmV0
dXJuIGFycmF5OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKLXsKLSAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigp
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1
bnNpZ25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3Jh
Z2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCi17Ci0gICAgbV9j
b250ZXh0LT5zYW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCkKLXsKLSAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNo
YWRlciwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlm
ICghc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZWMgPSBU
WVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQt
PnNoYWRlclNvdXJjZShzaGFkZXIsIHN0cmluZyk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxG
dW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKLXsK
LSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBs
b25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0gICAgbV9jb250ZXh0
LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLSAgICBtX2NvbnRleHQt
PnN0ZW5jaWxNYXNrKG1hc2spOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBtYXNrKQotewotICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3Rl
bmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQg
bG9uZyB6cGFzcykKLXsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBh
c3MpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZh
Y2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9u
ZyB6cGFzcykKLXsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWws
IHpmYWlsLCB6cGFzcyk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0K
LQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBw
aXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGln
bm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJv
cmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVy
bmVkCi0gICAgZWMgPSAwOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1h
Z2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVtZW50KiBp
bWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIGlmICghaW1hZ2UpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGltYWdlLT5jYWNoZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVy
bmVkCi0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNhY2hlZEltYWdl
LT5pbWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRl
eEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmICghY2FudmFzKSB7Ci0gICAgICAgIGVjID0gVFlQRV9NSVNNQVRD
SF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKLSAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgYnVmZmVyLT5pbWFnZSgpLCBm
bGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQodW5z
aWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBG
b3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB2aWRlbywgZmxpcFksIHByZW11bHRp
cGx5QWxwaGEpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBhcmFtKQotewotICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFt
ZXRlcmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKQotewotICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci0gICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
dW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBm
b3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVy
bmVkCi0gICAgZWMgPSAwOwotICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVs
cyk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVy
cm9ycyByZXR1cm5lZAotICAgIGVjID0gMDsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0K
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgaWYgKCFp
bWFnZSkgewotICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIAotICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNo
ZWRJbWFnZSgpOwotICAgIGlmICghY2FjaGVkSW1hZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgZmxpcFksIHByZW11bHRpcGx5
QWxwaGEpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwg
dW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwg
dW5zaWduZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKCFj
YW52YXMpIHsKLSAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIo
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgbV9jb250ZXh0LT50
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGJ1ZmZlci0+aW1hZ2UoKSwgZmxpcFksIHByZW11bHRpcGx5QWxwaGEpOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIHZpZGVvLCBmbGlwWSwg
cHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
LX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZihsb25nIGxvY2F0
aW9uLCBmbG9hdCB4KQotewotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsK
LSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFy
cmF5KiB2KQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOwotICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6
ZSkKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQg
aW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgbV9jb250ZXh0
LT51bmlmb3JtMWZ2KGxvY2F0aW9uLCB2LCBzaXplKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTFpKGxvbmcgbG9jYXRpb24sIGludCB4KQotewotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxv
Y2F0aW9uLCB4KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBD
YW52YXNJbnRBcnJheSogdikKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBu
byBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5
IHBhc3NlZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24sIHYsIHNpemUpOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm0yZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdikKLXsKLSAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0g
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBi
ZSBhIG11bHRpcGxlIG9mIDIKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyAyKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJmdihs
b25nIGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IHdlIG5l
ZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCi0gICAgaWYgKCF2KQotICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0
aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLCB2LCBzaXplIC8g
Mik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50
IHkpCi17Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOwotICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KQot
ewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgot
ICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMgotICAgIG1fY29udGV4dC0+dW5pZm9ybTJp
dihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDIpOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCi17Ci0gICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCi0gICAgaWYgKCF2
KQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiAyCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9u
LCB2LCBzaXplIC8gMik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0K
LQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9u
LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQotewotICAgIG1fY29udGV4dC0+dW5pZm9ybTNm
KGxvY2F0aW9uLCB4LCB5LCB6KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxv
Y2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRv
IHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUg
b2YgMwotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSAvIDMpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0K
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24s
IGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBp
ZiBubyBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDMKLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKLSAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopCi17
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9jYXRpb24sIHgsIHksIHopOwotICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KQotewot
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgotICAg
IGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMwotICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihs
b2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDMpOwotICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCi17Ci0gICAgLy8gRklY
TUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCi0gICAgaWYgKCF2KQot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8g
YmUgYSBtdWx0aXBsZSBvZiAzCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2
LCBzaXplIC8gMyk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KQotewotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRm
dihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQotewotICAgIC8vIEZJWE1FOiB3
ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgotICAgIGlmICghdikKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEg
bXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgdi0+ZGF0
YSgpLCB2LT5sZW5ndGgoKSAvIDQpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGZ2KGxvbmcg
bG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0
byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDQKLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24sIHYsIHNpemUgLyA0KTsK
LSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwg
aW50IHosIGludCB3KQotewotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5
LCB6LCB3KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBDYW52
YXNJbnRBcnJheSogdikKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBh
cnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDQKLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsK
LSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBz
aXplKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3Nl
ZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRpdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5
KiB2KQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3Nl
ZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAotICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
IC8gNCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogd2Ug
bmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11
bHRpcGxlIG9mIDQKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgc2l6ZSAvIDQpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2
KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5KiB2KQotewot
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgotICAg
IGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVuZ3Ro
IG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gOSk7Ci0g
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0
aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KLSAgICBpZiAoIXYpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDkKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
diwgc2l6ZSAvIDkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0K
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5KiB2KQotewotICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgotICAgIGlmICghdikK
LSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRv
IGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9j
YXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDE2KTsKLSAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
ZmxvYXQqIHYsIGludCBzaXplKQotewotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlm
IG5vIGFycmF5IHBhc3NlZCBpbgotICAgIGlmICghdikKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYKLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6
ZSAvIDE2KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dXNlUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9n
cmFtKQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmFsaWRhdGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgbV9j
b250ZXh0LT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRl
eEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCi17Ci0gICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjFmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCi17Ci0gICAgLy8g
RklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0
ZSBiZWluZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2LT5kYXRh
KCkpOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4
LCBmbG9hdCogdiwgaW50IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJl
IGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVTRURf
UEFSQU0oc2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5keCwg
dik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcgaW5keCwg
ZmxvYXQgdjAsIGZsb2F0IHYxKQotewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYoaW5k
eCwgdjAsIHYxKTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZHgsIHYtPmRhdGEoKSk7Ci0gICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQg
c2l6ZSkKLXsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVu
b3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAotICAgIFVOVVNFRF9QQVJBTShzaXplKTsKLSAg
ICAKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmdihpbmR4LCB2KTsKLSAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQg
djEsIGZsb2F0IHYyKQotewotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5keCwgdjAs
IHYxLCB2Mik7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25n
IGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFr
ZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmR4LCB2LT5kYXRhKCkpOwotICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdiwgaW50IHNp
emUpCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91
Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0gICAg
Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdik7Ci0gICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYx
LCBmbG9hdCB2MiwgZmxvYXQgdjMpCi17Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0Zihp
bmR4LCB2MCwgdjEsIHYyLCB2Myk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdih1
bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCi17Ci0gICAgLy8gRklYTUU6
IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWlu
ZyBzZXQKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2LT5kYXRhKCkpOwot
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9h
dCogdiwgaW50IHNpemUpCi17Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gbWFrZSBzdXJlIGFycmF5
IGlzIGJpZyBlbm91Z2ggZm9yIGF0dHJpYnV0ZSBiZWluZyBzZXQKLSAgICBVTlVTRURfUEFSQU0o
c2l6ZSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwgdik7Ci0g
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKLX0KLQotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBs
b25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBs
b25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zm
c2V0KTsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwotfQotCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVk
IGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQotewotICAgIGlmIChpc25hbih4KSkK
LSAgICAgICAgeCA9IDA7Ci0gICAgaWYgKGlzbmFuKHkpKQotICAgICAgICB5ID0gMDsKLSAgICBp
ZiAoaXNuYW4od2lkdGgpKQotICAgICAgICB3aWR0aCA9IDEwMDsKLSAgICBpZiAoaXNuYW4oaGVp
Z2h0KSkKLSAgICAgICAgaGVpZ2h0ID0gMTAwOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
LX0KLQotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnJlbW92ZU9iamVjdChDYW52YXNP
YmplY3QqIG9iamVjdCkKLXsKLSAgICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphZGRPYmplY3QoQ2FudmFzT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7Ci0gICAgbV9jYW52YXNPYmpl
Y3RzLmFkZChvYmplY3QpOwotfQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGV0
YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpCi17Ci0gICAgSGFzaFNldDxDYW52YXNPYmplY3QqPjo6
aXRlcmF0b3IgcGVuZCA9IG1fY2FudmFzT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8
Q2FudmFzT2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7IGl0
ICE9IHBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7Ci0gICAgICAg
IAotICAgIG1fY2FudmFzT2JqZWN0cy5jbGVhcigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQotCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgJKHJldmlzaW9uIDUwNjM0KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzMjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEX2gKLSNkZWZpbmUgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEX2gKLQotI2lu
Y2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2Rl
LmgiCi0jaW5jbHVkZSAiQ2FudmFzRmxvYXRBcnJheS5oIgotI2luY2x1ZGUgIkNhbnZhc0ludEFy
cmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FudmFzQWN0aXZlSW5mbzsKLWNsYXNzIENhbnZhc0J1
ZmZlcjsKLWNsYXNzIENhbnZhc0ZyYW1lYnVmZmVyOwotY2xhc3MgQ2FudmFzT2JqZWN0OwotY2xh
c3MgQ2FudmFzUHJvZ3JhbTsKLWNsYXNzIENhbnZhc1JlbmRlcmJ1ZmZlcjsKLWNsYXNzIENhbnZh
c1NoYWRlcjsKLWNsYXNzIENhbnZhc1RleHR1cmU7Ci1jbGFzcyBIVE1MSW1hZ2VFbGVtZW50Owot
Y2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIFdlYktpdENT
U01hdHJpeDsKLQotICAgIGNsYXNzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCA6IHB1YmxpYyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
T3duUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50
Kik7Ci0gICAgICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCgpOwotCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAg
IC8vIEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlw
ZXMKLSAgICAgICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCi0gICAgICAgIGludCBz
aXplSW5CeXRlcyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwotCi0gICAgICAgIHZvaWQg
YWN0aXZlVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRleHR1cmUpOwotICAgICAgICB2b2lkIGF0dGFj
aFNoYWRlcihDYW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMp
OwotICAgICAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgdW5zaWdu
ZWQgbG9uZyBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0g
ICAgICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQnVmZmVy
KiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgQ2FudmFzRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7
Ci0gICAgICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2Fu
dmFzUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICB2b2lkIGJpbmRU
ZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiwgRXhjZXB0aW9uQ29k
ZSYgZWMpOwotICAgICAgICB2b2lkIGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVu
LCBkb3VibGUgYmx1ZSwgZG91YmxlIGFscGhhKTsKLSAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9u
KHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwotICAgICAg
ICB2b2lkIGJsZW5kRnVuYyh1bnNpZ25lZCBsb25nIHNmYWN0b3IsIHVuc2lnbmVkIGxvbmcgZGZh
Y3Rvcik7Ci0gICAgICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNS
R0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25l
ZCBsb25nIGRzdEFscGhhKTsKLQotICAgICAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKLSAgICAgICAgdm9pZCBi
dWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0YSwgdW5zaWdu
ZWQgbG9uZyB1c2FnZSk7Ci0gICAgICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc0FycmF5KiBkYXRhKTsKLQotICAgICAgICB1bnNp
Z25lZCBsb25nIGNoZWNrRnJhbWVidWZmZXJTdGF0dXModW5zaWduZWQgbG9uZyB0YXJnZXQpOwot
ICAgICAgICB2b2lkIGNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzayk7Ci0gICAgICAgIHZvaWQgY2xl
YXJDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxw
aGEpOwotICAgICAgICB2b2lkIGNsZWFyRGVwdGgoZG91YmxlKTsKLSAgICAgICAgdm9pZCBjbGVh
clN0ZW5jaWwobG9uZyk7Ci0gICAgICAgIHZvaWQgY29sb3JNYXNrKGJvb2wgcmVkLCBib29sIGdy
ZWVuLCBib29sIGJsdWUsIGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIGNvbXBpbGVTaGFkZXIo
Q2FudmFzU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICAKLSAgICAgICAgLy92
b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVs
LCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIsIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBj
b25zdCB2b2lkKiBkYXRhKTsKLSAgICAgICAgLy92b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxvbmcgeW9m
ZnNldCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVk
IGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7
Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxv
bmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9y
ZGVyKTsKLSAgICAgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxvbmcgeCwgbG9uZyB5
LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0KLSAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBQYXNzUmVm
UHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgICAgICBQYXNz
UmVmUHRyPENhbnZhc1Byb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgICAgICBQYXNz
UmVmUHRyPENhbnZhc1NoYWRlcj4gY3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSk7Ci0g
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwotCi0gICAg
ICAgIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKLQotICAgICAgICB2b2lkIGRl
bGV0ZUJ1ZmZlcihDYW52YXNCdWZmZXIqKTsKLSAgICAgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZl
cihDYW52YXNGcmFtZWJ1ZmZlciopOwotICAgICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oQ2FudmFz
UHJvZ3JhbSopOwotICAgICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihDYW52YXNSZW5kZXJi
dWZmZXIqKTsKLSAgICAgICAgdm9pZCBkZWxldGVTaGFkZXIoQ2FudmFzU2hhZGVyKik7Ci0gICAg
ICAgIHZvaWQgZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJlKik7Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIGRlcHRoRnVuYyh1bnNpZ25lZCBsb25nKTsKLSAgICAgICAgdm9pZCBkZXB0aE1hc2so
Ym9vbCk7Ci0gICAgICAgIHZvaWQgZGVwdGhSYW5nZShkb3VibGUgek5lYXIsIGRvdWJsZSB6RmFy
KTsKLSAgICAgICAgdm9pZCBkZXRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSosIENhbnZhc1NoYWRl
ciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAgdm9pZCBkaXNhYmxlKHVuc2lnbmVkIGxv
bmcgY2FwKTsKLSAgICAgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQg
bG9uZyBpbmRleCk7Ci0gICAgICAgIHZvaWQgZHJhd0FycmF5cyh1bnNpZ25lZCBsb25nIG1vZGUs
IGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOwotICAgICAgICB2b2lkIGRyYXdFbGVtZW50cyh1bnNp
Z25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcgY291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwg
bG9uZyBvZmZzZXQpOwotCi0gICAgICAgIHZvaWQgZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsK
LSAgICAgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4
KTsKLSAgICAgICAgdm9pZCBmaW5pc2goKTsKLSAgICAgICAgdm9pZCBmbHVzaCgpOwotICAgICAg
ICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBD
YW52YXNSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgICAgIHZvaWQgZnJh
bWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIENhbnZhc1RleHR1cmUqLCBsb25nIGxl
dmVsLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgICAgIHZvaWQgZnJvbnRGYWNlKHVuc2lnbmVk
IGxvbmcgbW9kZSk7Ci0gICAgICAgIHZvaWQgZ2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0
YXJnZXQpOwotCi0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQWN0aXZlSW5mbz4gZ2V0QWN0aXZl
QXR0cmliKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9y
bShDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSosIGNvbnN0IFN0
cmluZyYgbmFtZSk7Ci0KLSAgICAgICAgYm9vbCBnZXRCb29sZWFuKHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBnZXRCb29s
ZWFudih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgaW50IGdldEJ1ZmZlclBhcmFtZXRl
cmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQ
YXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0KLSAgICAgICAgdW5zaWduZWQgbG9u
ZyBnZXRFcnJvcigpOwotCi0gICAgICAgIGZsb2F0IGdldEZsb2F0KHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGdldEZsb2F0dih1bnNp
Z25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgaW50IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
dW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAg
ICBpbnQgZ2V0SW50ZWdlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAg
ICAgIGludCBnZXRQcm9ncmFtaShDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBn
ZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKLSAgICAgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKENhbnZhc1Byb2dy
YW0qLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgICAgIGludCBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBpbnQg
Z2V0U2hhZGVyaShDYW52YXNTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFNoYWRlcml2
KENhbnZhc1NoYWRlciosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsK
LQotICAgICAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhDYW52YXNTaGFkZXIqLCBFeGNlcHRp
b25Db2RlJiBlYyk7Ci0KLSAgICAgICAgLy8gVEJECi0gICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlw
ZSwgR0xpbnQqIHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKLQotICAgICAgICBTdHJpbmcgZ2V0
U2hhZGVyU291cmNlKENhbnZhc1NoYWRlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAg
U3RyaW5nIGdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOwotCi0gICAgICAgIGZsb2F0IGdl
dFRleFBhcmFtZXRlcmYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGdldFRleFBhcmFtZXRlcmZ2
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgaW50
IGdldFRleFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRUZXhQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0KLSAgICAgICAg
ZmxvYXQgZ2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+
IGdldFVuaWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNl
cHRpb25Db2RlJiBlYyk7Ci0gICAgICAgIGxvbmcgZ2V0VW5pZm9ybWkoQ2FudmFzUHJvZ3JhbSog
cHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICBQYXNz
UmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRVbmlmb3JtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3Jh
bSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpOwotCi0gICAgICAgIGxvbmcgZ2V0
VW5pZm9ybUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKLQotICAgICAgICBmbG9hdCBnZXRWZXJ0ZXhBdHRyaWJmKHVuc2lnbmVk
IGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc0Zsb2F0QXJyYXk+IGdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBsb25nIGdldFZlcnRleEF0dHJpYmkodW5zaWdu
ZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8
Q2FudmFzSW50QXJyYXk+IGdldFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOwotCi0gICAgICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotCi0gICAgICAgIHZv
aWQgaGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKTsKLSAgICAg
ICAgYm9vbCBpc0J1ZmZlcihDYW52YXNCdWZmZXIqKTsKLSAgICAgICAgYm9vbCBpc0VuYWJsZWQo
dW5zaWduZWQgbG9uZyBjYXApOwotICAgICAgICBib29sIGlzRnJhbWVidWZmZXIoQ2FudmFzRnJh
bWVidWZmZXIqKTsKLSAgICAgICAgYm9vbCBpc1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSopOwotICAg
ICAgICBib29sIGlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciopOwotICAgICAgICBi
b29sIGlzU2hhZGVyKENhbnZhc1NoYWRlciopOwotICAgICAgICBib29sIGlzVGV4dHVyZShDYW52
YXNUZXh0dXJlKik7Ci0gICAgICAgIHZvaWQgbGluZVdpZHRoKGRvdWJsZSk7Ci0gICAgICAgIHZv
aWQgbGlua1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAg
ICAgdm9pZCBwaXhlbFN0b3JlaSh1bnNpZ25lZCBsb25nIHBuYW1lLCBsb25nIHBhcmFtKTsKLSAg
ICAgICAgdm9pZCBwb2x5Z29uT2Zmc2V0KGRvdWJsZSBmYWN0b3IsIGRvdWJsZSB1bml0cyk7Ci0g
ICAgICAgIAotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0FycmF5PiByZWFkUGl4ZWxzKGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5z
aWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgdHlwZSk7Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotICAgICAgICB2b2lkIHJlbmRlcmJ1ZmZl
clN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAgICAg
dm9pZCBzYW1wbGVDb3ZlcmFnZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KTsKLSAgICAgICAg
dm9pZCBzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCk7Ci0gICAgICAgIHZvaWQgc2hhZGVyU291cmNlKENhbnZhc1NoYWRlcios
IGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAgdm9pZCBzdGVuY2ls
RnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwot
ICAgICAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNp
Z25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgICAgICB2
b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcpOwotICAgICAgICB2b2lkIHN0ZW5jaWxNYXNr
U2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgICAg
ICB2b2lkIHN0ZW5jaWxPcCh1bnNpZ25lZCBsb25nIGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWws
IHVuc2lnbmVkIGxvbmcgenBhc3MpOwotICAgICAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKHVu
c2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWls
LCB1bnNpZ25lZCBsb25nIHpwYXNzKTsKLQotICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNp
Z25lZCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAg
ICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2ln
bmVkIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBsZXZlbCwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICAgICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQg
bGV2ZWwsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICAgICAgdm9pZCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLAotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlw
WSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAgICAgdm9p
ZCB0ZXhQYXJhbWV0ZXJmKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGZsb2F0IHBh
cmFtKTsKLSAgICAgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgcG5hbWUsIGludCBwYXJhbSk7Ci0KLSAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2ln
bmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1
bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJheSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1
bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgICAgICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAgdm9pZCB0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQs
IHVuc2lnbmVkIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgICAgIHZvaWQgdW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZs
b2F0IHgpOwotICAgICAgICB2b2lkIHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxv
YXRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFmdihsb25nIGxvY2F0aW9uLCBmbG9h
dCogdiwgaW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm0xaShsb25nIGxvY2F0aW9uLCBp
bnQgeCk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRB
cnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYs
IGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQg
eCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBDYW52
YXNGbG9hdEFycmF5KiB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24s
IGZsb2F0KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJpKGxvbmcgbG9jYXRp
b24sIGludCB4LCBpbnQgeSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0aW9u
LCBDYW52YXNJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJpdihsb25nIGxvY2F0
aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtM2YobG9uZyBsb2Nh
dGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTNm
dihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtM2Z2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTNpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHopOwotICAgICAgICB2
b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkqIHYpOwotICAgICAg
ICB2b2lkIHVuaWZvcm0zaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAg
ICAgIHZvaWQgdW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHosIGZsb2F0IHcpOwotICAgICAgICB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgQ2Fu
dmFzRmxvYXRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmdihsb25nIGxvY2F0aW9u
LCBmbG9hdCogdiwgaW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm00aShsb25nIGxvY2F0
aW9uLCBpbnQgeCwgaW50IHksIGludCB6LCBpbnQgdyk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRp
dihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogdik7Ci0gICAgICAgIHZvaWQgdW5pZm9y
bTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFy
cmF5KiB2YWx1ZSk7Ci0gICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxv
YXRBcnJheSogdmFsdWUpOwotICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2Nh
dGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1ZSwgaW50IHNpemUpOwotICAgICAgICB2
b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZh
c0Zsb2F0QXJyYXkqIHZhbHVlKTsKLSAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcg
bG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLQotICAg
ICAgICB2b2lkIHVzZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSopOwotICAgICAgICB2b2lkIHZhbGlk
YXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKik7Ci0KLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjFmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlcyk7Ci0gICAg
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHZhbHVl
cywgaW50IHNpemUpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmKHVuc2lnbmVkIGxvbmcg
aW5keCwgZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KHVu
c2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWVzKTsKLSAgICAgICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQg
c2l6ZSk7Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZXMpOwotICAgICAgICB2
b2lkIHZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMsIGlu
dCBzaXplKTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgs
IGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHosIGZsb2F0IHcpOwotICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlcyk7
Ci0gICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQq
IHZhbHVlcywgaW50IHNpemUpOwotICAgICAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIodW5z
aWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3Jt
YWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBz
dHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLQotICAgICAgICB2b2lkIHZpZXdwb3J0KGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7
Ci0KLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Qg
eyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgCi0gICAgICAgIHZvaWQgcmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNh
dGlvbiBhYm91dCBwYWludCBldmVudHMuCi0gICAgICAgIHZvaWQgYmVnaW5QYWludCgpOwotICAg
ICAgICB2b2lkIGVuZFBhaW50KCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkIHJlbW92ZU9iamVj
dChDYW52YXNPYmplY3QqKTsKLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5k
IGNsYXNzIENhbnZhc09iamVjdDsKLQotICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qo
SFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7Ci0KLSAg
ICAgICAgdm9pZCBhZGRPYmplY3QoQ2FudmFzT2JqZWN0Kik7Ci0gICAgICAgIHZvaWQgZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotCi0gICAgICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7Ci0gICAgICAgIHZvaWQgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGJvb2wgY2hhbmdlZCkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9jb250ZXh0LT5jaGVja0Vycm9yKCk7Ci0gICAgICAg
ICAgICBpZiAoY2hhbmdlZCkKLSAgICAgICAgICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBt
X2NvbnRleHQ7Ci0gICAgICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKLSAgICAgICAgYm9vbCBtX21h
cmtlZENhbnZhc0RpcnR5OwotICAgICAgICAvLyBGSVhNRTogSSB0aGluayB0aGlzIGlzIGJyb2tl
biAtLSBpdCBkb2VzIG5vdCBpbmNyZW1lbnQgYW55Ci0gICAgICAgIC8vIHJlZmVyZW5jZSBjb3Vu
dHMsIHNvIG1heSByZWZlciB0byBkZXN0cm95ZWQgb2JqZWN0cy4KLSAgICAgICAgSGFzaFNldDxD
YW52YXNPYmplY3QqPiBtX2NhbnZhc09iamVjdHM7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNELmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRC5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDY4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGh0bWwgewotCi0gICAgaW50ZXJmYWNlIFsK
LSAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAotICAgICAgICBHZW5lcmF0ZUNvbnN0cnVj
dG9yLAotICAgICAgICBJbnRlcmZhY2VVVUlEPTk4ZmI0OGFlLTcyMTYtNDg5Yy04NjJiLThlMTIx
N2ZjNDQ0MywKLSAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWFiNGYwNzgxLTE1MmYtNDUwZS05
NTQ2LTViMzk4NzQ5MWE1NAotICAgIF0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEIDogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCB7Ci0KLSAgICAgICAgLyogQ2xlYXJCdWZmZXJNYXNrICovCi0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAw
eDAwMDAwMTAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9CVUZGRVJfQklU
ICAgICAgICAgICAgID0gMHgwMDAwMDQwMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENP
TE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAgICAgLyog
Qm9vbGVhbiAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRkFMU0UgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRSVUUgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDE7Ci0KLSAgICAgICAgLyogQmVnaW5Nb2RlICovCi0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBMSU5FUyAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAwMDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBMSU5FX0xPT1Ag
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDQ7Ci0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAg
PSAweDAwMDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBUUklBTkdMRV9GQU4gICAgICAg
ICAgICAgICAgICAgPSAweDAwMDY7Ci0KLSAgICAgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1
cHBvcnRlZCBpbiBFUzIwKSAqLwotICAgICAgICAvKiAgICAgIE5FVkVSICovCi0gICAgICAgIC8q
ICAgICAgTEVTUyAqLwotICAgICAgICAvKiAgICAgIEVRVUFMICovCi0gICAgICAgIC8qICAgICAg
TEVRVUFMICovCi0gICAgICAgIC8qICAgICAgR1JFQVRFUiAqLwotICAgICAgICAvKiAgICAgIE5P
VEVRVUFMICovCi0gICAgICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgICAgIC8qICAgICAgQUxX
QVlTICovCi0KLSAgICAgICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBaRVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDMwMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE9ORV9NSU5VU19TUkNfQ09M
T1IgICAgICAgICAgICA9IDB4MDMwMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNSQ19B
TFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMw
NDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAg
ICAgICA9IDB4MDMwNTsKLQotICAgICAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgICAg
ICAvKiAgICAgIFpFUk8gKi8KLSAgICAgICAgLyogICAgICBPTkUgKi8KLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IERTVF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNjsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9
IDB4MDMwNzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNSQ19BTFBIQV9TQVRVUkFURSAg
ICAgICAgICAgICA9IDB4MDMwODsKLSAgICAgICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAg
ICAgLyogICAgICBPTkVfTUlOVVNfU1JDX0FMUEhBICovCi0gICAgICAgIC8qICAgICAgRFNUX0FM
UEhBICovCi0gICAgICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgICAg
IC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
RlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2OwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAgID0gMHg4MDA5OwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgID0g
MHg4MDA5OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKLQotICAg
ICAgICAvKiBCbGVuZFN1YnRyYWN0ICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGVU5D
X1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAweDgwMEE7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7Ci0KLSAgICAg
ICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzk7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBCTEVORF9TUkNfQUxQSEEg
ICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBDT05T
VEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgwMDE7Ci0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAgICAgPSAweDgwMDI7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgw
MDM7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
ICAgICAgPSAweDgwMDQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBCTEVORF9DT0xPUiAg
ICAgICAgICAgICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAgICAgLyogQnVmZmVyIE9iamVjdHMg
Ki8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAg
ICAgICA9IDB4ODg5MjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEVMRU1FTlRfQVJSQVlf
QlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFS
UkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKLQotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RBVElDX0RSQVcgICAgICAgICAg
ICAgICAgICAgID0gMHg4OEU0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRFlOQU1JQ19E
UkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4OwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBCVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAgPSAweDg3NjQ7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBCVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgPSAweDg3NjU7
Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAg
ICAgICA9IDB4ODYyNjsKLQotICAgICAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEZST05UICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDQwNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZST05UX0FORF9CQUNLICAg
ICAgICAgICAgICAgICA9IDB4MDQwODsKLQotICAgICAgICAvKiBEZXB0aEZ1bmN0aW9uICovCi0g
ICAgICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAgICAgLyogICAgICBMRVNTICovCi0gICAgICAg
IC8qICAgICAgRVFVQUwgKi8KLSAgICAgICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAgICAgLyog
ICAgICBHUkVBVEVSICovCi0gICAgICAgIC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAgICAgLyog
ICAgICBHRVFVQUwgKi8KLSAgICAgICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgICAgICAvKiBF
bmFibGVDYXAgKi8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVfMkQgICAgICAg
ICAgICAgICAgICAgICA9IDB4MERFMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENVTExf
RkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NDsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJE
MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfVEVTVCAgICAgICAgICAgICAg
ICAgICA9IDB4MEI5MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX1RFU1QgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFND
SVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMxMTsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAgICA9IDB4ODAzNzsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4
ODA5RTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRV9DT1ZFUkFHRSAgICAgICAg
ICAgICAgICA9IDB4ODBBMDsKLQotICAgICAgICAvKiBFcnJvckNvZGUgKi8KLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IE5PX0VSUk9SICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAw
eDA1MDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlZBTElEX1ZBTFVFICAgICAgICAg
ICAgICAgICAgPSAweDA1MDE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlZBTElEX09Q
RVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7Ci0KLSAgICAgICAgLyog
RnJvbnRGYWNlRGlyZWN0aW9uICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBDVyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDE7Ci0KLSAgICAgICAg
LyogR2V0UE5hbWUgKi8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExJTkVfV0lEVEggICAg
ICAgICAgICAgICAgICAgICA9IDB4MEIyMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFM
SUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9IDB4
MEI0NTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZST05UX0ZBQ0UgICAgICAgICAgICAg
ICAgICAgICA9IDB4MEI0NjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX1JBTkdF
ICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA9
IDB4MEI3NDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQ0xFQVJfVkFMVUUg
ICAgICAgICAgICA9IDB4MEI5MTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxf
RlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5MjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAgICA9IDB4MEI5NDsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5NTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAg
ICA9IDB4MEI5NjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5D
SUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9IDB4MEI5MzsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA9IDB4ODgw
MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQkFDS19GQUlMICAgICAgICAg
ICAgICA9IDB4ODgwMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNU
RU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFNURU5DSUxfQkFDS19SRUYgICAgICAgICAgICAgICA9IDB4OENBMzsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9IDB4
OENBNDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQkFDS19XUklURU1BU0sg
ICAgICAgICA9IDB4OENBNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZJRVdQT1JUICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKLSAgICAgICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENPTE9SX0NMRUFS
X1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMyMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IFVOUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICA9IDB4MENGNTsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9
IDB4MEQwNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1BWF9URVhUVVJFX1NJWkUgICAg
ICAgICAgICAgICA9IDB4MEQzMzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1BWF9WSUVX
UE9SVF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAgICAgICA9IDB4MEQ1MDsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEQ1MzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJMVUVfQklUUyAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MEQ1NDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFMUEhB
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfQklUUyAgICAgICAgICAgICAgICAgICA9IDB4MEQ1
NzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAg
ICAgICA9IDB4MkEwMDsKLSAgICAgICAgLyogICAgICBQT0xZR09OX09GRlNFVF9GSUxMICovCi0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAg
PSAweDgwMzg7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFX0JJTkRJTkdfMkQg
ICAgICAgICAgICAgPSAweDgwNjk7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBTQU1QTEVf
QlVGRkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBTQU1QTEVTICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwQTk7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBTQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAg
ICAgPSAweDgwQUI7Ci0KLSAgICAgICAgLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotICAgICAg
ICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLwotICAgICAgICAvKiAgICAgIFRFWFRVUkVf
TUlOX0ZJTFRFUiAqLwotICAgICAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9TICovCi0gICAgICAg
IC8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi8KLQotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
TlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTID0gMHg4NkEyOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0g
ICAgICAgIC8qIEhpbnRNb2RlICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBET05UX0NB
UkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDE7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7
Ci0KLSAgICAgICAgLyogSGludFRhcmdldCAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgICAgICAvKiBE
YXRhVHlwZSAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQllURSAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgxNDAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5TSUdO
RURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAxOwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyOwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAz
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5UICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgxNDA0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5TSUdORURfSU5UICAg
ICAgICAgICAgICAgICAgID0gMHgxNDA1OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgRklYRUQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDBDOwotCi0gICAg
ICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBERVBUSF9D
T01QT05FTlQgICAgICAgICAgICAgICAgPSAweDE5MDI7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBBTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Ci0gICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSR0JBICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE5MDg7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBMVU1JTkFOQ0UgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE5MDk7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBMVU1J
TkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAgICAgLyogUGl4ZWxU
eXBlICovCi0gICAgICAgIC8qICAgICAgVU5TSUdORURfQllURSAqLwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5TSUdORURfU0hPUlRfNV81XzVfMSAgICAgICAgID0g
MHg4MDM0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5TSUdORURfU0hPUlRfNV82XzUg
ICAgICAgICAgID0gMHg4MzYzOwotCi0gICAgICAgIC8qIFNoYWRlcnMgKi8KLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMw
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAg
ICAgICAgPSAweDhCMzE7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBNQVhfVkVSVEVYX0FU
VFJJQlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAgICAgID0gMHg4REZCOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgPSAweDhERkM7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9V
TklUUyA9IDB4OEI0RDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1BWF9WRVJURVhfVEVY
VFVSRV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNIQURFUl9UWVBFICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjRGOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVMRVRFX1NUQVRVUyAg
ICAgICAgICAgICAgICAgICAgPSAweDhCODA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBM
SU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MjsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOwot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAg
ICAgPSAweDhCODU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBBQ1RJVkVfVU5JRk9STVMg
ICAgICAgICAgICAgICAgICA9IDB4OEI4NjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFD
VElWRV9VTklGT1JNX01BWF9MRU5HVEggICAgICAgID0gMHg4Qjg3OwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7Ci0g
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBBQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggICAg
ICA9IDB4OEI4QTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ1VS
UkVOVF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7Ci0KLSAgICAgICAgLyogU3Rl
bmNpbEZ1bmN0aW9uICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBORVZFUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBM
RVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Ci0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDI7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAyMDM7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHUkVBVEVSICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAyMDQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBOT1RFUVVBTCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBHRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDY7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7Ci0K
LSAgICAgICAgLyogU3RlbmNpbE9wICovCi0gICAgICAgIC8qICAgICAgWkVSTyAqLwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RTAwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVQTEFDRSAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxRTAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5DUiAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgxRTAyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
REVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNTBBOwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NTA3OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NTA4OwotCi0gICAgICAgIC8qIFN0cmluZ05hbWUgKi8KLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYw
MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFJFTkRFUkVSICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MUYwMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlNJT04gICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MUYwMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEVY
VEVOU0lPTlMgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMzsKLQotICAgICAgICAvKiBUZXh0
dXJlTWFnRmlsdGVyICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBORUFSRVNUICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDI2MDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBM
SU5FQVIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDE7Ci0KLSAgICAgICAgLyogVGV4
dHVyZU1pbkZpbHRlciAqLwotICAgICAgICAvKiAgICAgIE5FQVJFU1QgKi8KLSAgICAgICAgLyog
ICAgICBMSU5FQVIgKi8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE5FQVJFU1RfTUlQTUFQ
X05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExJ
TkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IE5FQVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICA9IDB4MjcwMjsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4
MjcwMzsKLQotICAgICAgICAvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9NQUdfRklMVEVSICAgICAgICAgICAgID0gMHgyODAwOwot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAg
ID0gMHgyODAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9XUkFQX1MgICAg
ICAgICAgICAgICAgID0gMHgyODAyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVS
RV9XUkFQX1QgICAgICAgICAgICAgICAgID0gMHgyODAzOwotCi0gICAgICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KLSAgICAgICAgLyogICAgICBURVhUVVJFXzJEICovCi0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBURVhUVVJFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE3MDI7Ci0KLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9
IDB4ODUxMzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVfQklORElOR19DVUJF
X01BUCAgICAgICA9IDB4ODUxNDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCAgICA9IDB4ODUxNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAg
ICA9IDB4ODUxODsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA9IDB4ODUxQzsKLQotICAgICAg
ICAvKiBUZXh0dXJlVW5pdCAqLwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgVEVYVFVSRTEgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMxOwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgVEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMzOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTQgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVS
RTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2OwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTcgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM3
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTggICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NEM4OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTkgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEM5OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVY
VFVSRTEwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENBOwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NENDOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTEzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NENEOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTE0ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
VEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQwOwotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NEQxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTE4ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQyOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTE5
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQzOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ0OwotICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1Owot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ2OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTIzICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEQ3OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVS
RTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4OwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ5OwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTI2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERB
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERCOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTI4ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NERDOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVY
VFVSRTI5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRTMxICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NERGOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQUNUSVZFX1RFWFRVUkUgICAgICAgICAg
ICAgICAgID0gMHg4NEUwOwotCi0gICAgICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgy
OTAxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ0xBTVBfVE9fRURHRSAgICAgICAgICAg
ICAgICAgID0gMHg4MTJGOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTUlSUk9SRURfUkVQ
RUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOwotCi0gICAgICAgIC8qIFVuaWZvcm0gVHlwZXMg
Ki8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI1MDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZMT0FUX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZM
T0FUX1ZFQzQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MjsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1NDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IElOVF9WRUM0ICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1NTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJPT0wgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1ODsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1OTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZMT0FUX01BVDIgICAgICAgICAg
ICAgICAgICAgICA9IDB4OEI1QTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZMT0FUX01B
VDMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QzsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAg
ICA9IDB4OEI2MDsKLQotICAgICAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIy
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFICAg
ICAgICAgICA9IDB4ODYyMzsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlRFWF9BVFRS
SUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA9
IDB4ODg2QTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlRFWF9BVFRSSUJfQVJSQVlf
UE9JTlRFUiAgICAgICAgPSAweDg2NDU7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBWRVJU
RVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOwotCi0gICAgICAgIC8qIFJl
YWQgRm9ybWF0ICovCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX1RZUEUgICA9IDB4OEI5QTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IElN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUID0gMHg4QjlCOwotCi0gICAgICAgIC8qIFNo
YWRlciBTb3VyY2UgKi8KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENPTVBJTEVfU1RBVFVT
ICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IElO
Rk9fTE9HX0xFTkdUSCAgICAgICAgICAgICAgICA9IDB4OEI4NDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFNIQURFUl9TT1VSQ0VfTEVOR1RIICAgICAgICAgICA9IDB4OEI4ODsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IFNIQURFUl9DT01QSUxFUiAgICAgICAgICAgICAgICA9IDB4
OERGQTsKLQotICAgICAgICAvKiBTaGFkZXIgQmluYXJ5ICovCi0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBTSEFERVJfQklOQVJZX0ZPUk1BVFMgICAgICAgICAgPSAweDhERjg7Ci0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTICAgICAgPSAweDhE
Rjk7Ci0KLSAgICAgICAgLyogU2hhZGVyIFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9
IDB4OERGMDsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1FRElVTV9GTE9BVCAgICAgICAg
ICAgICAgICAgICA9IDB4OERGMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEhJR0hfRkxP
QVQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IE1FRElVTV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEhJR0hfSU5UICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OERGNTsKLQotICAgICAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBGUkFNRUJVRkZFUiAgICAgICAgICAgICAgICAgICAgPSAweDhE
NDA7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVIgICAgICAgICAgICAg
ICAgICAgPSAweDhENDE7Ci0KLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFJHQkE0ICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IFJHQjVfQTEgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NzsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IFJHQjU2NSAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEQ2MjsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9
IDB4ODFBNTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxfSU5ERVggICAgICAg
ICAgICAgICAgICA9IDB4MTkwMTsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNURU5DSUxf
SU5ERVg4ICAgICAgICAgICAgICAgICA9IDB4OEQ0ODsKLQotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgID0gMHg4RDQyOwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgID0gMHg4RDQz
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1B
VCAgID0gMHg4RDQ0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVSX1JF
RF9TSVpFICAgICAgICAgID0gMHg4RDUwOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVO
REVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgID0gMHg4RDUxOwotICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOwotICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0gMHg4
RDUzOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUg
ICAgICAgID0gMHg4RDU0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUUgICAgICAgICAgID0gMHg4Q0QxOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJB
TUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRSA9IDB4OENEMzsKLQotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ09MT1Jf
QVRUQUNITUVOVDAgICAgICAgICAgICAgID0gMHg4Q0UwOwotICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOwotICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9BVFRBQ0hNRU5UICAgICAgICAgICAgID0gMHg4RDIw
OwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBOT05FICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAwOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGUkFNRUJVRkZFUl9DT01Q
TEVURSAgICAgICAgICAgICAgICAgICAgICA9IDB4OENENTsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgID0gMHg4Q0Q2
OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGUkFN
RUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlMgICAgICAgICA9IDB4OENEOTsKLSAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEICAgICAgICAgICAgICAg
ICAgID0gMHg4Q0REOwotCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGUkFNRUJVRkZFUl9C
SU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBS
RU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDhDQTc7Ci0gICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBNQVhfUkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgPSAweDg0RTg7Ci0KLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9
IDB4MDUwNjsKLQotICAgICAgICBsb25nIHNpemVJbkJ5dGVzKGluIHVuc2lnbmVkIGxvbmcgdHlw
ZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0KLSAgICAgICAgdm9pZCAgICAgICAgIGFjdGl2ZVRl
eHR1cmUoaW4gdW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGF0
dGFjaFNoYWRlcihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRlciBzaGFk
ZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICB2b2lkICAgICAgICAgYmluZEF0dHJp
YkxvY2F0aW9uKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRl
eCwgaW4gRE9NU3RyaW5nIG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICB2b2lk
ICAgICAgICAgYmluZEJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzQnVm
ZmVyIGJ1ZmZlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBi
aW5kRnJhbWVidWZmZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc0ZyYW1lYnVm
ZmVyIGZyYW1lYnVmZmVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCAgICAg
ICAgIGJpbmRSZW5kZXJidWZmZXIoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZhc1Jl
bmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICB2
b2lkICAgICAgICAgYmluZFRleHR1cmUoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIENhbnZh
c1RleHR1cmUgdGV4dHVyZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAg
ICAgICBibGVuZENvbG9yKGluIGRvdWJsZSByZWQsIGluIGRvdWJsZSBncmVlbiwgaW4gZG91Ymxl
IGJsdWUsIGluIGRvdWJsZSBhbHBoYSk7Ci0gICAgICAgIHZvaWQgICAgICAgICBibGVuZEVxdWF0
aW9uKCBpbiB1bnNpZ25lZCBsb25nIG1vZGUgKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGJsZW5k
RXF1YXRpb25TZXBhcmF0ZShpbiB1bnNpZ25lZCBsb25nIG1vZGVSR0IsIGluIHVuc2lnbmVkIGxv
bmcgbW9kZUFscGhhKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kRnVuYyhpbiB1bnNpZ25l
ZCBsb25nIHNmYWN0b3IsIGluIHVuc2lnbmVkIGxvbmcgZGZhY3Rvcik7Ci0gICAgICAgIHZvaWQg
ICAgICAgICBibGVuZEZ1bmNTZXBhcmF0ZShpbiB1bnNpZ25lZCBsb25nIHNyY1JHQiwgaW4gdW5z
aWduZWQgbG9uZyBkc3RSR0IsIGluIHVuc2lnbmVkIGxvbmcgc3JjQWxwaGEsIGluIHVuc2lnbmVk
IGxvbmcgZHN0QWxwaGEpOwotICAgICAgICAvLyBTdXBwb3J0ZWQgZm9ybXM6Ci0gICAgICAgIC8v
ICAgdm9pZCBidWZmZXJEYXRhIChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTHNpemVpIHNpemUsIGlu
IEdMZW51bSB1c2FnZSk7Ci0gICAgICAgIC8vICAgdm9pZCBidWZmZXJEYXRhIChpbiBHTGVudW0g
dGFyZ2V0LCBpbiBDYW52YXNBcnJheSBkYXRhLCBpbiBHTGVudW0gdXNhZ2UpOwotICAgICAgICBb
Q3VzdG9tXSB2b2lkIGJ1ZmZlckRhdGEoKTsKLSAgICAgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgot
ICAgICAgICAvLyAgIHZvaWQgYnVmZmVyU3ViRGF0YSAoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xz
aXplaXB0ciBvZmZzZXQsIGluIENhbnZhc0FycmF5IGRhdGEpOwotICAgICAgICBbQ3VzdG9tXSB2
b2lkIGJ1ZmZlclN1YkRhdGEoKTsKLQotICAgICAgICB1bnNpZ25lZCBsb25nIGNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQpOwotICAgICAgICB2b2lkICAgICAg
ICAgY2xlYXIoaW4gdW5zaWduZWQgbG9uZyBtYXNrKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGNs
ZWFyQ29sb3IoaW4gZG91YmxlIHJlZCwgaW4gZG91YmxlIGdyZWVuLCBpbiBkb3VibGUgYmx1ZSwg
aW4gZG91YmxlIGFscGhhKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoaW4gZG91
YmxlIGRlcHRoKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChpbiBsb25nIHMp
OwotICAgICAgICB2b2lkICAgICAgICAgY29sb3JNYXNrKGluIGJvb2xlYW4gcmVkLCBpbiBib29s
ZWFuIGdyZWVuLCBpbiBib29sZWFuIGJsdWUsIGluIGJvb2xlYW4gYWxwaGEpOwotICAgICAgICB2
b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihpbiBDYW52YXNTaGFkZXIgc2hhZGVyKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIC8vdm9pZCAgICAgICAgIGNvbXByZXNz
ZWRUZXhJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1
bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gbG9uZyBib3JkZXIsIGluIHVuc2lnbmVkIGxvbmcgaW1h
Z2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKLSAgICAgICAgLy92b2lkICAgICAgICAgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWws
IGluIGxvbmcgeG9mZnNldCwgaW4gbG9uZyB5b2Zmc2V0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRo
LCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gdW5zaWduZWQgbG9uZyBmb3JtYXQsIGluIHVu
c2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKLSAgICAgICAgCi0gICAg
ICAgIHZvaWQgICAgICAgICBjb3B5VGV4SW1hZ2UyRChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gbG9uZyBsZXZlbCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgaW4gbG9uZyB4
LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0LCBpbiBsb25nIGJvcmRlcik7Ci0gICAgICAgIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1h
Z2UyRChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gbG9uZyBsZXZlbCwgaW4gbG9uZyB4b2Zm
c2V0LCBpbiBsb25nIHlvZmZzZXQsIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1bnNpZ25lZCBs
b25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7Ci0KLSAgICAgICAgQ2FudmFzQnVm
ZmVyIGNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBDYW52YXNGcmFtZWJ1ZmZlciBjcmVhdGVGcmFt
ZWJ1ZmZlcigpOwotICAgICAgICBDYW52YXNQcm9ncmFtIGNyZWF0ZVByb2dyYW0oKTsKLSAgICAg
ICAgQ2FudmFzUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgICAgICBDYW52
YXNTaGFkZXIgY3JlYXRlU2hhZGVyKGluIHVuc2lnbmVkIGxvbmcgdHlwZSk7Ci0gICAgICAgIENh
bnZhc1RleHR1cmUgY3JlYXRlVGV4dHVyZSgpOwotCi0gICAgICAgIHZvaWQgICAgICAgICBjdWxs
RmFjZShpbiB1bnNpZ25lZCBsb25nIG1vZGUpOwotCi0gICAgICAgIHZvaWQgICAgICAgICBkZWxl
dGVCdWZmZXIoaW4gQ2FudmFzQnVmZmVyIGJ1ZmZlcik7Ci0gICAgICAgIHZvaWQgICAgICAgICBk
ZWxldGVGcmFtZWJ1ZmZlcihpbiBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAg
ICAgIHZvaWQgICAgICAgICBkZWxldGVQcm9ncmFtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSk7
Ci0gICAgICAgIHZvaWQgICAgICAgICBkZWxldGVSZW5kZXJidWZmZXIoaW4gQ2FudmFzUmVuZGVy
YnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgICAgIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIo
aW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7Ci0gICAgICAgIHZvaWQgICAgICAgICBkZWxldGVUZXh0
dXJlKGluIENhbnZhc1RleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICAgICAgdm9pZCAgICAgICAgIGRl
cHRoRnVuYyhpbiB1bnNpZ25lZCBsb25nIGZ1bmMpOwotICAgICAgICB2b2lkICAgICAgICAgZGVw
dGhNYXNrKGluIGJvb2xlYW4gZmxhZyk7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGlzIGRpZmZlcnMg
ZnJvbSB0aGUgY3VycmVudCBXZWJHTCBzcGVjIChkZXB0aFJhbmdlZikKLSAgICAgICAgdm9pZCAg
ICAgICAgIGRlcHRoUmFuZ2UoaW4gZG91YmxlIHpOZWFyLCBpbiBkb3VibGUgekZhcik7Ci0gICAg
ICAgIHZvaWQgICAgICAgICBkZXRhY2hTaGFkZXIoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBp
biBDYW52YXNTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgdm9p
ZCAgICAgICAgIGRpc2FibGUoaW4gdW5zaWduZWQgbG9uZyBjYXApOwotICAgICAgICB2b2lkICAg
ICAgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwot
ICAgICAgICB2b2lkICAgICAgICAgZHJhd0FycmF5cyhpbiB1bnNpZ25lZCBsb25nIG1vZGUsIGlu
IGxvbmcgZmlyc3QsIGluIHVuc2lnbmVkIGxvbmcgY291bnQpOwotICAgICAgICB2b2lkICAgICAg
ICAgZHJhd0VsZW1lbnRzIChpbiB1bnNpZ25lZCBsb25nIG1vZGUsIGluIGxvbmcgY291bnQsIGlu
IHVuc2lnbmVkIGxvbmcgdHlwZSwgaW4gdW5zaWduZWQgbG9uZyBvZmZzZXQpOwotCi0gICAgICAg
IHZvaWQgICAgICAgICBlbmFibGUoaW4gdW5zaWduZWQgbG9uZyBjYXApOwotICAgICAgICB2b2lk
ICAgICAgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7
Ci0gICAgICAgIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGZs
dXNoKCk7Ci0gICAgICAgIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihpbiB1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBpbiB1bnNp
Z25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgaW4gQ2FudmFzUmVuZGVyYnVmZmVyIHJlbmRl
cmJ1ZmZlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBmcmFt
ZWJ1ZmZlclRleHR1cmUyRChpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9u
ZyBhdHRhY2htZW50LCBpbiB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgaW4gQ2FudmFzVGV4dHVy
ZSB0ZXh0dXJlLCBpbiBsb25nIGxldmVsKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAg
dm9pZCAgICAgICAgIGZyb250RmFjZShpbiB1bnNpZ25lZCBsb25nIG1vZGUpOwotICAgICAgICB2
b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQpOwotICAg
ICAgICAKLSAgICAgICAgLy8gRklYTUU6IHRoZXNlIG5lZWQgdG8gYmUgYWRkZWQgcGVyIHRoZSBX
ZWJHTCBzcGVjCi0gICAgICAgIENhbnZhc0FjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKGluIENh
bnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCkKLSAgICAgICAgICAg
IHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgQ2FudmFzQWN0aXZlSW5mbyBnZXRBY3Rp
dmVVbmlmb3JtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRl
eCkKLSAgICAgICAgICAgIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICAvLyBDYW52
YXNTaGFkZXJBcnJheSBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSk7Ci0KLSAg
ICAgICAgaW50ICAgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKGluIENhbnZhc1Byb2dyYW0gcHJv
Z3JhbSwgaW4gRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgICAgIGJvb2xlYW4gZ2V0Qm9vbGVhbihp
biB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkg
Z2V0Qm9vbGVhbnYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIGxvbmcgZ2V0QnVm
ZmVyUGFyYW1ldGVyaShpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBw
bmFtZSk7Ci0gICAgICAgIENhbnZhc0ludEFycmF5IGdldEJ1ZmZlclBhcmFtZXRlcml2KGluIHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLQotICAgICAgICB1
bnNpZ25lZCBsb25nIGdldEVycm9yKCk7Ci0KLSAgICAgICAgZmxvYXQgZ2V0RmxvYXQoaW4gdW5z
aWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0RmxvYXR2KGlu
IHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBsb25nIGdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIENhbnZhc0ludEFy
cmF5IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotICAgICAgICBsb25nIGdldEludGVnZXIoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0g
ICAgICAgIENhbnZhc0ludEFycmF5IGdldEludGVnZXJ2KGluIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OwotICAgICAgICBsb25nIGdldFByb2dyYW1pKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4g
dW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIENhbnZh
c0ludEFycmF5IGdldFByb2dyYW1pdihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIHVuc2ln
bmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICBET01TdHJpbmcg
Z2V0UHJvZ3JhbUluZm9Mb2coaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKLSAgICAgICAgbG9uZyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKGluIHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgQ2FudmFz
SW50QXJyYXkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBsb25nIGdldFNoYWRlcmkoaW4g
Q2FudmFzU2hhZGVyIHNoYWRlciwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7Ci0gICAgICAgIENhbnZhc0ludEFycmF5IGdldFNoYWRlcml2KGluIENhbnZhc1No
YWRlciBzaGFkZXIsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24p
OwotCi0gICAgICAgIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKGluIENhbnZhc1NoYWRl
ciBzaGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwotCi0gICAgICAgIC8vIFRCRAotICAgICAg
ICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwg
R0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7Ci0K
LSAgICAgICAgRE9NU3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShpbiBDYW52YXNTaGFkZXIgc2hh
ZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgRE9NU3RyaW5nICAgIGdldFN0cmlu
ZyhpbiB1bnNpZ25lZCBsb25nIG5hbWUpOwotCi0gICAgICAgIGZsb2F0IGdldFRleFBhcmFtZXRl
cmYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAg
ICAgICBDYW52YXNGbG9hdEFycmF5IGdldFRleFBhcmFtZXRlcmZ2KGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgbG9uZyBnZXRUZXhQYXJh
bWV0ZXJpKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsK
LSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0VGV4UGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotCi0gICAgICAgIGZsb2F0IGdldFVu
aWZvcm1mKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0VW5pZm9ybWZ2KGlu
IENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7Ci0gICAgICAgIGxvbmcgZ2V0VW5pZm9ybWkoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFt
LCBpbiBsb25nIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgQ2FudmFz
SW50QXJyYXkgZ2V0VW5pZm9ybWl2KGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBs
b2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIAotICAgICAgICBsb25nIGdl
dFVuaWZvcm1Mb2NhdGlvbihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBu
YW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLQotICAgICAgICBmbG9hdCBnZXRWZXJ0ZXhBdHRy
aWJmKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAg
ICAgICBDYW52YXNGbG9hdEFycmF5IGdldFZlcnRleEF0dHJpYmZ2KGluIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBsb25nIGdldFZlcnRleEF0
dHJpYmkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0g
ICAgICAgIENhbnZhc0ludEFycmF5IGdldFZlcnRleEF0dHJpYml2KGluIHVuc2lnbmVkIGxvbmcg
aW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotCi0gICAgICAgIGxvbmcgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwotCi0gICAgICAgIHZvaWQgICAgICAgICBoaW50KGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbiB1bnNpZ25lZCBsb25nIG1vZGUpOwotICAgICAgICBib29sZWFuICAgICAgaXNCdWZmZXIo
aW4gQ2FudmFzQnVmZmVyIGJ1ZmZlcik7Ci0gICAgICAgIGJvb2xlYW4gICAgICBpc0VuYWJsZWQo
aW4gdW5zaWduZWQgbG9uZyBjYXApOwotICAgICAgICBib29sZWFuICAgICAgaXNGcmFtZWJ1ZmZl
cihpbiBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgIGJvb2xlYW4gICAg
ICBpc1Byb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICAgICAgYm9vbGVhbiAg
ICAgIGlzUmVuZGVyYnVmZmVyKGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwot
ICAgICAgICBib29sZWFuICAgICAgaXNTaGFkZXIoaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7Ci0g
ICAgICAgIGJvb2xlYW4gICAgICBpc1RleHR1cmUoaW4gQ2FudmFzVGV4dHVyZSB0ZXh0dXJlKTsK
LSAgICAgICAgdm9pZCAgICAgICAgIGxpbmVXaWR0aChpbiBkb3VibGUgd2lkdGgpOwotICAgICAg
ICB2b2lkICAgICAgICAgbGlua1Byb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIGluIGxvbmcgcGFyYW0pOwotICAgICAgICB2b2lkICAgICAgICAg
cG9seWdvbk9mZnNldChpbiBkb3VibGUgZmFjdG9yLCBpbiBkb3VibGUgdW5pdHMpOwotCi0gICAg
ICAgIENhbnZhc0FycmF5IHJlYWRQaXhlbHMoaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25n
IGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQg
ICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLSAgICAgICAgdm9pZCAgICAgICAgIHJl
bmRlcmJ1ZmZlclN0b3JhZ2UoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdlKGluIGRvdWJs
ZSB2YWx1ZSwgaW4gYm9vbGVhbiBpbnZlcnQpOwotICAgICAgICB2b2lkICAgICAgICAgc2Npc3Nv
cihpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOwotICAgICAgICB2b2lkICAgICAgICAgc2hhZGVyU291cmNlKGluIENh
bnZhc1NoYWRlciBzaGFkZXIsIGluIERPTVN0cmluZyBzdHJpbmcpIHJhaXNlcyhET01FeGNlcHRp
b24pOwotICAgICAgICB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoaW4gdW5zaWduZWQgbG9uZyBm
dW5jLCBpbiBsb25nIHJlZiwgaW4gdW5zaWduZWQgbG9uZyBtYXNrKTsKLSAgICAgICAgdm9pZCAg
ICAgICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUoaW4gdW5zaWduZWQgbG9uZyBmYWNlLCBpbiB1bnNp
Z25lZCBsb25nIGZ1bmMsIGluIGxvbmcgcmVmLCBpbiB1bnNpZ25lZCBsb25nIG1hc2spOwotICAg
ICAgICB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soaW4gdW5zaWduZWQgbG9uZyBtYXNrKTsKLSAg
ICAgICAgdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoaW4gdW5zaWduZWQgbG9uZyBm
YWNlLCBpbiB1bnNpZ25lZCBsb25nIG1hc2spOwotICAgICAgICB2b2lkICAgICAgICAgc3RlbmNp
bE9wKGluIHVuc2lnbmVkIGxvbmcgZmFpbCwgaW4gdW5zaWduZWQgbG9uZyB6ZmFpbCwgaW4gdW5z
aWduZWQgbG9uZyB6cGFzcyk7Ci0gICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBhcmF0
ZShpbiB1bnNpZ25lZCBsb25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgZmFpbCwgaW4gdW5zaWdu
ZWQgbG9uZyB6ZmFpbCwgaW4gdW5zaWduZWQgbG9uZyB6cGFzcyk7Ci0KLSAgICAgICAgdm9pZCAg
ICAgICAgIHRleFBhcmFtZXRlcmYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVk
IGxvbmcgcG5hbWUsIGluIGZsb2F0IHBhcmFtKTsKLSAgICAgICAgdm9pZCAgICAgICAgIHRleFBh
cmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGluIGxvbmcgcGFyYW0pOwotCi0gICAgICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKLSAgICAgICAg
Ly8gICB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGlu
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWln
aHQsIAotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpbiBHTGludCBib3JkZXIsIGluIEdM
ZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBDYW52YXNBcnJheSBwaXhlbHMpOwotICAg
ICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZl
bCwgaW4gR0xlbnVtIGludGVybmFsZm9ybWF0LCBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVp
IGhlaWdodCwgCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGluIEdMaW50IGJvcmRlciwg
aW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIEltYWdlRGF0YSBwaXhlbHMpOwot
ICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBs
ZXZlbCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFnZSwKLSAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgW09wdGlvbmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVs
dGlwbHlBbHBoYSk7Ci0gICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJn
ZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXMsCi0gICAgICAg
IC8vICAgICAgICAgICAgICAgICAgIFtPcHRpb25hbF0gaW4gR0xib29sZWFuIGZsaXBZLCBbT3B0
aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwotICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2Uy
RChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gSFRNTFZpZGVvRWxlbWVudCB2
aWRlbywKLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgW09wdGlvbmFsXSBpbiBHTGJvb2xl
YW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgdGV4SW1hZ2UyRCgpOwotCi0gICAgICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKLSAg
ICAgICAgLy8gICB2b2lkIHRleFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQg
bGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIAotICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwg
Ci0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluIEdMZW51bSBmb3JtYXQsIGluIEdM
ZW51bSB0eXBlLCBpbiBDYW52YXNBcnJheSBwaXhlbHMpOwotICAgICAgICAvLyAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9m
ZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAg
IGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIEltYWdl
RGF0YSBwaXhlbHMpOwotICAgICAgICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0g
dGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNl
dCwgCi0gICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGlu
IEdMc2l6ZWkgaGVpZ2h0LCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdlLAotICAgICAgICAvLyAg
ICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFs
XSBpbiBwcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgLy8gICB2b2lkIHRleFN1YkltYWdlMkQo
aW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhvZmZzZXQsIGluIEdM
aW50IHlvZmZzZXQsIAotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBHTHNpemVp
IHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgaW4gSFRNTENhbnZhc0VsZW1lbnQgY2FudmFzLAot
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlw
WSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgLy8gICB2b2lkIHRl
eFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhv
ZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIAotICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgaW4gSFRNTFZpZGVvRWxlbWVu
dCB2aWRlbywKLSAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgW09wdGlvbmFsXSBHTGJv
b2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgICAgIFtD
dXN0b21dIHZvaWQgdGV4U3ViSW1hZ2UyRCgpOwotCi0gICAgICAgIHZvaWQgdW5pZm9ybTFmKGlu
IGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZv
cm0xZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzRmxvYXRBcnJheSB2KTsKLSAgICAgICAg
dm9pZCB1bmlmb3JtMWkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4KTsKLSAgICAgICAgW0N1
c3RvbV0gdm9pZCB1bmlmb3JtMWl2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFycmF5
IHYpOwotICAgICAgICB2b2lkIHVuaWZvcm0yZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4
LCBpbiBmbG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcg
bG9jYXRpb24sIGluIENhbnZhc0Zsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTJp
KGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKLSAgICAgICAgW0N1c3Rv
bV0gdm9pZCB1bmlmb3JtMml2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFycmF5IHYp
OwotICAgICAgICB2b2lkIHVuaWZvcm0zZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBp
biBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtM2Z2
KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0Zsb2F0QXJyYXkgdik7Ci0gICAgICAgIHZvaWQg
dW5pZm9ybTNpKGluIGxvbmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiBsb25n
IHopOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gQ2FudmFzSW50QXJyYXkgdik7Ci0gICAgICAgIHZvaWQgdW5pZm9ybTRmKGluIGxvbmcgbG9j
YXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHosIGluIGZsb2F0IHcpOwot
ICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00ZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2Fu
dmFzRmxvYXRBcnJheSB2KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGkoaW4gbG9uZyBsb2NhdGlv
biwgaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgeiwgaW4gbG9uZyB3KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCB1bmlmb3JtNGl2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFy
cmF5IHYpOwotCi0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBsb25n
IGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBhcnJh
eSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDNmdihpbiBsb25nIGxvY2F0
aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBhcnJheSk7Ci0g
ICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihpbiBsb25nIGxvY2F0aW9uLCBp
biBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRBcnJheSBhcnJheSk7Ci0KLSAgICAg
ICAgdm9pZCAgICAgICAgIHVzZVByb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKLSAg
ICAgICAgdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dy
YW0pOwotCi0gICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihpbiB1bnNpZ25lZCBs
b25nIGluZHgsIGluIGZsb2F0IHgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliMWZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxvYXRBcnJheSB2
YWx1ZXMpOwotICAgICAgICB2b2lkICAgICAgICAgdmVydGV4QXR0cmliMmYoaW4gdW5zaWduZWQg
bG9uZyBpbmR4LCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjJmdihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZh
c0Zsb2F0QXJyYXkgdmFsdWVzKTsKLSAgICAgICAgdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjNm
KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQg
eik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZnYoaW4gdW5z
aWduZWQgbG9uZyBpbmR4LCBpbiBDYW52YXNGbG9hdEFycmF5IHZhbHVlcyk7Ci0gICAgICAgIHZv
aWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIGZsb2F0
IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHosIGluIGZsb2F0IHcpOwotICAgICAgICBbQ3VzdG9t
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4g
Q2FudmFzRmxvYXRBcnJheSB2YWx1ZXMpOwotICAgICAgICB2b2lkICAgICAgICAgdmVydGV4QXR0
cmliUG9pbnRlcihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIGxvbmcgc2l6ZSwgaW4gdW5zaWdu
ZWQgbG9uZyB0eXBlLCBpbiBib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBsb25nIHN0cmlkZSwgaW4gdW5zaWduZWQgbG9uZyBv
ZmZzZXQpOwotCi0gICAgICAgIHZvaWQgICAgICAgICB2aWV3cG9ydChpbiBsb25nIHgsIGluIGxv
bmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOwot
ICAgIH07Ci19Ci0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5jcHAJKHJldmlz
aW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFTKQotCi0jaW5jbHVkZSAiQ2FudmFzU2hhZGVyLmgiCi0j
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLSAgICAKLVBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBDYW52YXNTaGFkZXI6OmNyZWF0ZShD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclR5
cGUgdHlwZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1NoYWRlcihjdHgsIHR5
cGUpKTsKLX0KLQotQ2FudmFzU2hhZGVyOjpDYW52YXNTaGFkZXIoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKiBjdHgsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlIHR5cGUpCi0gICAgOiBD
YW52YXNPYmplY3QoY3R4KQotewotICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZVNoYWRlcih0eXBlKSk7Ci19Ci0KLXZvaWQgQ2FudmFzU2hhZGVyOjpf
ZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQotewotICAgIGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlU2hhZGVyKG9iamVjdCk7Ci19Ci0KLX0KLQotI2Vu
ZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1NoYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hhZGVy
LmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTaGFkZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBDYW52
YXNTaGFkZXJfaAotI2RlZmluZSBDYW52YXNTaGFkZXJfaAotCi0jaW5jbHVkZSAiQ2FudmFzT2Jq
ZWN0LmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBDYW52YXNT
aGFkZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkNhbnZhc1NoYWRlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KLSAgICAgICAgCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1NoYWRlcj4gY3JlYXRlKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRCosIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlKTsKLSAgICAgICAgCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgQ2FudmFzU2hhZGVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCos
IEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQg
X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gQ2FudmFzU2hhZGVyX2gKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzU2hhZGVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1NoYWRlci5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNTaGFkZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi1tb2R1bGUgaHRtbCB7Ci0gICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0zRF9D
QU5WQVNdIENhbnZhc1NoYWRlciB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzU2hvcnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1Nob3J0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoM0RfQ0FOVkFT
KQotCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNTaG9y
dEFycmF5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNzUmVmUHRyPENh
bnZhc1Nob3J0QXJyYXk+IENhbnZhc1Nob3J0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgp
Ci0gICAgewotICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZh
c0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHNob3J0KSk7Ci0gICAgICAgIHJl
dHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8
Q2FudmFzU2hvcnRBcnJheT4gQ2FudmFzU2hvcnRBcnJheTo6Y3JlYXRlKHNob3J0KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+
IGEgPSBDYW52YXNTaG9ydEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5
W2ldKTsKLSAgICAgICAgcmV0dXJuIGE7Ci0gICAgfQotCi0gICAgUGFzc1JlZlB0cjxDYW52YXNT
aG9ydEFycmF5PiBDYW52YXNTaG9ydEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJh
eUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQotICAgIHsK
LSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2YWxpZCBhbGlnbm1l
bnQuCi0gICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKHNob3J0KSkgIT0gMCkKLSAgICAgICAg
ICAgIHJldHVybiBOVUxMOwotCi0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIC8v
IENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBv
ZgotICAgICAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZS4K
LSAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihzaG9ydCkpKSA+IGJ1
ZmZlci0+Ynl0ZUxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTaG9ydEFycmF5KGJ1ZmZl
ciwgb2Zmc2V0LCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgCi0gICAgQ2FudmFzU2hvcnRBcnJheTo6
Q2FudmFzU2hvcnRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGlu
dCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKLSAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIs
IG9mZnNldCkKLSAgICAgICAgLCBtX3NpemUobGVuZ3RoKQotICAgIHsKLSAgICB9Ci0gICAgCi0g
ICAgdW5zaWduZWQgQ2FudmFzU2hvcnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgewotICAgICAgICBy
ZXR1cm4gbV9zaXplOwotICAgIH0KLSAgICAgICAgCi0gICAgdW5zaWduZWQgQ2FudmFzU2hvcnRB
cnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNp
emVvZihzaG9ydCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCShyZXZpc2lvbiA1MDYzNCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc1Nob3J0QXJyYXlfaAot
I2RlZmluZSBDYW52YXNTaG9ydEFycmF5X2gKLQotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCi0j
aW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0gICAgCi0gICAgY2xhc3MgQ2FudmFzU2hvcnRBcnJheSA6IHB1YmxpYyBD
YW52YXNBcnJheSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydEFy
cmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXNTaG9ydEFycmF5PiBjcmVhdGUoc2hvcnQqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTaG9ydEFycmF5
PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0
LCB1bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIHNob3J0KiBkYXRhKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8c2hvcnQqPihiYXNlQWRkcmVzcygpKTsgfQotCi0gICAgICAgIHZpcnR1YWwgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0
ZXMoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1w
IE5hTiB0byAwCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKHZh
bHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpKQotICAgICAgICAgICAgICAg
IHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpOwotICAgICAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCk7Ci0g
ICAgICAgICAgICBzaG9ydCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHNob3J0Kj4obV9iYXNlQWRk
cmVzcyk7Ci0gICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHNob3J0Pih2
YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGlu
ZGV4LCBzaG9ydCYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5k
ZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGl0ZW0oaW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHNob3J0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAg
ICBzaG9ydCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7Ci0g
ICAgICAgICAgICByZXR1cm4gc3RvcmFnZVtpbmRleF07Ci0gICAgICAgIH0KLQotICAgIHByaXZh
dGU6Ci0gICAgICAgIENhbnZhc1Nob3J0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICB1bnNpZ25l
ZCBtX3NpemU7Ci0gICAgfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIENhbnZhc1Nob3J0QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNT
aG9ydEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1No
b3J0QXJyYXkuaWRsCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzU2hvcnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi1tb2R1bGUgaHRtbCB7Ci0gICAgaW50ZXJmYWNlIFsKLSAgICAgICAgQ29u
ZGl0aW9uYWw9M0RfQ0FOVkFTLAotICAgICAgICBIYXNOdW1lcmljSW5kZXhHZXR0ZXIsCi0gICAg
ICAgIEhhc0N1c3RvbUluZGV4U2V0dGVyLAotICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRl
ciwKLSAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKLSAgICAgICAgQ3VzdG9tVG9K
UwotICAgIF0gQ2FudmFzU2hvcnRBcnJheSA6IENhbnZhc0FycmF5IHsKLSAgICB9OwotfQpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHR1cmUuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJDYW52YXNUZXh0dXJlLmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLVBh
c3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFzVGV4dHVyZTo6Y3JlYXRlKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCogY3R4KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzVGV4
dHVyZShjdHgpKTsKLX0KLQotQ2FudmFzVGV4dHVyZTo6Q2FudmFzVGV4dHVyZShDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqIGN0eCkKLSAgICA6IENhbnZhc09iamVjdChjdHgpCi0gICAgLCBjdWJl
TWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQoZmFsc2UpCi17Ci0gICAgc2V0T2JqZWN0KGNvbnRleHQo
KS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlVGV4dHVyZSgpKTsKLX0KLQotdm9pZCBDYW52
YXNUZXh0dXJlOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQotewotICAg
IGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOwot
fQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNUZXh0dXJlLmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgQ2FudmFzVGV4dHVyZV9oCi0jZGVmaW5lIENhbnZhc1RleHR1cmVfaAotCi0j
aW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCi0KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAK
LSAgICBjbGFzcyBDYW52YXNUZXh0dXJlIDogcHVibGljIENhbnZhc09iamVjdCB7Ci0gICAgcHVi
bGljOgotICAgICAgICB2aXJ0dWFsIH5DYW52YXNUZXh0dXJlKCkgeyBkZWxldGVPYmplY3QoKTsg
fQotICAgICAgICAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gY3Jl
YXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCopOwotICAgIAotICAgICAgICBib29sIGlzQ3Vi
ZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKCkgewotICAgICAgICAgICAgcmV0dXJuIGN1YmVNYXBS
V3JhcE1vZGVJbml0aWFsaXplZDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0Q3ViZU1h
cFJXcmFwTW9kZUluaXRpYWxpemVkKGJvb2wgaW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIGN1
YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCA9IGluaXRpYWxpemVkOwotICAgICAgICB9Ci0KLSAg
ICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENhbnZhc1RleHR1cmUoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9i
amVjdCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGN1YmVNYXBSV3JhcE1vZGVJbml0
aWFsaXplZDsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gQ2FudmFzVGV4dHVyZV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1RleHR1
cmUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5p
ZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJl
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSwyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotbW9kdWxlIGh0
bWwgewotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNUZXh0dXJl
IHsKLSAgICB9OwotfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5
dGVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNp
Z25lZEJ5dGVBcnJheS5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNzggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCi0KLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkNhbnZhc1Vu
c2lnbmVkQnl0ZUFycmF5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNz
UmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNBcnJh
eUJ1ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXpl
b2YodW5zaWduZWQgY2hhcikpOwotICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVu
Z3RoKTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBD
YW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGNoYXIqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJy
YXk+IGEgPSBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGEtPnNl
dChpLCBhcnJheVtpXSk7Ci0gICAgICAgIHJldHVybiBhOwotICAgIH0KLQotICAgIFBhc3NSZWZQ
dHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAg
ICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBh
cmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAgLy8gdGhlIGdp
dmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KLSAgICAgICAgICAgIGlmICgob2Zmc2V0
ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBjaGFyKSkpID4gYnVmZmVyLT5ieXRlTGVuZ3Ro
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KGJ1ZmZlciwgb2Zmc2V0
LCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgCi0gICAgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OkNh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IENhbnZhc0FycmF5KGJ1
ZmZlciwgb2Zmc2V0KQotICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCi0gICAgewotICAgIH0KLSAg
ICAKLSAgICB1bnNpZ25lZCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6bGVuZ3RoKCkgY29uc3Qg
ewotICAgICAgICByZXR1cm4gbV9zaXplOwotICAgIH0KLSAgICAgICAgCi0gICAgdW5zaWduZWQg
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgewotICAgICAgICBy
ZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodW5zaWduZWQgY2hhcik7Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
VW5zaWduZWRCeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1Vuc2lnbmVkQnl0ZUFycmF5LmgJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5X2gKLSNk
ZWZpbmUgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaAotCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXku
aCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eSA6IHB1YmxpYyBDYW52YXNBcnJheSB7Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNVbnNpZ25lZEJ5dGVBcnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2ln
bmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5PiBjcmVhdGUodW5zaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0g
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOwotCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYmFzZUFkZHJlc3MoKSk7IH0KLSAgICAgICAgCi0gICAg
ICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdW5z
aWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKLQotICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPj0g
bV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChpc25hbih2
YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCi0gICAgICAgICAgICAgICAgdmFsdWUgPSAwOwotICAg
ICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6
bWluKCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGNoYXI+OjptaW4oKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgdmFsdWUg
PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGNoYXI+OjptYXgoKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obV9i
YXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBn
ZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGNoYXImIHJlc3VsdCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXN1bHQgPSBpdGVtKGluZGV4KTsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBjaGFy
IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VS
VChpbmRleCA8IG1fc2l6ZSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzdG9yYWdlID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOwotICAgICAgICAgICAg
cmV0dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAg
ICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBi
dWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHVuc2lnbmVkIG1f
c2l6ZTsKLSAgICB9OwotICAgIAotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
Q2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2Ug
WwotICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCi0gICAgICAgIEhhc051bWVyaWNJbmRl
eEdldHRlciwKLSAgICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIsCi0gICAgICAgIEdlbmVyYXRl
TmF0aXZlQ29udmVydGVyLAotICAgICAgICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAotICAg
ICAgICBDdXN0b21Ub0pTCi0gICAgXSBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSA6IENhbnZhc0Fy
cmF5IHsKLSAgICB9OwotfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25l
ZEludEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsODMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRSgzRF9DQU5W
QVMpCi0KLSNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgotI2luY2x1ZGUgIkNhbnZhc1Vu
c2lnbmVkSW50QXJyYXkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotICAgIFBhc3NS
ZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6Y3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2Yo
dW5zaWduZWQgaW50KSk7Ci0gICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgp
OwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gQ2FudmFz
VW5zaWduZWRJbnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGludCogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBhID0g
Q2FudmFzVW5zaWduZWRJbnRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGEtPnNldChpLCBhcnJh
eVtpXSk7Ci0gICAgICAgIHJldHVybiBhOwotICAgIH0KLQotICAgIFBhc3NSZWZQdHI8Q2FudmFz
VW5zaWduZWRJbnRBcnJheT4gQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQ
dHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgb2Zmc2V0IHJlc3VsdHMgaW4gdmFsaWQgYWxpZ25tZW50LgotICAgICAgICBpZiAoKG9m
ZnNldCAlIHNpemVvZih1bnNpZ25lZCBpbnQpKSAhPSAwKSB7Ci0gICAgICAgICAgICByZXR1cm4g
TlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgICAgIC8v
IENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBv
ZgotICAgICAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZS4K
LSAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQp
KSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzVW5zaWduZWRJ
bnRBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIAotICAgIENhbnZh
c1Vuc2lnbmVkSW50QXJyYXk6OkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkoUGFzc1JlZlB0cjxDYW52
YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAg
ICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCi0gICAgICAgICwgbV9zaXplKGxlbmd0
aCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkSW50QXJy
YXk6Omxlbmd0aCgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9Ci0gICAg
ICAgIAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkSW50QXJyYXk6OnNpemVJbkJ5dGVzKCkg
Y29uc3QgewotICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodW5zaWduZWQgaW50KTsK
LSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmgJKHJldmlzaW9uIDUwNjM0KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQ2FudmFzVW5zaWduZWRJ
bnRBcnJheV9oCi0jZGVmaW5lIENhbnZhc1Vuc2lnbmVkSW50QXJyYXlfaAotCi0jaW5jbHVkZSAi
Q2FudmFzQXJyYXkuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBjbGFzcyBDYW52YXNVbnNp
Z25lZEludEFycmF5IDogcHVibGljIENhbnZhc0FycmF5IHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vu
c2lnbmVkSW50QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBj
cmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOwotCi0gICAgICAgIHVuc2lnbmVkIGludCogZGF0YSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KGJhc2VBZGRyZXNzKCkpOyB9Ci0gICAgICAgIAot
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFs
IHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXQodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4
ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoaXNu
YW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAotICAgICAgICAgICAgICAgIHZhbHVlID0gMDsK
LSAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50
Pjo6bWluKCkpCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGludD46Om1pbigpOwotICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkIGludD46Om1heCgpKQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGludCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludCo+KG1fYmFz
ZUFkZHJlc3MpOwotICAgICAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBnZXQo
dW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGludCYgcmVzdWx0KSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW0oaW5kZXgpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGludCBpdGVt
KHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5k
ZXggPCBtX3NpemUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICByZXR1cm4g
c3RvcmFnZVtpbmRleF07Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZh
c1Vuc2lnbmVkSW50QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBp
bnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICB1bnNpZ25lZCBtX3NpemU7Ci0g
ICAgfTsKLSAgICAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIENhbnZhc1Vu
c2lnbmVkSW50QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25l
ZEludEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vu
c2lnbmVkSW50QXJyYXkuaWRsCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzVW5zaWduZWRJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLW1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBD
b25kaXRpb25hbD0zRF9DQU5WQVMsCi0gICAgICAgIEhhc051bWVyaWNJbmRleEdldHRlciwKLSAg
ICAgICAgSGFzQ3VzdG9tSW5kZXhTZXR0ZXIsCi0gICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVy
dGVyLAotICAgICAgICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAotICAgICAgICBDdXN0b21U
b0pTCi0gICAgXSBDYW52YXNVbnNpZ25lZEludEFycmF5IDogQ2FudmFzQXJyYXkgewotICAgIH07
Ci19CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuY3BwCShyZXZpc2lvbiA1MDYzNCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKDNEX0NBTlZBUykKLQot
I2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLSAgICBQYXNzUmVmUHRy
PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVm
ZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpOwotICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3Ro
KTsKLSAgICB9Ci0KLSAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNp
Z25lZCBsZW5ndGgpCi0gICAgewotICAgICAgICBSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5PiBhID0gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgYS0+
c2V0KGksIGFycmF5W2ldKTsKLSAgICAgICAgcmV0dXJuIGE7Ci0gICAgfQotCi0gICAgUGFzc1Jl
ZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6
Y3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQotICAg
IHsKLSAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2YWxpZCBhbGln
bm1lbnQuCi0gICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkgIT0g
MCkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
YnVmZmVyKSB7Ci0gICAgICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtp
bmcgYWJvdXQgYSB2YWxpZCByZWdpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52
YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCi0gICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5n
dGggKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkgCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShidWZmZXIsIG9mZnNldCwgbGVu
Z3RoKSk7Ci0gICAgfQotICAgIAotICAgIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6Q2FudmFz
VW5zaWduZWRTaG9ydEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQot
ICAgICAgICA6IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zmc2V0KQotICAgICAgICAsIG1fc2l6ZShs
ZW5ndGgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBDYW52YXNVbnNpZ25lZFNo
b3J0QXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICB9
Ci0gICAgICAgIAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6c2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih1bnNpZ25l
ZCBzaG9ydCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaAkocmV2
aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheV9oCi0jZGVmaW5lIENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheV9oCi0KLSNpbmNsdWRlICJDYW52YXNBcnJheS5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAot
ICAgIGNsYXNzIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7
Ci0gICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJyYXko
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUodW5zaWdu
ZWQgc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0Fy
cmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7Ci0KLSAgICAg
ICAgdW5zaWduZWQgc2hvcnQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBz
aG9ydCo+KGJhc2VBZGRyZXNzKCkpOyB9Ci0gICAgICAgIAotICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVz
KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBO
YU4gdG8gMAotICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgIGlmICh2YWx1
ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptaW4oKSkKLSAgICAgICAg
ICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptaW4o
KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZCBzaG9ydD46Om1heCgpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgpOwotICAgICAgICAgICAgdW5zaWduZWQgc2hv
cnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1fYmFzZUFkZHJlc3Mp
OwotICAgICAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29sIGdldCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgc2hvcnQmIHJlc3VsdCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIHNob3J0Kj4obV9iYXNlQWRkcmVzcyk7Ci0gICAgICAgICAgICByZXN1bHQgPSBzdG9yYWdl
W2luZGV4XTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBzaG9ydCBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOwotICAgICAgICAgICAgdW5z
aWduZWQgc2hvcnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1fYmFz
ZUFkZHJlc3MpOwotICAgICAgICAgICAgcmV0dXJuIHN0b3JhZ2VbaW5kZXhdOwotICAgICAgICB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoUGFzc1Jl
ZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLGludCBvZmZzZXQsdW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAgICAgdW5zaWduZWQgbV9zaXplOwotICAgIH07Ci0gICAgCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlfaApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbAko
cmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkU2hv
cnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLW1v
ZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgWwotICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5W
QVMsCi0gICAgICAgIEhhc051bWVyaWNJbmRleEdldHRlciwKLSAgICAgICAgSGFzQ3VzdG9tSW5k
ZXhTZXR0ZXIsCi0gICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAotICAgICAgICBHZW5l
cmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAotICAgICAgICBDdXN0b21Ub0pTCi0gICAgXSBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkgOiBDYW52YXNBcnJheSB7Ci0gICAgfTsKLX0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzQWN0aXZlSW5mby5oOjUwNTc1KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzQWN0aXZlSW5mb19oCisjZGVmaW5lIENhbnZhc0FjdGl2ZUluZm9faAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2Fu
dmFzQWN0aXZlSW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0FjdGl2ZUluZm8+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBuYW1lLCB1bnNpZ25lZCB0eXBlLCBpbnQgc2l6ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzQWN0aXZlSW5mbyhuYW1lLCB0eXBlLCBzaXplKSk7
CisgICAgfQorICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAg
dW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIGludCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKK3ByaXZhdGU6CisgICAgQ2FudmFzQWN0aXZlSW5m
byhjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXplKQorICAgICAgICA6
IG1fbmFtZShuYW1lKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fc2l6ZShz
aXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5hbWUubGVuZ3RoKCkpOworICAgICAgICBBU1NF
UlQodHlwZSk7CisgICAgICAgIEFTU0VSVChzaXplKTsKKyAgICB9CisgICAgU3RyaW5nIG1fbmFt
ZTsKKyAgICB1bnNpZ25lZCBtX3R5cGU7CisgICAgaW50IG1fc2l6ZTsKK307CisKK30KKworI2Vu
ZGlmIC8vIENhbnZhc0FjdGl2ZUluZm9faApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEFjdGl2ZUluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0
aXZlSW5mby5oCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xB
Y3RpdmVJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgQ2FudmFzQWN0aXZlSW5mb19oCi0jZGVmaW5lIENhbnZhc0Fj
dGl2ZUluZm9faAorI2lmbmRlZiBXZWJHTEFjdGl2ZUluZm9faAorI2RlZmluZSBXZWJHTEFjdGl2
ZUluZm9faAogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpAQCAtMzIsMTggKzMyLDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgQ2FudmFzQWN0aXZlSW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0FjdGl2ZUlu
Zm8+IHsKK2NsYXNzIFdlYkdMQWN0aXZlSW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYkdMQWN0
aXZlSW5mbz4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0FjdGl2ZUlu
Zm8+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXplKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gY3JlYXRlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgdW5zaWduZWQgdHlwZSwgaW50IHNpemUpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENhbnZhc0FjdGl2ZUluZm8obmFtZSwgdHlwZSwgc2l6ZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMQWN0aXZlSW5mbyhuYW1lLCB0eXBlLCBzaXplKSk7
CiAgICAgfQogICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAg
dW5zaWduZWQgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGludCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKIHByaXZhdGU6Ci0gICAgQ2FudmFzQWN0aXZlSW5m
byhjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXplKQorICAgIFdlYkdM
QWN0aXZlSW5mbyhjb25zdCBTdHJpbmcmIG5hbWUsIHVuc2lnbmVkIHR5cGUsIGludCBzaXplKQog
ICAgICAgICA6IG1fbmFtZShuYW1lKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAs
IG1fc2l6ZShzaXplKQpAQCAtNTksNCArNTksNCBAQCBwcml2YXRlOgogCiB9CiAKLSNlbmRpZiAv
LyBDYW52YXNBY3RpdmVJbmZvX2gKKyNlbmRpZiAvLyBXZWJHTEFjdGl2ZUluZm9faApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAkocmV2aXNpb24gNTA1NzUpCShm
cm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQWN0aXZlSW5mby5pZGw6NTA1NzUpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCittb2R1bGUgaHRtbCB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25h
bD0zRF9DQU5WQVMsCisgICAgXSBDYW52YXNBY3RpdmVJbmZvIHsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIGludCBzaXplOworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
aW50IHR5cGU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbmFtZTsKKyAg
ICB9OworCit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQWN0aXZlSW5mby5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUluZm8uaWRsCShy
ZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQCBtb2R1bGUgaHRtbCB7CiAKICAgICBp
bnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5WQVMsCi0gICAgXSBDYW52YXNB
Y3RpdmVJbmZvIHsKKyAgICBdIFdlYkdMQWN0aXZlSW5mbyB7CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBpbnQgc2l6ZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGlu
dCB0eXBlOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG5hbWU7CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNp
bmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBDYW52YXNBcnJheTo6Q2FudmFzQXJyYXkoUGFzc1Jl
ZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBvZmZzZXQpCisgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAgICAg
ICAsIG1fYnVmZmVyKGJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1
ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9idWZmZXItPmRhdGEoKSkgKyBtX29mZnNldCkg
OiAwOworICAgIH0KKworICAgIENhbnZhc0FycmF5Ojp+Q2FudmFzQXJyYXkoKQorICAgIHsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBDYW52YXNBcnJheTo6YWxpZ25lZFNpemVJbkJ5dGVzKCkgY29u
c3QgeworICAgICAgICAvLyBBc3N1bWUgd2Ugb25seSBuZWVkIHRvIHJvdW5kIHVwIHRvIDQtYnl0
ZSBib3VuZGFyaWVzIGZvciBhbGlnbm1lbnQuCisgICAgICAgIHJldHVybiAoKHNpemVJbkJ5dGVz
KCkgKyAzKSAvIDQpICogNDsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDExICsyNywxMSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZh
c0FycmF5LmgiCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJH
TEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgQ2FudmFzQXJyYXk6OkNhbnZhc0FycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciwKKyAgICBXZWJHTEFycmF5OjpXZWJHTEFycmF5KFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBvZmZzZXQpCiAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAsIG1f
YnVmZmVyKGJ1ZmZlcikKQEAgLTM5LDExICszOSwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIG1fYmFzZUFkZHJlc3MgPSBtX2J1ZmZlciA/IChzdGF0aWNfY2FzdDxjaGFyKj4obV9i
dWZmZXItPmRhdGEoKSkgKyBtX29mZnNldCkgOiAwOwogICAgIH0KIAotICAgIENhbnZhc0FycmF5
Ojp+Q2FudmFzQXJyYXkoKQorICAgIFdlYkdMQXJyYXk6On5XZWJHTEFycmF5KCkKICAgICB7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgQ2FudmFzQXJyYXk6OmFsaWduZWRTaXplSW5CeXRlcygpIGNv
bnN0IHsKKyAgICB1bnNpZ25lZCBXZWJHTEFycmF5OjphbGlnbmVkU2l6ZUluQnl0ZXMoKSBjb25z
dCB7CiAgICAgICAgIC8vIEFzc3VtZSB3ZSBvbmx5IG5lZWQgdG8gcm91bmQgdXAgdG8gNC1ieXRl
IGJvdW5kYXJpZXMgZm9yIGFsaWdubWVudC4KICAgICAgICAgcmV0dXJuICgoc2l6ZUluQnl0ZXMo
KSArIDMpIC8gNCkgKiA0OwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xB
cnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCShy
ZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNBcnJheS5oOjUw
NTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFzQXJyYXlfaAorI2RlZmlu
ZSBDYW52YXNBcnJheV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIkNh
bnZhc0FycmF5QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBDYW52
YXNBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbnZhc0FycmF5PiB7CisgICAgcHVibGljOgor
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEJ5dGVBcnJheSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZFNob3J0QXJy
YXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vu
c2lnbmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNGbG9hdEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgCisg
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlcigpIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX2J1ZmZlcjsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQqIGJhc2VBZGRy
ZXNzKCkgeworICAgICAgICAgICAgcmV0dXJuIG1fYmFzZUFkZHJlc3M7CisgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCBvZmZzZXQoKSBjb25zdCB7CisgICAgICAgICAgICByZXR1cm4gbV9v
ZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0ID0g
MDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBhbGlnbmVkU2l6ZUluQnl0ZXMoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCB+Q2FudmFzQXJyYXkoKTsKKworICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgQ2FudmFzQXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNp
Z25lZCBvZmZzZXQpOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIENh
bnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgb2Zmc2V0LgorICAgICAgICB2b2lk
KiBtX2Jhc2VBZGRyZXNzOworICAgICAgICB1bnNpZ25lZCBtX29mZnNldDsKKyAgICAgICAgCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBtX2J1ZmZlcjsK
KyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFz
QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDE2ICsyMywxNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52YXNBcnJh
eV9oCi0jZGVmaW5lIENhbnZhc0FycmF5X2gKKyNpZm5kZWYgV2ViR0xBcnJheV9oCisjZGVmaW5l
IFdlYkdMQXJyYXlfaAogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlICJDYW52
YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewotICAgIGNsYXNzIENhbnZhc0FycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8
Q2FudmFzQXJyYXk+IHsKKyAgICBjbGFzcyBXZWJHTEFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8
V2ViR0xBcnJheT4gewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFy
cmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzVW5z
aWduZWRCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNDIsNyArNDIsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50
QXJyYXkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNG
bG9hdEFycmF5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgCi0gICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlcigpIHsKKyAgICAgICAgUGFzc1JlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIoKSB7CiAgICAgICAgICAgICByZXR1cm4gbV9idWZm
ZXI7CiAgICAgICAgIH0KIApAQCAtNTcsMTkgKzU3LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgICAgIHZp
cnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwg
dW5zaWduZWQgYWxpZ25lZFNpemVJbkJ5dGVzKCkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgfkNh
bnZhc0FycmF5KCk7CisgICAgICAgIHZpcnR1YWwgfldlYkdMQXJyYXkoKTsKIAogICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgQ2FudmFzQXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4g
YnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQpOworICAgICAgICBXZWJHTEFycmF5KFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQpOwogCi0gICAgICAgIC8v
IFRoaXMgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZSwg
cGx1cyB0aGUgb2Zmc2V0LgorICAgICAgICAvLyBUaGlzIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBX
ZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZSwgcGx1cyB0aGUgb2Zmc2V0LgogICAgICAgICB2b2lk
KiBtX2Jhc2VBZGRyZXNzOwogICAgICAgICB1bnNpZ25lZCBtX29mZnNldDsKICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBtX2J1ZmZlcjsK
KyAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IG1fYnVmZmVyOwogICAgIH07CiAgICAg
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNBcnJheV9oCisjZW5k
aWYgLy8gV2ViR0xBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXku
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGwJKHJl
dmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0FycmF5LmlkbDo1
MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBUywgQ3VzdG9tVG9KU10gQ2FudmFzQXJyYXkgeworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7CisgICAgICAgIGludCBzaXplSW5C
eXRlcygpOworICAgICAgICBpbnQgYWxpZ25lZFNpemVJbkJ5dGVzKCk7CisgICAgfTsKK30KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsy
NCw3IEBACiAgKi8KIAogbW9kdWxlIGh0bWwgewotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9
M0RfQ0FOVkFTLCBDdXN0b21Ub0pTXSBDYW52YXNBcnJheSB7CisgICAgaW50ZXJmYWNlIFtDb25k
aXRpb25hbD0zRF9DQU5WQVMsIEN1c3RvbVRvSlNdIFdlYkdMQXJyYXkgewogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgbG9uZyBsZW5ndGg7CiAgICAgICAgIGludCBzaXplSW5CeXRlcygpOwog
ICAgICAgICBpbnQgYWxpZ25lZFNpemVJbkJ5dGVzKCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQXJyYXlCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc0FycmF5QnVmZmVyLmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMp
CisKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gQ2FudmFzQXJyYXlCdWZm
ZXI6OmNyZWF0ZSh1bnNpZ25lZCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2FudmFzQXJyYXlCdWZmZXIoc2l6ZUluQnl0ZXMpKTsKKyAgICB9CisgICAg
CisgICAgQ2FudmFzQXJyYXlCdWZmZXI6OkNhbnZhc0FycmF5QnVmZmVyKHVuc2lnbmVkIHNpemVJ
bkJ5dGVzKSB7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSBzaXplSW5CeXRlczsKKyAgICAgICAg
bV9kYXRhID0gV1RGOjpmYXN0WmVyb2VkTWFsbG9jKHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCogQ2FudmFzQXJyYXlCdWZmZXI6OmRhdGEoKSB7CisgICAgICAgIHJldHVybiBt
X2RhdGE7CisgICAgfQorCisgICAgdW5zaWduZWQgQ2FudmFzQXJyYXlCdWZmZXI6OmJ5dGVMZW5n
dGgoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIH0KKworICAg
IENhbnZhc0FycmF5QnVmZmVyOjp+Q2FudmFzQXJyYXlCdWZmZXIoKSB7CisgICAgICAgIFdURjo6
ZmFzdEZyZWUobV9kYXRhKTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuY3BwCShyZXZpc2lv
biA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDI5ICsyNywyOSBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykK
IAotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1
ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52
YXNBcnJheUJ1ZmZlcj4gQ2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZSh1bnNpZ25lZCBzaXplSW5C
eXRlcykKKyAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IFdlYkdMQXJyYXlCdWZmZXI6
OmNyZWF0ZSh1bnNpZ25lZCBzaXplSW5CeXRlcykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzQXJyYXlCdWZmZXIoc2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJHTEFycmF5QnVmZmVyKHNpemVJbkJ5dGVzKSk7CiAgICAgfQogICAg
IAotICAgIENhbnZhc0FycmF5QnVmZmVyOjpDYW52YXNBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXpl
SW5CeXRlcykgeworICAgIFdlYkdMQXJyYXlCdWZmZXI6OldlYkdMQXJyYXlCdWZmZXIodW5zaWdu
ZWQgc2l6ZUluQnl0ZXMpIHsKICAgICAgICAgbV9zaXplSW5CeXRlcyA9IHNpemVJbkJ5dGVzOwog
ICAgICAgICBtX2RhdGEgPSBXVEY6OmZhc3RaZXJvZWRNYWxsb2Moc2l6ZUluQnl0ZXMpOwogICAg
IH0KICAgICAKLSAgICB2b2lkKiBDYW52YXNBcnJheUJ1ZmZlcjo6ZGF0YSgpIHsKKyAgICB2b2lk
KiBXZWJHTEFycmF5QnVmZmVyOjpkYXRhKCkgewogICAgICAgICByZXR1cm4gbV9kYXRhOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIENhbnZhc0FycmF5QnVmZmVyOjpieXRlTGVuZ3RoKCkgY29uc3Qg
eworICAgIHVuc2lnbmVkIFdlYkdMQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdCB7CiAg
ICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwogICAgIH0KIAotICAgIENhbnZhc0FycmF5QnVm
ZmVyOjp+Q2FudmFzQXJyYXlCdWZmZXIoKSB7CisgICAgV2ViR0xBcnJheUJ1ZmZlcjo6fldlYkdM
QXJyYXlCdWZmZXIoKSB7CiAgICAgICAgIFdURjo6ZmFzdEZyZWUobV9kYXRhKTsKICAgICB9CiB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaAkocmV2aXNpb24gNTA1
NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQXJyYXlCdWZmZXIuaDo1MDU3NSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheUJ1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc0FycmF5QnVmZmVyX2gK
KyNkZWZpbmUgQ2FudmFzQXJyYXlCdWZmZXJfaAorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCisgICAgY2xhc3MgQ2FudmFzQXJyYXlCdWZmZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52
YXNBcnJheUJ1ZmZlcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2FudmFzQXJyYXlCdWZmZXI+IGNyZWF0ZSh1bnNpZ25lZCBzaXplSW5CeXRlcyk7CisKKyAgICAg
ICAgdm9pZCogZGF0YSgpOworICAgICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisK
KyAgICAgICAgfkNhbnZhc0FycmF5QnVmZmVyKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBD
YW52YXNBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRlcyk7CisgICAgICAgIHVuc2lnbmVk
IG1fc2l6ZUluQnl0ZXM7CisgICAgICAgIHZvaWQqIG1fZGF0YTsKKyAgICB9OworICAgIAorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzQXJyYXlCdWZmZXJfaApJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgJKHJldmlzaW9uIDUwNTc1KQor
KysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5QnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIzLDI5ICsyMywyOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52
YXNBcnJheUJ1ZmZlcl9oCi0jZGVmaW5lIENhbnZhc0FycmF5QnVmZmVyX2gKKyNpZm5kZWYgV2Vi
R0xBcnJheUJ1ZmZlcl9oCisjZGVmaW5lIFdlYkdMQXJyYXlCdWZmZXJfaAogCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgQ2FudmFzQXJyYXlCdWZmZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxDYW52YXNBcnJheUJ1ZmZlcj4geworICAgIGNsYXNzIFdlYkdMQXJyYXlCdWZm
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTEFycmF5QnVmZmVyPiB7CiAgICAgcHVibGljOgot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gY3JlYXRlKHVuc2ln
bmVkIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gY3JlYXRlKHVuc2lnbmVkIHNpemVJbkJ5dGVzKTsKIAogICAgICAgICB2b2lkKiBkYXRh
KCk7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKIAotICAgICAgICB+Q2Fu
dmFzQXJyYXlCdWZmZXIoKTsKKyAgICAgICAgfldlYkdMQXJyYXlCdWZmZXIoKTsKIAogICAgIHBy
aXZhdGU6Ci0gICAgICAgIENhbnZhc0FycmF5QnVmZmVyKHVuc2lnbmVkIHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgV2ViR0xBcnJheUJ1ZmZlcih1bnNpZ25lZCBzaXplSW5CeXRlcyk7CiAgICAgICAg
IHVuc2lnbmVkIG1fc2l6ZUluQnl0ZXM7CiAgICAgICAgIHZvaWQqIG1fZGF0YTsKICAgICB9Owog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ2FudmFzQXJyYXlCdWZm
ZXJfaAorI2VuZGlmIC8vIFdlYkdMQXJyYXlCdWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTEFycmF5QnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQXJyYXlCdWZmZXIuaWRsCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNBcnJheUJ1ZmZlci5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQXJyYXlCdWZmZXIuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFtDb25kaXRpb25hbD0z
RF9DQU5WQVNdIENhbnZhc0FycmF5QnVmZmVyIHsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IGludCBieXRlTGVuZ3RoOworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQXJyYXlCdWZmZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheUJ1ZmZlci5pZGwJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEFycmF5QnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAog
ICovCiAKIG1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZB
U10gQ2FudmFzQXJyYXlCdWZmZXIgeworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FO
VkFTXSBXZWJHTEFycmF5QnVmZmVyIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGludCBi
eXRlTGVuZ3RoOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNw
cAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVy
LmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQnVmZmVyLmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKyAgICAKK1Bhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBDYW52YXNCdWZmZXI6OmNyZWF0ZShD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENhbnZhc0J1ZmZlcihjdHgpKTsKK30KKworQ2FudmFzQnVmZmVyOjpDYW52YXNCdWZmZXIoQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjdHgpCisgICAgOiBDYW52YXNPYmplY3QoY3R4KQorewor
ICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZl
cigpKTsKK30KKwordm9pZCBDYW52YXNCdWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCit7CisgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxl
dGVCdWZmZXIob2JqZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NywyMyArMjcsMjMgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52
YXNCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNs
dWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPENhbnZhc0J1ZmZlcj4gQ2Fu
dmFzQnVmZmVyOjpjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjdHgpCitQYXNzUmVm
UHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY3R4KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzQnVmZmVyKGN0eCkpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xCdWZmZXIoY3R4KSk7CiB9CiAKLUNhbnZhc0J1
ZmZlcjo6Q2FudmFzQnVmZmVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQotICAgIDog
Q2FudmFzT2JqZWN0KGN0eCkKK1dlYkdMQnVmZmVyOjpXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGN0eCkKKyAgICA6IFdlYkdMT2JqZWN0KGN0eCkKIHsKICAgICBzZXRPYmplY3Qo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVCdWZmZXIoKSk7CiB9CiAKLXZv
aWQgQ2FudmFzQnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQor
dm9pZCBXZWJHTEJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkK
IHsKICAgICBjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihvYmpl
Y3QpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkocmV2aXNpb24gNTA1NzUp
CShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnVmZmVyLmg6NTA1NzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQ2FudmFzQnVmZmVyX2gKKyNkZWZpbmUgQ2FudmFzQnVm
ZmVyX2gKKworI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzQnVmZmVyIDogcHVibGljIENhbnZhc09iamVjdCB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DYW52YXNCdWZmZXIoKSB7IGRlbGV0ZU9i
amVjdCgpOyB9CisgICAgICAgIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNCdWZm
ZXI+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKKyAgICAgICAgCisgICAgcHJv
dGVjdGVkOgorICAgICAgICBDYW52YXNCdWZmZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7
CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNE
T2JqZWN0IG8pOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBDYW52YXNCdWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAkocmV2
aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDI4ICsyMywyOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lm
bmRlZiBDYW52YXNCdWZmZXJfaAotI2RlZmluZSBDYW52YXNCdWZmZXJfaAorI2lmbmRlZiBXZWJH
TEJ1ZmZlcl9oCisjZGVmaW5lIFdlYkdMQnVmZmVyX2gKIAotI2luY2x1ZGUgIkNhbnZhc09iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKLSAgICBjbGFzcyBDYW52YXNCdWZmZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKKyAg
ICBjbGFzcyBXZWJHTEJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CiAgICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIH5DYW52YXNCdWZmZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAg
ICAgIHZpcnR1YWwgfldlYkdMQnVmZmVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQogICAgICAgICAK
LSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBjcmVhdGUoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIAogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgQ2FudmFzQnVmZmVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCopOworICAg
ICAgICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICAgICAgCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgbyk7CiAgICAg
fTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENhbnZhc0J1ZmZl
cl9oCisjZW5kaWYgLy8gV2ViR0xCdWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1
ZmZlci5pZGwJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0J1ZmZlci5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlk
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwg
eworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNCdWZmZXIgewor
ICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbAkocmV2aXNpb24g
NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMjQsNiArMjQsNiBAQAogICovCiAKIG1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzQnVmZmVyIHsKKyAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xCdWZmZXIgewogICAgIH07CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9t
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzQnl0ZUFycmF5LmNwcDo1MDU3NSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52
YXNCeXRlQXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorUGFzc1JlZlB0cjxD
YW52YXNCeXRlQXJyYXk+IENhbnZhc0J5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
K3sKKyAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVm
ZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHNpZ25lZCBjaGFyKSk7CisgICAgcmV0dXJuIGNy
ZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5
PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZShzaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxl
bmd0aCkKK3sKKyAgICBSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBhID0gQ2FudmFzQnl0ZUFycmF5
OjpjcmVhdGUobGVuZ3RoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCisgICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7CisgICAgcmV0dXJuIGE7Cit9CisKK1Bh
c3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKK3sKKyAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3
ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgorICAgICAgICAvLyB0aGUgZ2l2
ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICBpZiAoKG9mZnNldCArIChs
ZW5ndGggKiBzaXplb2Yoc2lnbmVkIGNoYXIpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKKyAg
ICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IENhbnZhc0J5dGVBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7Cit9CisKK0NhbnZh
c0J5dGVBcnJheTo6Q2FudmFzQnl0ZUFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+
IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgIDogQ2FudmFzQXJyYXko
YnVmZmVyLCBvZmZzZXQpCisgICAgLCBtX3NpemUobGVuZ3RoKQoreworfQorCit1bnNpZ25lZCBD
YW52YXNCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9zaXplOworfQor
ICAgIAordW5zaWduZWQgQ2FudmFzQnl0ZUFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKKyAg
ICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2Yoc2lnbmVkIGNoYXIpOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5
dGVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVB
cnJheS5jcHAJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5
dGVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQ4ICsyNyw0OCBAQAogCiAjaWYgRU5B
QkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVk
ZSAiQ2FudmFzQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIldlYkdMQnl0ZUFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLVBh
c3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBDYW52YXNCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25l
ZCBsZW5ndGgpCitQYXNzUmVmUHRyPFdlYkdMQnl0ZUFycmF5PiBXZWJHTEJ5dGVBcnJheTo6Y3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1
ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHNpZ25lZCBj
aGFyKSk7CisgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlC
dWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2Yoc2lnbmVkIGNoYXIpKTsKICAgICByZXR1cm4g
Y3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNCeXRlQXJy
YXk+IENhbnZhc0J5dGVBcnJheTo6Y3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKQorUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gV2ViR0xCeXRlQXJyYXk6OmNyZWF0
ZShzaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBSZWZQdHI8Q2Fu
dmFzQnl0ZUFycmF5PiBhID0gQ2FudmFzQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKTsKKyAgICBS
ZWZQdHI8V2ViR0xCeXRlQXJyYXk+IGEgPSBXZWJHTEJ5dGVBcnJheTo6Y3JlYXRlKGxlbmd0aCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICBhLT5z
ZXQoaSwgYXJyYXlbaV0pOwogICAgIHJldHVybiBhOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0J5
dGVBcnJheT4gQ2FudmFzQnl0ZUFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1
ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCitQYXNzUmVmUHRyPFdl
YkdMQnl0ZUFycmF5PiBXZWJHTEJ5dGVBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYg
KGJ1ZmZlcikgewogICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcg
YWJvdXQgYSB2YWxpZCByZWdpb24gb2YKLSAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5
QnVmZmVyJ3Mgc3RvcmFnZS4KKyAgICAgICAgLy8gdGhlIGdpdmVuIFdlYkdMQXJyYXlCdWZmZXIn
cyBzdG9yYWdlLgogICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2Yoc2lnbmVk
IGNoYXIpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKICAgICAgICAgICAgIHJldHVybiBOVUxM
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc0J5dGVBcnJheShi
dWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEJ5
dGVBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CiB9CiAKLUNhbnZhc0J5dGVBcnJheTo6
Q2FudmFzQnl0ZUFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50
IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZz
ZXQpCitXZWJHTEJ5dGVBcnJheTo6V2ViR0xCeXRlQXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5
QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICA6IFdlYkdM
QXJyYXkoYnVmZmVyLCBvZmZzZXQpCiAgICAgLCBtX3NpemUobGVuZ3RoKQogewogfQogCi11bnNp
Z25lZCBDYW52YXNCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKK3Vuc2lnbmVkIFdlYkdMQnl0
ZUFycmF5OjpsZW5ndGgoKSBjb25zdCB7CiAgICAgcmV0dXJuIG1fc2l6ZTsKIH0KICAgICAKLXVu
c2lnbmVkIENhbnZhc0J5dGVBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7Cit1bnNpZ25lZCBX
ZWJHTEJ5dGVBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7CiAgICAgcmV0dXJuIGxlbmd0aCgp
ICogc2l6ZW9mKHNpZ25lZCBjaGFyKTsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ5dGVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuaAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzQnl0ZUFycmF5Lmg6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzQnl0ZUFycmF5X2gKKyNkZWZpbmUgQ2FudmFzQnl0ZUFycmF5X2gKKworI2luY2x1ZGUg
IkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzQXJy
YXlCdWZmZXI7CisKKyAgICBjbGFzcyBDYW52YXNCeXRlQXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJy
YXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5KCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J5
dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBjcmVh
dGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworCisgICAgICAgIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyKj4oYmFzZUFkZHJlc3MoKSk7IH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxl
bmd0aCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29u
c3Q7CisKKyAgICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8g
MAorICAgICAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+OjptaW4oKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+OjptaW4oKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxzaWduZWQgY2hhcj46Om1h
eCgpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czxzaWduZWQg
Y2hhcj46Om1heCgpOworICAgICAgICAgICAgc2lnbmVkIGNoYXIqIHN0b3JhZ2UgPSBzdGF0aWNf
Y2FzdDxzaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAgICAgc3RvcmFnZVtp
bmRleF0gPSBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4odmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgc2lnbmVkIGNoYXImIHJlc3Vs
dCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzaWduZWQgY2hhciogc3Rv
cmFnZSA9IHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyKj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAg
ICAgICByZXN1bHQgPSBzdG9yYWdlW2luZGV4XTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgc2lnbmVkIGNoYXIgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXplKTsKKyAgICAg
ICAgICAgIHNpZ25lZCBjaGFyKiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXIqPiht
X2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKKyAgICAg
ICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhc0J5dGVBcnJheShQYXNzUmVmUHRyPENh
bnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
dW5zaWduZWQgbV9zaXplOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBDYW52YXNCeXRlQXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ5dGVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuaAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Qnl0ZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMCBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52YXNCeXRlQXJyYXlfaAotI2RlZmluZSBDYW52YXNC
eXRlQXJyYXlfaAorI2lmbmRlZiBXZWJHTEJ5dGVBcnJheV9oCisjZGVmaW5lIFdlYkdMQnl0ZUFy
cmF5X2gKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5o
IgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNCwxNSArMzQsMTUgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAotICAgIGNsYXNzIENhbnZhc0FycmF5QnVmZmVyOworICAgIGNsYXNzIFdl
YkdMQXJyYXlCdWZmZXI7CiAKLSAgICBjbGFzcyBDYW52YXNCeXRlQXJyYXkgOiBwdWJsaWMgQ2Fu
dmFzQXJyYXkgeworICAgIGNsYXNzIFdlYkdMQnl0ZUFycmF5IDogcHVibGljIFdlYkdMQXJyYXkg
ewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGlzQnl0ZUFycmF5KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0J5dGVB
cnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc0J5dGVBcnJheT4gY3JlYXRlKHNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzQnl0ZUFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gY3Jl
YXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQnl0
ZUFycmF5PiBjcmVhdGUoc2lnbmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ5dGVBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8
V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwog
CiAgICAgICAgIGNoYXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYmFzZUFk
ZHJlc3MoKSk7IH0KIApAQCAtNzksNyArNzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICByZXR1cm4gc3RvcmFnZVtpbmRleF07CiAgICAgICAgIH0KICAgICBwcml2YXRlOgot
ICAgICAgICBDYW52YXNCeXRlQXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVm
ZmVyLAorICAgICAgICBXZWJHTEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpOwogICAgICAgICB1bnNpZ25lZCBtX3NpemU7
CkBAIC04Nyw0ICs4Nyw0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENhbnZhc0J5dGVBcnJheV9oCisjZW5kaWYgLy8gV2Vi
R0xCeXRlQXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5pZGwJ
KHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0J5dGVBcnJh
eS5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmlkbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworbW9kdWxlIGh0bWwgewor
ICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNEX0NBTlZBUywKKyAgICAgICAg
SGFzTnVtZXJpY0luZGV4R2V0dGVyLAorICAgICAgICBIYXNDdXN0b21JbmRleFNldHRlciwKKyAg
ICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29u
c3RydWN0b3IsCisgICAgICAgIEN1c3RvbVRvSlMKKyAgICBdIENhbnZhc0J5dGVBcnJheSA6IENh
bnZhc0FycmF5IHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5
dGVBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVB
cnJheS5pZGwJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5
dGVBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDYgQEAgbW9kdWxlIGh0bWwg
ewogICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKICAgICAgICAgR2VuZXJhdGVDdXN0
b21Db25zdHJ1Y3RvciwKICAgICAgICAgQ3VzdG9tVG9KUwotICAgIF0gQ2FudmFzQnl0ZUFycmF5
IDogQ2FudmFzQXJyYXkgeworICAgIF0gV2ViR0xCeXRlQXJyYXkgOiBXZWJHTEFycmF5IHsKICAg
ICB9OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcAkocmV2
aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzRmxvYXRBcnJheS5j
cHA6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBQYXNzUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IENhbnZhc0Zsb2F0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAg
eworICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5
QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgIHJldHVybiBj
cmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOworICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFz
RmxvYXRBcnJheT4gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRlKGZsb2F0KiBhcnJheSwgdW5zaWdu
ZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGEgPSBD
YW52YXNGbG9hdEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsK
KyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFy
cmF5PiBDYW52YXNGbG9hdEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFsaWdubWVudC4KKyAgICAg
ICAgaWYgKChvZmZzZXQgJSBzaXplb2YoZmxvYXQpKSAhPSAwKQorICAgICAgICAgICAgcmV0dXJu
IE5VTEw7CisKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8g
bWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgZ2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICAg
ICAgaWYgKChvZmZzZXQgKyAobGVuZ3RoICogc2l6ZW9mKGZsb2F0KSkpID4gYnVmZmVyLT5ieXRl
TGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNGbG9hdEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBs
ZW5ndGgpKTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzRmxvYXRBcnJheTo6Q2FudmFzRmxvYXRB
cnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIsIG9mZnNldCkKKyAg
ICAgICAgLCBtX3NpemUobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
Q2FudmFzRmxvYXRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9zaXpl
OworICAgIH0KKyAgICAgICAgCisgICAgdW5zaWduZWQgQ2FudmFzRmxvYXRBcnJheTo6c2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZihmbG9hdCk7
CisgICAgfQorfQorCisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHAJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywy
NSArMjcsMjUgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNG
bG9hdEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLSAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc0Zs
b2F0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAgUGFzc1JlZlB0cjxXZWJHTEZs
b2F0QXJyYXk+IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKICAgICB7
Ci0gICAgICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyID0gQ2FudmFzQXJyYXlC
dWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgUmVmUHRyPFdl
YkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdlYkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGgg
KiBzaXplb2YoZmxvYXQpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0
aCk7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNGbG9h
dEFycmF5OjpjcmVhdGUoZmxvYXQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgUGFzc1Jl
ZlB0cjxXZWJHTEZsb2F0QXJyYXk+IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKGZsb2F0KiBhcnJh
eSwgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJy
YXk+IGEgPSBDYW52YXNGbG9hdEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKKyAgICAgICAgUmVmUHRy
PFdlYkdMRmxvYXRBcnJheT4gYSA9IFdlYkdMRmxvYXRBcnJheTo6Y3JlYXRlKGxlbmd0aCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICAgICAg
IGEtPnNldChpLCBhcnJheVtpXSk7CiAgICAgICAgIHJldHVybiBhOwogICAgIH0KIAotICAgIFBh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzRmxvYXRBcnJheTo6Y3JlYXRlKFBhc3NS
ZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKQorICAgIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OmNy
ZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVz
dWx0cyBpbiB2YWxpZCBhbGlnbm1lbnQuCiAgICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKGZs
b2F0KSkgIT0gMCkKQEAgLTUzLDI0ICs1MywyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdl
IGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUg
Z2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICAgICAgLy8gdGhlIGdp
dmVuIFdlYkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgogICAgICAgICAgICAgaWYgKChvZmZzZXQg
KyAobGVuZ3RoICogc2l6ZW9mKGZsb2F0KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDYW52YXNGbG9hdEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTEZsb2F0QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxl
bmd0aCkpOwogICAgIH0KICAgICAKLSAgICBDYW52YXNGbG9hdEFycmF5OjpDYW52YXNGbG9hdEFy
cmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKQotICAgICAgICA6IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zmc2V0KQorICAg
IFdlYkdMRmxvYXRBcnJheTo6V2ViR0xGbG9hdEFycmF5KFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogV2Vi
R0xBcnJheShidWZmZXIsIG9mZnNldCkKICAgICAgICAgLCBtX3NpemUobGVuZ3RoKQogICAgIHsK
ICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgQ2FudmFzRmxvYXRBcnJheTo6bGVuZ3RoKCkgY29u
c3QgeworICAgIHVuc2lnbmVkIFdlYkdMRmxvYXRBcnJheTo6bGVuZ3RoKCkgY29uc3QgewogICAg
ICAgICByZXR1cm4gbV9zaXplOwogICAgIH0KICAgICAgICAgCi0gICAgdW5zaWduZWQgQ2FudmFz
RmxvYXRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgdW5zaWduZWQgV2ViR0xGbG9h
dEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGxlbmd0aCgpICog
c2l6ZW9mKGZsb2F0KTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RmxvYXRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c0Zsb2F0QXJyYXkuaDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzRmxvYXRBcnJheV9oCisjZGVmaW5lIENhbnZhc0Zsb2F0QXJyYXlfaAorCisjaW5jbHVk
ZSAiQ2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIAorICAgIGNsYXNzIENhbnZhc0Zsb2F0QXJyYXkgOiBwdWJsaWMg
Q2FudmFzQXJyYXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzRmxvYXRB
cnJheSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYW52YXNGbG9hdEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gY3JlYXRlKGZsb2F0KiBhcnJheSwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgICAgICBmbG9hdCogZGF0YSgpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0Kj4oYmFzZUFkZHJlc3MoKSk7IH0KKworICAgICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4
LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3Np
emUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzbmFuKHZhbHVl
KSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CisgICAgICAg
ICAgICBmbG9hdCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9iYXNlQWRkcmVzcyk7
CisgICAgICAgICAgICBzdG9yYWdlW2luZGV4XSA9IHN0YXRpY19jYXN0PGZsb2F0Pih2YWx1ZSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCBm
bG9hdCYgcmVzdWx0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0g
bV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGl0ZW0oaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGZsb2F0IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgICAgICBmbG9h
dCogc3RvcmFnZSA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAg
ICAgICBmbG9hdCByZXN1bHQgPSBzdG9yYWdlW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChpc25h
bihyZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIENhbnZhc0Zsb2F0QXJyYXko
UGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgfTsKKyAgICAKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc0Zsb2F0QXJyYXlfaApJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oCShyZXZpc2lvbiA1MDU3NSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDIzICsyMywyMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52YXNGbG9h
dEFycmF5X2gKLSNkZWZpbmUgQ2FudmFzRmxvYXRBcnJheV9oCisjaWZuZGVmIFdlYkdMRmxvYXRB
cnJheV9oCisjZGVmaW5lIFdlYkdMRmxvYXRBcnJheV9oCiAKLSNpbmNsdWRlICJDYW52YXNBcnJh
eS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENhbnZhc0Zsb2F0QXJy
YXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkgeworICAgIGNsYXNzIFdlYkdMRmxvYXRBcnJheSA6IHB1
YmxpYyBXZWJHTEFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0Zs
b2F0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGNyZWF0ZShmbG9hdCogYXJyYXks
IHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0
QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
RmxvYXRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gY3JlYXRlKGZsb2F0KiBhcnJheSwgdW5zaWduZWQgbGVu
Z3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVk
IGxlbmd0aCk7CiAKICAgICAgICAgZmxvYXQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxm
bG9hdCo+KGJhc2VBZGRyZXNzKCkpOyB9CiAKQEAgLTc3LDEwICs3NywxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgcHJp
dmF0ZToKLSAgICAgICAgQ2FudmFzRmxvYXRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVm
ZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIFdlYkdM
RmxvYXRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICAgICAgdW5zaWduZWQgbV9zaXplOwogICAgIH07CiAg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNGbG9hdEFycmF5
X2gKKyNlbmRpZiAvLyBXZWJHTEZsb2F0QXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZsb2F0QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xGbG9hdEFycmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzRmxvYXRBcnJheS5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRmxvYXRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAg
Q29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBIYXNOdW1lcmljSW5kZXhHZXR0ZXIsCisg
ICAgICAgIEhhc0N1c3RvbUluZGV4U2V0dGVyLAorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZl
cnRlciwKKyAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ3VzdG9t
VG9KUworICAgIF0gQ2FudmFzRmxvYXRBcnJheSA6IENhbnZhc0FycmF5IHsKKyAgICB9OworfQpJ
bmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmlkbAkocmV2aXNpb24gNTA1
NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDYgKzMxLDYgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0ZU5h
dGl2ZUNvbnZlcnRlciwKICAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKICAgICAg
ICAgQ3VzdG9tVG9KUwotICAgIF0gQ2FudmFzRmxvYXRBcnJheSA6IENhbnZhc0FycmF5IHsKKyAg
ICBdIFdlYkdMRmxvYXRBcnJheSA6IFdlYkdMQXJyYXkgewogICAgIH07CiB9CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDUwNTc1KQkoZnJv
bSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVyLmNwcDo1MDU3NSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAg
CitQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBDYW52YXNGcmFtZWJ1ZmZlcjo6Y3JlYXRl
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQoreworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ2FudmFzRnJhbWVidWZmZXIoY3R4KSk7Cit9CisKK0NhbnZhc0ZyYW1lYnVmZmVyOjpDYW52
YXNGcmFtZWJ1ZmZlcihDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKKyAgICA6IENhbnZh
c09iamVjdChjdHgpCit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7Cit9CisKK3ZvaWQgQ2FudmFzRnJhbWVidWZmZXI6
Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dCgp
LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVGcmFtZWJ1ZmZlcihvYmplY3QpOworfQorCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNywy
MyBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZhc0ZyYW1lYnVm
ZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVy
PiBDYW52YXNGcmFtZWJ1ZmZlcjo6Y3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4
KQorUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
YW52YXNGcmFtZWJ1ZmZlcihjdHgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRnJh
bWVidWZmZXIoY3R4KSk7CiB9CiAKLUNhbnZhc0ZyYW1lYnVmZmVyOjpDYW52YXNGcmFtZWJ1ZmZl
cihDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKLSAgICA6IENhbnZhc09iamVjdChjdHgp
CitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY3R4KQorICAgIDogV2ViR0xPYmplY3QoY3R4KQogewogICAgIHNldE9iamVjdChjb250ZXh0
KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUZyYW1lYnVmZmVyKCkpOwogfQogCi12b2lk
IENhbnZhc0ZyYW1lYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0
KQordm9pZCBXZWJHTEZyYW1lYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0KQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlRnJh
bWVidWZmZXIob2JqZWN0KTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFt
ZWJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5oCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNG
cmFtZWJ1ZmZlci5oOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzRnJhbWVidWZmZXJfaAorI2RlZmluZSBDYW52YXNGcmFtZWJ1ZmZlcl9oCisKKyNpbmNs
dWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAg
IGNsYXNzIENhbnZhc0ZyYW1lYnVmZmVyIDogcHVibGljIENhbnZhc09iamVjdCB7CisgICAgcHVi
bGljOgorICAgICAgICB2aXJ0dWFsIH5DYW52YXNGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0
KCk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVm
ZmVyPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQ2FudmFzRnJhbWVidWZmZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKik7CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0
Zm9ybTNET2JqZWN0KTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gQ2FudmFzRnJhbWVidWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEZyYW1lYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDI4ICsyMywyOCBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52YXNGcmFtZWJ1ZmZlcl9oCi0jZGVmaW5l
IENhbnZhc0ZyYW1lYnVmZmVyX2gKKyNpZm5kZWYgV2ViR0xGcmFtZWJ1ZmZlcl9oCisjZGVmaW5l
IFdlYkdMRnJhbWVidWZmZXJfaAogCi0jaW5jbHVkZSAiQ2FudmFzT2JqZWN0LmgiCisjaW5jbHVk
ZSAiV2ViR0xPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNs
YXNzIENhbnZhc0ZyYW1lYnVmZmVyIDogcHVibGljIENhbnZhc09iamVjdCB7CisgICAgY2xhc3Mg
V2ViR0xGcmFtZWJ1ZmZlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CiAgICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIH5DYW52YXNGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAg
ICAgICAgdmlydHVhbCB+V2ViR0xGcmFtZWJ1ZmZlcigpIHsgZGVsZXRlT2JqZWN0KCk7IH0KICAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVmZmVyPiBjcmVh
dGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICAg
ICAgCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDYW52YXNGcmFtZWJ1ZmZlcihDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqKTsKKyAgICAgICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0
KFBsYXRmb3JtM0RPYmplY3QpOwogICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAvLyBDYW52YXNGcmFtZWJ1ZmZlcl9oCisjZW5kaWYgLy8gV2ViR0xGcmFtZWJ1
ZmZlcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5pZGwJKHJl
dmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc0ZyYW1lYnVmZmVy
LmlkbDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5pZGwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsK
KyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzRnJhbWVidWZmZXIg
eworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5p
ZGwJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNiBAQAogICovCiAKIG1vZHVsZSBo
dG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzRnJhbWVi
dWZmZXIgeworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBXZWJHTEZyYW1l
YnVmZmVyIHsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFy
cmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXku
Y3BwCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNJbnRB
cnJheS5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzSW50QXJyYXk6
OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBSZWZQdHI8Q2FudmFzQXJy
YXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6
ZW9mKGludCkpOworICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKKyAg
ICB9CisKKyAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNJbnRBcnJheTo6Y3Jl
YXRlKGludCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxD
YW52YXNJbnRBcnJheT4gYSA9IENhbnZhc0ludEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgYS0+
c2V0KGksIGFycmF5W2ldKTsKKyAgICAgICAgcmV0dXJuIGE7CisgICAgfQorCisgICAgUGFzc1Jl
ZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPENh
bnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2YWxpZCBhbGlnbm1l
bnQuCisgICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKGludCkpICE9IDApCisgICAgICAgICAg
ICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAgICAvLyBD
aGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSB2YWxpZCByZWdpb24gb2YK
KyAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCisg
ICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2YoaW50KSkpID4gYnVmZmVy
LT5ieXRlTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzSW50QXJyYXkoYnVm
ZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNJbnRBcnJheTo6
Q2FudmFzSW50QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQg
b2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBv
ZmZzZXQpCisgICAgICAgICwgbV9zaXplKGxlbmd0aCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHVuc2lnbmVkIENhbnZhc0ludEFycmF5OjpsZW5ndGgoKSBjb25zdCB7CisgICAgICAgIHJldHVy
biBtX3NpemU7CisgICAgfQorICAgICAgICAKKyAgICB1bnNpZ25lZCBDYW52YXNJbnRBcnJheTo6
c2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZihp
bnQpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjYg
KzI3LDI2IEBACiAKICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiQ2FudmFzQXJy
YXlCdWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNJbnRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdM
QXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEludEFycmF5LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKLSAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNJbnRB
cnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJy
YXk+IFdlYkdMSW50QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAg
ICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpj
cmVhdGUobGVuZ3RoICogc2l6ZW9mKGludCkpOworICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1
ZmZlcj4gYnVmZmVyID0gV2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZihp
bnQpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CiAgICAgfQog
Ci0gICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZShp
bnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5
PiBXZWJHTEludEFycmF5OjpjcmVhdGUoaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQogICAg
IHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhID0gQ2FudmFzSW50QXJyYXk6OmNy
ZWF0ZShsZW5ndGgpOworICAgICAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYSA9IFdlYkdMSW50
QXJyYXk6OmNyZWF0ZShsZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCiAgICAgICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOwogICAgICAgICBy
ZXR1cm4gYTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNJ
bnRBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAg
ICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdMSW50QXJyYXk6OmNyZWF0ZShQYXNzUmVm
UHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCiAg
ICAgewpAQCAtNTYsMjUgKzU2LDI1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBp
ZiAoYnVmZmVyKSB7CiAgICAgICAgICAgICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRh
bGtpbmcgYWJvdXQgYSB2YWxpZCByZWdpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBD
YW52YXNBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCisgICAgICAgICAgICAvLyB0aGUgZ2l2ZW4gV2Vi
R0xBcnJheUJ1ZmZlcidzIHN0b3JhZ2UuCiAgICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5n
dGggKiBzaXplb2YoaW50KSkpID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzSW50QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMSW50QXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCkpOwogICAgIH0KICAgICAKLSAgICBDYW52YXNJbnRBcnJheTo6Q2FudmFzSW50QXJyYXkoUGFz
c1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpCi0gICAgICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCisgICAgV2ViR0xJ
bnRBcnJheTo6V2ViR0xJbnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IFdlYkdMQXJyYXkoYnVm
ZmVyLCBvZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxlbmd0aCkKICAgICB7CiAgICAgfQogICAg
IAotICAgIHVuc2lnbmVkIENhbnZhc0ludEFycmF5OjpsZW5ndGgoKSBjb25zdCB7CisgICAgdW5z
aWduZWQgV2ViR0xJbnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgewogICAgICAgICByZXR1cm4gbV9z
aXplOwogICAgIH0KICAgICAgICAgCi0gICAgdW5zaWduZWQgQ2FudmFzSW50QXJyYXk6OnNpemVJ
bkJ5dGVzKCkgY29uc3QgeworICAgIHVuc2lnbmVkIFdlYkdMSW50QXJyYXk6OnNpemVJbkJ5dGVz
KCkgY29uc3QgewogICAgICAgICByZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YoaW50KTsKICAgICB9
CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaAkocmV2aXNpb24gNTA1NzUp
CShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzSW50QXJyYXkuaDo1MDU3NSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc0ludEFycmF5X2gKKyNkZWZpbmUgQ2Fu
dmFzSW50QXJyYXlfaAorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlIDxsaW1p
dHM+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKKyAgICBjbGFzcyBDYW52YXNJbnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7Cisg
ICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRBcnJheSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4g
Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZh
c0ludEFycmF5PiBjcmVhdGUoaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZh
c0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAg
ICAgICAgaW50KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Kj4oYmFzZUFkZHJlc3Mo
KSk7IH0KKworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBz
ZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAorICAgICAgICAgICAgICAgIHZh
bHVlID0gMDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWluKCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpKQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgIGludCogc3RvcmFnZSA9IHN0YXRpY19jYXN0
PGludCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAgICAgc3RvcmFnZVtpbmRleF0gPSBzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBn
ZXQodW5zaWduZWQgaW5kZXgsIGludCYgcmVzdWx0KSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW0oaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGludCBpdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOwor
ICAgICAgICAgICAgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8aW50Kj4obV9iYXNlQWRkcmVz
cyk7CisgICAgICAgICAgICByZXR1cm4gc3RvcmFnZVtpbmRleF07CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIENhbnZhc0ludEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlC
dWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgdW5zaWduZWQgbV9z
aXplOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBD
YW52YXNJbnRBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaAkocmV2
aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIENhbnZhc0ludEFycmF5X2gKLSNkZWZpbmUgQ2FudmFzSW50QXJyYXlfaAorI2lmbmRl
ZiBXZWJHTEludEFycmF5X2gKKyNkZWZpbmUgV2ViR0xJbnRBcnJheV9oCiAKLSNpbmNsdWRlICJD
YW52YXNBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKICNpbmNsdWRlIDxsaW1pdHM+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgpAQCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKLSAgICBj
bGFzcyBDYW52YXNJbnRBcnJheSA6IHB1YmxpYyBDYW52YXNBcnJheSB7CisgICAgY2xhc3MgV2Vi
R0xJbnRBcnJheSA6IHB1YmxpYyBXZWJHTEFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0ludEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3Ro
KTsKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGNyZWF0ZShpbnQq
IGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52
YXNJbnRBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwg
aW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
V2ViR0xJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGNyZWF0ZShpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBjcmVhdGUoUGFz
c1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKICAgICAgICAgaW50KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Kj4o
YmFzZUFkZHJlc3MoKSk7IH0KIApAQCAtNzcsNyArNzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIENhbnZhc0ludEFycmF5KFBhc3NS
ZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwKKyAgICAgICAgV2ViR0xJbnRBcnJheShQ
YXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICAgICAgdW5zaWduZWQgbV9zaXplOwpAQCAtODUsNCArODUsNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNJ
bnRBcnJheV9oCisjZW5kaWYgLy8gV2ViR0xJbnRBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xJbnRBcnJheS5pZGwJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc0ludEFycmF5LmlkbDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD0z
RF9DQU5WQVMsCisgICAgICAgIEhhc051bWVyaWNJbmRleEdldHRlciwKKyAgICAgICAgSGFzQ3Vz
dG9tSW5kZXhTZXR0ZXIsCisgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAorICAgICAg
ICBHZW5lcmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAorICAgICAgICBDdXN0b21Ub0pTCisgICAgXSBD
YW52YXNJbnRBcnJheSA6IENhbnZhc0FycmF5IHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMSW50QXJyYXkuaWRsCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDYg
QEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKICAgICAg
ICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAgQ3VzdG9tVG9KUwotICAgIF0g
Q2FudmFzSW50QXJyYXkgOiBDYW52YXNBcnJheSB7CisgICAgXSBXZWJHTEludEFycmF5IDogV2Vi
R0xBcnJheSB7CiAgICAgfTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3QuY3Bw
CShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNPYmplY3Qu
Y3BwOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAorQ2FudmFzT2JqZWN0OjpDYW52YXNPYmplY3QoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0KQorICAgIDogbV9vYmplY3QoMCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0
KQoreworfQorCitDYW52YXNPYmplY3Q6On5DYW52YXNPYmplY3QoKQoreworICAgIGlmIChtX2Nv
bnRleHQpCisgICAgICAgIG1fY29udGV4dC0+cmVtb3ZlT2JqZWN0KHRoaXMpOworfQorCit2b2lk
IENhbnZhc09iamVjdDo6c2V0T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAg
IGlmIChvYmplY3QgPT0gbV9vYmplY3QpCisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ZGVsZXRlT2JqZWN0KCk7CisgICAgbV9vYmplY3QgPSBvYmplY3Q7Cit9CisKK3ZvaWQgQ2FudmFz
T2JqZWN0OjpkZWxldGVPYmplY3QoKQoreworICAgIGlmIChtX29iamVjdCkgeworICAgICAgICBp
ZiAobV9jb250ZXh0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgICAgICAgICAgX2RlbGV0ZU9iamVjdChtX29i
amVjdCk7CisgICAgICAgIH0KKyAgICAgICAgbV9vYmplY3QgPSAwOworICAgIH0KK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xP
YmplY3QuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyNCArMjcsMjQgQEAKIAogI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKLSNpbmNsdWRlICJDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgorI2luY2x1
ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Ci1DYW52YXNPYmplY3Q6OkNhbnZhc09iamVjdChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNv
bnRleHQpCitXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogICAgIDogbV9vYmplY3QoMCkKICAgICAsIG1fY29udGV4dChjb250ZXh0KQogewog
fQogCi1DYW52YXNPYmplY3Q6On5DYW52YXNPYmplY3QoKQorV2ViR0xPYmplY3Q6On5XZWJHTE9i
amVjdCgpCiB7CiAgICAgaWYgKG1fY29udGV4dCkKICAgICAgICAgbV9jb250ZXh0LT5yZW1vdmVP
YmplY3QodGhpcyk7CiB9CiAKLXZvaWQgQ2FudmFzT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0z
RE9iamVjdCBvYmplY3QpCit2b2lkIFdlYkdMT2JqZWN0OjpzZXRPYmplY3QoUGxhdGZvcm0zRE9i
amVjdCBvYmplY3QpCiB7CiAgICAgaWYgKG9iamVjdCA9PSBtX29iamVjdCkKICAgICAgICAgcmV0
dXJuOwpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIENhbnZhc09iamVjdDo6c2V0T2JqZWN0KFBsYXRm
b3JtM0RPCiAgICAgbV9vYmplY3QgPSBvYmplY3Q7CiB9CiAKLXZvaWQgQ2FudmFzT2JqZWN0Ojpk
ZWxldGVPYmplY3QoKQordm9pZCBXZWJHTE9iamVjdDo6ZGVsZXRlT2JqZWN0KCkKIHsKICAgICBp
ZiAobV9vYmplY3QpIHsKICAgICAgICAgaWYgKG1fY29udGV4dCkgewpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuaAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzT2JqZWN0Lmg6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
Q2FudmFzT2JqZWN0X2gKKyNkZWZpbmUgQ2FudmFzT2JqZWN0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNzIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDsKKyAgICAKKyAgICBjbGFzcyBDYW52YXNPYmplY3QgOiBw
dWJsaWMgUmVmQ291bnRlZDxDYW52YXNPYmplY3Q+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZp
cnR1YWwgfkNhbnZhc09iamVjdCgpOworICAgICAgICAKKyAgICAgICAgUGxhdGZvcm0zRE9iamVj
dCBvYmplY3QoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgICAgICB2b2lkIHNldE9i
amVjdChQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICAgICAgdm9pZCBkZWxldGVPYmplY3QoKTsKKyAg
ICAgICAgCisgICAgICAgIHZvaWQgZGV0YWNoQ29udGV4dCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlbGV0ZU9iamVjdCgpOworICAgICAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICAgICAg
fQorCisgICAgICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dDsgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYW52YXNPYmpl
Y3QoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVs
ZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpID0gMDsKKyAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fb2JqZWN0OworICAgICAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0QqIG1fY29udGV4dDsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ2FudmFzT2JqZWN0X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2Jq
ZWN0LmgJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIENhbnZhc09iamVjdF9oCi0jZGVmaW5lIENhbnZhc09iamVjdF9oCisjaWZu
ZGVmIFdlYkdMT2JqZWN0X2gKKyNkZWZpbmUgV2ViR0xPYmplY3RfaAogCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzMsMTEgKzMz
LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDsKKyAgICBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAgICAgCi0gICAg
Y2xhc3MgQ2FudmFzT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8Q2FudmFzT2JqZWN0PiB7Cisg
ICAgY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJHTE9iamVjdD4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Q2FudmFzT2JqZWN0KCk7CisgICAgICAgIHZp
cnR1YWwgfldlYkdMT2JqZWN0KCk7CiAgICAgICAgIAogICAgICAgICBQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CiAgICAgICAgIHZvaWQgc2V0T2Jq
ZWN0KFBsYXRmb3JtM0RPYmplY3QpOwpAQCAtNDksMTcgKzQ5LDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIG1fY29udGV4dCA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHQ7IH0KKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0OyB9CiAKICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENhbnZhc09iamVj
dChDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKKyAgICAgICAgV2ViR0xPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBs
YXRmb3JtM0RPYmplY3QpID0gMDsKICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fb2JqZWN0OwotICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIG1f
Y29udGV4dDsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CiAgICAg
fTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENhbnZhc09iamVj
dF9oCisjZW5kaWYgLy8gV2ViR0xPYmplY3RfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQ
cm9ncmFtLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUHJvZ3JhbS5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gQ2FudmFzUHJv
Z3JhbTo6Y3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQoreworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ2FudmFzUHJvZ3JhbShjdHgpKTsKK30KKworQ2FudmFzUHJvZ3JhbTo6
Q2FudmFzUHJvZ3JhbShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKKyAgICA6IENhbnZh
c09iamVjdChjdHgpCit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+Y3JlYXRlUHJvZ3JhbSgpKTsKK30KKwordm9pZCBDYW52YXNQcm9ncmFtOjpfZGVsZXRl
T2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmplY3QpOworfQorCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNw
cAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDIzICsyNywyMyBAQAogCiAjaWYgRU5BQkxFKDNEX0NB
TlZBUykKIAotI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKLSNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFz
c1JlZlB0cjxDYW52YXNQcm9ncmFtPiBDYW52YXNQcm9ncmFtOjpjcmVhdGUoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xQcm9ncmFt
OjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDYW52YXNQcm9ncmFtKGN0eCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
R0xQcm9ncmFtKGN0eCkpOwogfQogCi1DYW52YXNQcm9ncmFtOjpDYW52YXNQcm9ncmFtKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQotICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKK1dlYkdM
UHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorICAgIDog
V2ViR0xPYmplY3QoY3R4KQogewogICAgIHNldE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29u
dGV4dDNEKCktPmNyZWF0ZVByb2dyYW0oKSk7CiB9CiAKLXZvaWQgQ2FudmFzUHJvZ3JhbTo6X2Rl
bGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQgV2ViR0xQcm9ncmFtOjpf
ZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQoKS0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlUHJvZ3JhbShvYmplY3QpOwogfQpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNQcm9ncmFtLmg6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIENhbnZhc1Byb2dyYW1faAorI2RlZmluZSBDYW52YXNQcm9ncmFtX2gKKworI2lu
Y2x1ZGUgIkNhbnZhc09iamVjdC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisg
ICAgY2xhc3MgQ2FudmFzUHJvZ3JhbSA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzUHJvZ3JhbSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0K
KyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Byb2dyYW0+IGNyZWF0
ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBDYW52YXNQcm9ncmFtKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCopOworICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7
CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZh
c1Byb2dyYW1faApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiA1
MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDI4ICsyMywyOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBD
YW52YXNQcm9ncmFtX2gKLSNkZWZpbmUgQ2FudmFzUHJvZ3JhbV9oCisjaWZuZGVmIFdlYkdMUHJv
Z3JhbV9oCisjZGVmaW5lIFdlYkdMUHJvZ3JhbV9oCiAKLSNpbmNsdWRlICJDYW52YXNPYmplY3Qu
aCIKKyNpbmNsdWRlICJXZWJHTE9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgCi0gICAgY2xhc3MgQ2FudmFzUHJvZ3JhbSA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAg
IGNsYXNzIFdlYkdMUHJvZ3JhbSA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CiAgICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIH5DYW52YXNQcm9ncmFtKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAg
ICAgICB2aXJ0dWFsIH5XZWJHTFByb2dyYW0oKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAgICAgICAg
IAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBjcmVhdGUoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJv
Z3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogICAgICAgICAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIENhbnZhc1Byb2dyYW0oQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7
CisgICAgICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKICAgICAgICAg
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwog
ICAgIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNQ
cm9ncmFtX2gKKyNlbmRpZiAvLyBXZWJHTFByb2dyYW1faApJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFByb2dyYW0uaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xQcm9ncmFtLmlkbAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUHJvZ3JhbS5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UHJvZ3JhbS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21v
ZHVsZSBodG1sIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFz
UHJvZ3JhbSB7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5p
ZGwJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw2IEBACiAgKi8KIAogbW9kdWxlIGh0bWwg
ewotICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNQcm9ncmFtIHsK
KyAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xQcm9ncmFtIHsKICAg
ICB9OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJ
KHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmJ1
ZmZlci5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4g
Q2FudmFzUmVuZGVyYnVmZmVyOjpjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiBjdHgp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNSZW5kZXJidWZmZXIoY3R4KSk7Cit9
CisKK0NhbnZhc1JlbmRlcmJ1ZmZlcjo6Q2FudmFzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRCogY3R4KQorICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKK3sKKyAgICBzZXRPYmpl
Y3QoY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVSZW5kZXJidWZmZXIoKSk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyYnVmZmVyOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RP
YmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVs
ZXRlUmVuZGVyYnVmZmVyKG9iamVjdCk7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9D
QU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAko
cmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjMgKzI3LDIzIEBACiAKICNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQogCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIAotUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IENhbnZhc1JlbmRlcmJ1ZmZl
cjo6Y3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQorUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGN0eCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1JlbmRlcmJ1ZmZl
cihjdHgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMUmVuZGVyYnVmZmVyKGN0eCkp
OwogfQogCi1DYW52YXNSZW5kZXJidWZmZXI6OkNhbnZhc1JlbmRlcmJ1ZmZlcihDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QqIGN0eCkKLSAgICA6IENhbnZhc09iamVjdChjdHgpCitXZWJHTFJlbmRl
cmJ1ZmZlcjo6V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCisg
ICAgOiBXZWJHTE9iamVjdChjdHgpCiB7CiAgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+Y3JlYXRlUmVuZGVyYnVmZmVyKCkpOwogfQogCi12b2lkIENhbnZhc1Jl
bmRlcmJ1ZmZlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVjdCkKK3ZvaWQg
V2ViR0xSZW5kZXJidWZmZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3Qp
CiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVSZW5kZXJidWZm
ZXIob2JqZWN0KTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmgJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmJ1ZmZlci5oOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENh
bnZhc1JlbmRlcmJ1ZmZlcl9oCisjZGVmaW5lIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCisKKyNpbmNs
dWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAg
IGNsYXNzIENhbnZhc1JlbmRlcmJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyYnVmZmVyKCkgeyBkZWxldGVPYmpl
Y3QoKTsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzUmVuZGVy
YnVmZmVyPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIAorICAg
IHByb3RlY3RlZDoKKyAgICAgICAgQ2FudmFzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRCopOworICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIF9kZWxldGVPYmplY3Qo
UGxhdGZvcm0zRE9iamVjdCk7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmJ1ZmZlci5oCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjggKzIzLDI4
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIENhbnZhc1JlbmRlcmJ1ZmZlcl9o
Ci0jZGVmaW5lIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCisjaWZuZGVmIFdlYkdMUmVuZGVyYnVmZmVy
X2gKKyNkZWZpbmUgV2ViR0xSZW5kZXJidWZmZXJfaAogCi0jaW5jbHVkZSAiQ2FudmFzT2JqZWN0
LmgiCisjaW5jbHVkZSAiV2ViR0xPYmplY3QuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIAotICAgIGNsYXNzIENhbnZhc1JlbmRlcmJ1ZmZlciA6IHB1YmxpYyBDYW52YXNPYmplY3Qg
eworICAgIGNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyIDogcHVibGljIFdlYkdMT2JqZWN0IHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkNhbnZhc1JlbmRlcmJ1ZmZlcigpIHsgZGVsZXRl
T2JqZWN0KCk7IH0KKyAgICAgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJidWZmZXIoKSB7IGRlbGV0
ZU9iamVjdCgpOyB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNS
ZW5kZXJidWZmZXI+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqKTsKKyAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKICAgICAgICAgCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBDYW52YXNSZW5k
ZXJidWZmZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7CisgICAgICAgIFdlYkdMUmVuZGVy
YnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwogICAgICAgICAKICAgICAgICAgdmlydHVh
bCB2b2lkIF9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCk7CiAgICAgfTsKICAgICAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENhbnZhc1JlbmRlcmJ1ZmZlcl9oCisj
ZW5kaWYgLy8gV2ViR0xSZW5kZXJidWZmZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmJ1ZmZlci5pZGw6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbQ29uZGl0aW9uYWw9M0Rf
Q0FOVkFTXSBDYW52YXNSZW5kZXJidWZmZXIgeworICAgIH07Cit9CkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNiArMjQsNiBAQAogICovCiAKIG1vZHVsZSBodG1sIHsKLSAgICBpbnRlcmZhY2UgW0NvbmRp
dGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzUmVuZGVyYnVmZmVyIHsKKyAgICBpbnRlcmZhY2UgW0Nv
bmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xSZW5kZXJidWZmZXIgewogICAgIH07CiB9CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZp
c2lvbiA1MDYzNCkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuY3BwOjUwNjM0KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKworI2luY2x1ZGUgIkNhbnZhc0FjdGl2ZUluZm8u
aCIKKyNpbmNsdWRlICJDYW52YXNCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZl
ci5oIgorI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0uaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNUZXh0dXJlLmgiCisjaW5jbHVkZSAiQ2FudmFzU2hh
ZGVyLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJC
b3guaCIKKyNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NPd25QdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQoreworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCkpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIHJldHVy
biBuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKGNhbnZhcywgY29udGV4dC5yZWxlYXNlKCkp
OworfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52
YXMpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fbmVlZHNVcGRhdGUodHJ1ZSkK
KyAgICAsIG1fbWFya2VkQ2FudmFzRGlydHkoZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4
dCk7CisgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpOworfQorCitDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6On5DYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QoKQoreworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7Cisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChjYW52YXMoKS0+cmVuZGVy
Qm94KCkgJiYgY2FudmFzKCktPnJlbmRlckJveCgpLT5oYXNMYXllcigpKSB7CisgICAgICAgIGNh
bnZhcygpLT5yZW5kZXJCb3goKS0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwor
ICAgIH0gZWxzZSB7CisjZW5kaWYKKyAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdlIGJ1ZmZlciBpcyBh
bGxvY2F0ZWQuCisgICAgICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7CisgICAgICAgICAgICBj
YW52YXMoKS0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52
YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVl
OworICAgICAgICB9CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIH0KKyNl
bmRpZgorfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmVnaW5QYWludCgpCit7
CisgICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iZWdp
blBhaW50KHRoaXMpOworICAgIH0KK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmVuZFBhaW50KCkKK3sKKyAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fY29udGV4dC0+ZW5kUGFpbnQo
KTsKKyAgICB9Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZXNoYXBlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAobV9uZWVkc1VwZGF0ZSkgeworI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICAgICAgaWYgKGNhbnZhcygpLT5yZW5kZXJC
b3goKSAmJiBjYW52YXMoKS0+cmVuZGVyQm94KCktPmhhc0xheWVyKCkpCisgICAgICAgICAgICBj
YW52YXMoKS0+cmVuZGVyQm94KCktPmxheWVyKCktPnJlbmRlcmVyQ29udGVudENoYW5nZWQoKTsK
KyNlbmRpZgorICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IG1fY29udGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKK30KKworaW50IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6c2l6ZUluQnl0ZXMoaW50IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGludCByZXN1bHQgPSBtX2NvbnRleHQtPnNpemVJbkJ5dGVzKHR5cGUpOworICAgIGlm
IChyZXN1bHQgPD0gMCkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjphY3RpdmVU
ZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSkKK3sKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUodGV4dHVyZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihDYW52YXNQcm9n
cmFtKiBwcm9ncmFtLCBDYW52YXNTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFzaGFk
ZXIgfHwgc2hhZGVyLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlT
TUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2Nh
dGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBw
cm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZEJ1ZmZl
cih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhpcykg
eworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CisgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNGcmFt
ZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoYnVmZmVyICYm
IGJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcih0YXJnZXQsIGJ1ZmZlcik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAocmVuZGVyQnVmZmVyICYmIHJlbmRlckJ1ZmZl
ci0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIo
dGFyZ2V0LCByZW5kZXJCdWZmZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7Cit9CisKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRUZXh0dXJlKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250ZXh0KCkgIT0gdGhpcykg
eworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVl
LCBkb3VibGUgYWxwaGEpCit7CisgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbiggdW5zaWduZWQg
bG9uZyBtb2RlICkKK3sKKyAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZSh1bnNpZ25lZCBsb25nIG1vZGVSR0Is
IHVuc2lnbmVkIGxvbmcgbW9kZUFscGhhKQoreworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlv
blNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRG
dW5jKHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKQoreworICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9ICAgICAgIAorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6YmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVk
IGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFs
cGhhKQoreworICAgIG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0Is
IHNyY0FscGhhLCBkc3RBbHBoYSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKQoreworICAgIG1f
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIHVzYWdlKTsKKyAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQXJyYXkqIGRhdGEsIHVu
c2lnbmVkIGxvbmcgdXNhZ2UpCit7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwg
ZGF0YSwgdXNhZ2UpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQ2FudmFzQXJyYXkqIGRhdGEpCit7CisgICAgbV9jb250
ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhKTsKKyAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit1bnNpZ25lZCBsb25nIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25nIHRhcmdldCkK
K3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyKHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2Nv
bnRleHQtPmNsZWFyKG1hc2spOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIs
IGRvdWJsZSBnLCBkb3VibGUgYiwgZG91YmxlIGEpCit7CisgICAgaWYgKGlzbmFuKHIpKQorICAg
ICAgICByID0gMDsKKyAgICBpZiAoaXNuYW4oZykpCisgICAgICAgIGcgPSAwOworICAgIGlmIChp
c25hbihiKSkKKyAgICAgICAgYiA9IDA7CisgICAgaWYgKGlzbmFuKGEpKQorICAgICAgICBhID0g
MTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywgYiwgYSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmNsZWFyRGVwdGgoZG91YmxlIGRlcHRoKQoreworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0
aChkZXB0aCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNsZWFyU3RlbmNpbChsb25nIHMpCit7CisgICAg
bV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNvbG9yTWFzayhi
b29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQoreworICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Y29tcGlsZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgaWYgKCFzaGFkZXIgfHwgc2hhZGVyLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAg
ICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb3B5
VGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVu
c2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlcikKK3sKKyAgICBtX2NvbnRleHQtPmNvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIGxv
bmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkK
K3sKKyAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgUmVmUHRyPENhbnZhc0J1ZmZl
cj4gbyA9IENhbnZhc0J1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgp
KTsKKyAgICByZXR1cm4gbzsKK30KKyAgICAgICAgCitQYXNzUmVmUHRyPENhbnZhc0ZyYW1lYnVm
ZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAg
ICBSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IG8gPSBDYW52YXNGcmFtZWJ1ZmZlcjo6Y3JlYXRl
KHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNUZXh0dXJlPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIFJlZlB0cjxDYW52YXNUZXh0dXJlPiBvID0gQ2FudmFzVGV4dHVyZTo6
Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30K
KworUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmNy
ZWF0ZVByb2dyYW0oKQoreworICAgIFJlZlB0cjxDYW52YXNQcm9ncmFtPiBvID0gQ2FudmFzUHJv
Z3JhbTo6Y3JlYXRlKHRoaXMpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4g
bzsKK30KKworUGFzc1JlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBSZWZQdHI8Q2FudmFzUmVuZGVy
YnVmZmVyPiBvID0gQ2FudmFzUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkT2Jq
ZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPENhbnZhc1NoYWRl
cj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVTaGFkZXIodW5zaWduZWQgbG9uZyB0
eXBlKQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGluY2x1ZGUgR0xfIGNvbnN0YW50cyBmb3Ig
aW50ZXJuYWwgdXNlCisgICAgLy8gRklYTUU6IE5lZWQgdG8gZG8gcGFyYW0gY2hlY2tpbmcgYW5k
IHRocm93IGV4Y2VwdGlvbiBpZiBhbiBpbGxlZ2FsIHZhbHVlIGlzIHBhc3NlZCBpbgorICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6VkVSVEVYX1NIQURFUjsKKyAgICBpZiAodHlwZSA9PSAweDhCMzApIC8vIEdMX0ZSQUdNRU5U
X1NIQURFUgorICAgICAgICBzaGFkZXJUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUjsKKyAgICAgICAgCisgICAgUmVmUHRyPENhbnZhc1NoYWRlcj4gbyA9IENhbnZhc1No
YWRlcjo6Y3JlYXRlKHRoaXMsIHNoYWRlclR5cGUpOworICAgIGFkZE9iamVjdChvLmdldCgpKTsK
KyAgICByZXR1cm4gbzsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmN1bGxG
YWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUp
OworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCit7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBidWZmZXItPmRl
bGV0ZU9iamVjdCgpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRl
RnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIGlmICgh
ZnJhbWVidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmcmFtZWJ1ZmZlci0+ZGVs
ZXRlT2JqZWN0KCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVQ
cm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9ncmFtKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgcHJvZ3JhbS0+ZGVsZXRlT2JqZWN0KCk7Cit9CisKK3Zv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoQ2FudmFzUmVu
ZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICByZW5kZXJidWZmZXItPmRlbGV0ZU9iamVjdCgpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVyKENhbnZhc1NoYWRl
ciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgc2hhZGVyLT5kZWxldGVPYmplY3QoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAo
IXRleHR1cmUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXh0dXJlLT5kZWxldGVPYmpl
Y3QoKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlcHRoRnVuYyh1bnNp
Z25lZCBsb25nIGZ1bmMpCit7CisgICAgbV9jb250ZXh0LT5kZXB0aEZ1bmMoZnVuYyk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmRlcHRoTWFzayhib29sIGZsYWcpCit7CisgICAgbV9jb250ZXh0LT5kZXB0
aE1hc2soZmxhZyk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoZG91YmxlIHpOZWFyLCBk
b3VibGUgekZhcikKK3sKKyAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2Fu
dmFzU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghcHJvZ3Jh
bSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhc2hhZGVyIHx8IHNoYWRlci0+Y29u
dGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihwcm9ncmFtLCBz
aGFkZXIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKKwordm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApCit7
CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KQoreworICAgIG1fY29udGV4dC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworfQorCisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkcmF3
QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCkKK3sKKyAg
ICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpkcmF3RWxlbWVudHModW5zaWduZWQgbG9uZyBtb2RlLCB1bnNpZ25lZCBsb25nIGNvdW50
LCB1bnNpZ25lZCBsb25nIHR5cGUsIGxvbmcgb2Zmc2V0KQoreworICAgIG1fY29udGV4dC0+ZHJh
d0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQpOworICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbCh0cnVlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmVu
YWJsZSh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGlu
ZGV4KQoreworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpmaW5pc2goKQoreworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOworfQorCisKK3ZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpmbHVzaCgpCit7CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFy
Z2V0LCBDYW52YXNSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgICAgIGVj
ID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9ICAgICAgIAorICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2htZW50LCBy
ZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZyYW1lYnVmZmVy
VGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQs
IHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxl
dmVsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5j
b250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKyAgICBtX2NvbnRleHQt
PmZyb250RmFjZShtb2RlKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
fQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXAodW5zaWdu
ZWQgbG9uZyB0YXJnZXQpCit7CisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQp
OworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK1Bhc3NSZWZQdHI8
Q2FudmFzQWN0aXZlSW5mbz4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRy
aWIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghcHJvZ3JhbSB8fCBw
cm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcyB8fCAhbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIo
cHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gQ2FudmFzQWN0aXZlSW5mbzo6Y3Jl
YXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitQYXNzUmVmUHRyPENh
bnZhc0FjdGl2ZUluZm8+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9y
bShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBBY3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFwcm9ncmFtIHx8IHBy
b2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0o
cHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gQ2FudmFzQWN0aXZlSW5mbzo6Y3Jl
YXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitpbnQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRCb29sZWFuKHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgYm9vbCByZXN1bHQg
PSBtX2NvbnRleHQtPmdldEJvb2xlYW4ocG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCb29sZWFudih1
bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworaW50IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRCdWZmZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxD
YW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0
ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0
ZXJpdih0YXJnZXQsIHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OworICAgIHJldHVybiBhcnJheTsKK30KKwordW5zaWduZWQgbG9uZyBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEVycm9yKCkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigp
OworfQorCitmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldEZsb2F0KHVuc2lnbmVk
IGxvbmcgcG5hbWUpCit7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRGbG9hdChw
bmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgUmVmUHRy
PENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5Owor
fQorCitpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1l
bnRQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1l
bnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBu
YW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
K3sKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsK
KyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsK
K30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0SW50ZWdlcih1bnNpZ25lZCBs
b25nIHBuYW1lKQoreworICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcihw
bmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7CisgICAgUmVmUHRy
PENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5Owor
fQorCitpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtaShDYW52YXNQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAg
ICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWkocHJvZ3JhbSwgcG5hbWUpOwor
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpnZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNv
bnRleHQoKSAhPSB0aGlzKSB7CisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0g
bV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitTdHJpbmcgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3Jh
bS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
KyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC0+Z2V0
UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICByZXR1cm4gczsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBwbmFtZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRSZW5kZXJidWZm
ZXJQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRB
cnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQ
dHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0U2hhZGVyaShDYW52YXNTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzaGFkZXIgfHwgc2hhZGVyLT5jb250ZXh0
KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0U2hhZGVyaShz
aGFkZXIsIHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghc2hhZGVyIHx8
IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENI
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIFJlZlB0cjxDYW52YXNJbnRBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUpOworICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIGFycmF5OworfQorCitT
dHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1No
YWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXNoYWRlciB8fCBz
aGFkZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CisgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9F
UlI7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisgICAgU3RyaW5nIHMgPSBtX2NvbnRleHQt
PmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOworICAgIHJldHVybiBzOworfQorCitTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsK
KyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuICIiOworICAg
IH0KKyAgICBTdHJpbmcgcyA9IG1fY29udGV4dC0+Z2V0U2hhZGVyU291cmNlKHNoYWRlcik7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gczsKK30KKwor
U3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcg
bmFtZSkKK3sKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRTdHJpbmcobmFtZSk7Cit9CisKK2Zs
b2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyZih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBmbG9hdCByZXN1bHQgPSBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitQYXNzUmVm
UHRyPENhbnZhc0Zsb2F0QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCit7Cisg
ICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJh
bWV0ZXJmdih0YXJnZXQsIHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0VGV4UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBw
bmFtZSkKK3sKKyAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5
ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworZmxv
YXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3JtZihDYW52YXNQcm9ncmFtKiBw
cm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXBy
b2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGZsb2F0IHJlc3Vs
dCA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWYocHJvZ3JhbSwgbG9jYXRpb24pOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFz
c1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVu
aWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRo
aXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+
Z2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworbG9uZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFVuaWZvcm1pKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9j
YXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFt
LT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgbG9uZyByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1pKHByb2dyYW0sIGxvY2F0aW9uKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzSW50
QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KENhbnZhc1Byb2dy
YW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9
IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgUmVmUHRy
PENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KHByb2dyYW0s
IGxvY2F0aW9uKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJl
dHVybiBhcnJheTsKK30KKworbG9uZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZv
cm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0
KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIG5hbWUpOworfQorCitmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6Omdl
dFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
K3sKKyAgICBmbG9hdCByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYmYoaW5kZXgs
IHBuYW1lKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1Bhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBhcnJheSA9
IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliZnYoaW5kZXgsIHBuYW1lKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIHJldHVybiBhcnJheTsKK30KKworbG9uZyBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmkodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sKKyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4
dC0+Z2V0VmVydGV4QXR0cmliaShpbmRleCwgcG5hbWUpOworICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUGFzc1JlZlB0cjxDYW52
YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdih1
bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQoreworICAgIFJlZlB0cjxD
YW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYml2KGluZGV4
LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1
cm4gYXJyYXk7Cit9CisKK2xvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK3sK
KyAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4
LCBwbmFtZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aGludCh1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIG1fY29udGV4dC0+
aGludCh0YXJnZXQsIG1vZGUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0J1ZmZlcihDYW52YXNCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyKTsKK30KKworYm9vbCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCkKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKK30KKworYm9vbCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqIGZyYW1lYnVm
ZmVyKQoreworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXIp
OworfQorCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNQcm9ncmFtKENhbnZhc1By
b2dyYW0qIHByb2dyYW0pCit7CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dy
YW0pOworfQorCitib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIo
Q2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7CisgICAgcmV0dXJuIG1fY29udGV4
dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyKTsKK30KKworYm9vbCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmlzU2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQoreworICAgIHJldHVy
biBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlcik7Cit9CisKK2Jvb2wgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjppc1RleHR1cmUoQ2FudmFzVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICByZXR1
cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRoKQoreworICAgIG1fY29udGV4dC0+
bGluZVdpZHRoKChmbG9hdCkgd2lkdGgpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShD
YW52YXNQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXBy
b2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMpIHsKKyAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgbV9j
b250ZXh0LT5saW5rUHJvZ3JhbShwcm9ncmFtKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cGl4ZWxTdG9y
ZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKK3sKKyAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQo
ZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQoreworICAgIG1fY29udGV4dC0+cG9seWdvbk9m
ZnNldCgoZmxvYXQpIGZhY3RvciwgKGZsb2F0KSB1bml0cyk7CisgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKK30KKworUGFzc1JlZlB0cjxDYW52YXNBcnJheT4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2ln
bmVkIGxvbmcgdHlwZSkKK3sKKyAgICBSZWZQdHI8Q2FudmFzQXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQor
eworICAgIG1fY29udGV4dC0+cmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CisgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVp
Z2h0KQoreworICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c2FtcGxlQ292ZXJh
Z2UoZG91YmxlIHZhbHVlLCBib29sIGludmVydCkKK3sKKyAgICBtX2NvbnRleHQtPnNhbXBsZUNv
dmVyYWdlKChmbG9hdCkgdmFsdWUsIGludmVydCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNjaXNzb3Io
bG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0
KQoreworICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6c2hhZGVyU291cmNlKENhbnZhc1NoYWRlciogc2hhZGVyLCBjb25zdCBTdHJp
bmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFzaGFkZXIgfHwgc2hh
ZGVyLT5jb250ZXh0KCkgIT0gdGhpcykgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKHNo
YWRlciwgc3RyaW5nKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbEZ1bmModW5zaWduZWQgbG9u
ZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1fY29udGV4dC0+
c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyBy
ZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3sKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2Vw
YXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6c3RlbmNpbE1h
c2sodW5zaWduZWQgbG9uZyBtYXNrKQoreworICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2sobWFz
ayk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUodW5zaWduZWQgbG9uZyBm
YWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1Nl
cGFyYXRlKGZhY2UsIG1hc2spOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3AodW5zaWduZWQg
bG9uZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQorewor
ICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7CisgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQgbG9u
ZyBmYWlsLCB1bnNpZ25lZCBsb25nIHpmYWlsLCB1bnNpZ25lZCBsb25nIHpwYXNzKQoreworICAg
IG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsK
KyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVk
IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0
ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVy
bmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25l
ZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8g
RklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0
LCB0eXBlLCBwaXhlbHMpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKCFp
bWFnZSkgeworICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZElt
YWdlKCk7CisgICAgaWYgKCFjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
RklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2FjaGVkSW1hZ2UtPmltYWdlKCksIGZsaXBZ
LCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25l
ZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBw
cmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAg
aWYgKCFjYW52YXMpIHsKKyAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZl
cigpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBidWZmZXItPmltYWdlKCksIGZsaXBZLCBwcmVtdWx0aXBs
eUFscGhhKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIHZpZGVvLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFt
ZSwgZmxvYXQgcGFyYW0pCit7CisgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwg
cG5hbWUsIHBhcmFtKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQor
Cit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaSh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBpbnQgcGFyYW0pCit7CisgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3Vi
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0
LCB1bnNpZ25lZCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8g
RklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7
CisgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1h
dCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCisg
ICAgZWMgPSAwOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55
IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBpZiAoIWltYWdlKSB7CisgICAgICAg
IGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7CisgICAg
aWYgKCFjYWNoZWRJbWFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT50ZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQs
IGNhY2hlZEltYWdlLT5pbWFnZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwg
dW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs
IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoIWNhbnZhcykgeworICAgICAg
ICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgIGlmICghYnVm
ZmVyKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdu
b3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgYnVmZmVyLT5pbWFn
ZSgpLCBmbGlwWSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1Yklt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwg
dW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVj
ID0gMDsKKyAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgdmlkZW8sIGZsaXBZLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgpCit7
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobG9jYXRpb24sIHgpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit7CisgICAg
Ly8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYg
KCF2KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFm
dihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSk7CisgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQoreworICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlmICghdikK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9j
YXRpb24sIHYsIHNpemUpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9
CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWkobG9uZyBsb2NhdGlv
biwgaW50IHgpCit7CisgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24sIHgpOworICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2
KQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0xaXYobG9jYXRpb24sIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkpOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit7Cisg
ICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAg
aWYgKCF2KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpdihsb2NhdGlvbiwgdiwgc2l6ZSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yZihsb25n
IGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
KGxvY2F0aW9uLCB4LCB5KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
fQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJmdihsb25nIGxvY2F0
aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRo
cm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2Yg
MgorICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5n
dGgoKSAvIDIpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3Zv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIGZs
b2F0KiB2LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBu
byBhcnJheSBwYXNzZWQgaW4KKyAgICBpZiAoIXYpCisgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9mIDIKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dW5pZm9ybTJpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSkKK3sKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZv
cm0yaXYobG9uZyBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6
IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAg
ICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUg
YSBtdWx0aXBsZSBvZiAyCisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpIC8gMik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9u
ZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0
byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KKyAgICBpZiAoIXYpCisgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxl
IG9mIDIKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24sIHYsIHNpemUgLyAyKTsK
KyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHopCit7CisgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24sIHgsIHks
IHopOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zs
b2F0QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJy
YXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
IC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAzCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMyk7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBz
aXplKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3Nl
ZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAvLyBGSVhN
RTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMworICAgIG1fY29udGV4dC0+dW5p
Zm9ybTNmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDMpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
M2kobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeikKK3sKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0z
aXYobG9uZyBsb2NhdGlvbiwgQ2FudmFzSW50QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiAzCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLCB2LT5kYXRh
KCksIHYtPmxlbmd0aCgpIC8gMyk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNl
KTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zaXYobG9uZyBs
b2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0
aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KKyAgICBpZiAoIXYpCisgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgLy8gRklYTUU6IGxlbmd0aCBuZWVkcyB0byBiZSBhIG11bHRpcGxlIG9m
IDMKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24sIHYsIHNpemUgLyAzKTsKKyAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dW5pZm9ybTRmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHosIGZsb2F0IHcpCit7CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24s
IHgsIHksIHosIHcpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24s
IENhbnZhc0Zsb2F0QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cg
aWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiA0Cisg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgp
IC8gNCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQq
IHYsIGludCBzaXplKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFy
cmF5IHBhc3NlZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbiwgdiwgc2l6ZSAvIDQpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeiwgaW50IHcpCit7
CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KQor
eworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgor
ICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAvLyBGSVhNRTogbGVu
Z3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbiwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSAvIDQpOworICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit7CisgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9u
LCB2LCBzaXplIC8gNCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30K
Kwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgyZnYobG9uZyBs
b2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit7CisgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2
KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMg
dG8gYmUgYSBtdWx0aXBsZSBvZiA0CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA0KTsKKyAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
ZmxvYXQqIHYsIGludCBzaXplKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlm
IG5vIGFycmF5IHBhc3NlZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAvLyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgNAorICAg
IG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXpl
IC8gNCk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6IHdl
IG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBt
dWx0aXBsZSBvZiA5CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCkgLyA5KTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYs
IGludCBzaXplKQoreworICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5
IHBhc3NlZCBpbgorICAgIGlmICghdikKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAv
LyBGSVhNRTogbGVuZ3RoIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOQorICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gOSk7Cisg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFu
c3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
dGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCisgICAgaWYgKCF2KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIC8vIEZJWE1FOiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBv
ZiAxNgorICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpIC8gMTYpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3Jt
TWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdiwgaW50IHNp
emUpCit7CisgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2Vk
IGluCisgICAgaWYgKCF2KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIC8vIEZJWE1F
OiBsZW5ndGggbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNgorICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplIC8gMTYpOworICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1c2VQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit7CisgICAgbV9j
b250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0pOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2YWxpZGF0ZVBy
b2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkKK3sKKyAgICBtX2NvbnRleHQtPnZhbGlkYXRl
UHJvZ3JhbShwcm9ncmFtKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwor
fQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCkKK3sKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFm
KGluZHgsIHYwKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgQ2FudmFzRmxvYXRBcnJheSogdikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBt
YWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAorICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliMWZ2KGluZHgsIHYtPmRhdGEoKSk7CisgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQg
c2l6ZSkKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVu
b3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmR4LCB2KTsKKyAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQg
djEpCit7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZihpbmR4LCB2MCwgdjEpOworICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNG
bG9hdEFycmF5KiB2KQoreworICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBp
cyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CisgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQoreworICAgIC8v
IEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1
dGUgYmVpbmcgc2V0CisgICAgVU5VU0VEX1BBUkFNKHNpemUpOworICAgIAorICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMmZ2KGluZHgsIHYpOworICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxvYXQgdjIpCit7
CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmR4LCB2MCwgdjEsIHYyKTsKKyAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFzRmxv
YXRBcnJheSogdikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMg
YmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAorICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliM2Z2KGluZHgsIHYtPmRhdGEoKSk7CisgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJp
YjNmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKK3sKKyAgICAvLyBG
SVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRl
IGJlaW5nIHNldAorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICAKKyAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjNmdihpbmR4LCB2KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmli
NGYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyLCBmbG9h
dCB2MykKK3sKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmKGluZHgsIHYwLCB2MSwgdjIs
IHYzKTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5k
eCwgQ2FudmFzRmxvYXRBcnJheSogdikKK3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1
cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAorICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliNGZ2KGluZHgsIHYtPmRhdGEoKSk7CisgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
K3sKKyAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBm
b3IgYXR0cmlidXRlIGJlaW5nIHNldAorICAgIFVOVVNFRF9QQVJBTShzaXplKTsKKyAgICAKKyAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmR4LCB2KTsKKyAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsIHVuc2lnbmVkIGxvbmcgc3RyaWRlLCB1bnNp
Z25lZCBsb25nIG9mZnNldCkKK3sKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
aW5keCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgaWYgKGlzbmFuKHgpKQorICAgICAgICB4ID0gMDsK
KyAgICBpZiAoaXNuYW4oeSkpCisgICAgICAgIHkgPSAwOworICAgIGlmIChpc25hbih3aWR0aCkp
CisgICAgICAgIHdpZHRoID0gMTAwOworICAgIGlmIChpc25hbihoZWlnaHQpKQorICAgICAgICBo
ZWlnaHQgPSAxMDA7CisgICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworfQorCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6cmVtb3ZlT2JqZWN0KENhbnZhc09iamVjdCogb2JqZWN0KQor
eworICAgIG1fY2FudmFzT2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmFkZE9iamVjdChDYW52YXNPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICByZW1vdmVPYmplY3Qob2JqZWN0KTsKKyAgICBtX2NhbnZhc09iamVjdHMuYWRkKG9iamVjdCk7
Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCkKK3sKKyAgICBIYXNoU2V0PENhbnZhc09iamVjdCo+OjppdGVyYXRvciBwZW5kID0g
bV9jYW52YXNPYmplY3RzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxDYW52YXNPYmplY3QqPjo6
aXRlcmF0b3IgaXQgPSBtX2NhbnZhc09iamVjdHMuYmVnaW4oKTsgaXQgIT0gcGVuZDsgKytpdCkK
KyAgICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKKyAgICAgICAgCisgICAgbV9jYW52YXNP
YmplY3RzLmNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCisKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxNSAr
MjcsMTUgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAKLSNpbmNsdWRlICJDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKIAot
I2luY2x1ZGUgIkNhbnZhc0FjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJDYW52YXNCdWZmZXIuaCIK
LSNpbmNsdWRlICJDYW52YXNGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIkNhbnZhc1Byb2dyYW0u
aCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0
dXJlLmgiCi0jaW5jbHVkZSAiQ2FudmFzU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVm
ZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJi
dWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFNoYWRl
ci5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC00NCwxNiArNDQsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRD4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcykKK1Bhc3NPd25QdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzKQogewogICAgIE93blB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKCkp
OwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIHJl
dHVybiBuZXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKGNhbnZhcywgY29udGV4dC5yZWxlYXNl
KCkpOworICAgIHJldHVybiBuZXcgV2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgY29udGV4
dC5yZWxlYXNlKCkpOwogfQogCi1DYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJH
TFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc093
blB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKICAgICA6IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQocGFzc2VkQ2FudmFzKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX25l
ZWRzVXBkYXRlKHRydWUpCkBAIC02MywxMiArNjMsMTIgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpDYW52YXNSZW5kZXJpbgogICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKTsKIH0KIAotQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKCkKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6fldl
YkdMUmVuZGVyaW5nQ29udGV4dCgpCiB7CiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygp
OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2Vk
KCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQogewog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAoY2FudmFzKCktPnJlbmRl
ckJveCgpICYmIGNhbnZhcygpLT5yZW5kZXJCb3goKS0+aGFzTGF5ZXIoKSkgewpAQCAtODYsMTQg
Kzg2LDE0IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjptYXJrQ29udGUKICNlbmRp
ZgogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmVnaW5QYWludCgpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmVnaW5QYWludCgpCiB7CiAgICAgaWYgKG1fbWFya2Vk
Q2FudmFzRGlydHkpIHsKICAgICAgICAgbV9jb250ZXh0LT5iZWdpblBhaW50KHRoaXMpOwogICAg
IH0KIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmVuZFBhaW50KCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmRQYWludCgpCiB7CiAgICAgaWYgKG1fbWFya2VkQ2Fu
dmFzRGlydHkpIHsKICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwpAQCAtMTAx
LDcgKzEwMSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjplbmRQYWludCgKICAg
ICB9CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0
aCwgaW50IGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6cmVzaGFwZShpCiAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRo
LCBoZWlnaHQpOwogfQogCi1pbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzaXplSW5CeXRl
cyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpzaXplSW5CeXRlcyhpbnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaW50IHJl
c3VsdCA9IG1fY29udGV4dC0+c2l6ZUluQnl0ZXModHlwZSk7CiAgICAgaWYgKHJlc3VsdCA8PSAw
KSB7CkBAIC0xMjMsMTMgKzEyMywxMyBAQCBpbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpz
aXplSW5CeXRlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKQog
ewogICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6YXR0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hh
ZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphdHRh
Y2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgp
ICE9IHRoaXMgfHwgIXNoYWRlciB8fCBzaGFkZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAg
ICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmF0dGFjaFNoYQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQXR0
cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNp
Z25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmICghcHJvZ3JhbSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAg
ICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwpAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQXR0cmkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmluZEJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlv
bkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAg
ICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kQnVmZmUKIH0KIAogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNG
cmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMRnJh
bWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGJ1ZmZlciAm
JiBidWZmZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRD
SF9FUlI7CkBAIC0xNzAsNyArMTcwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmJpbmRGcmFtZQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcih1bnNp
Z25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKHJlbmRlckJ1ZmZlciAmJiByZW5kZXJCdWZmZXItPmNv
bnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC0x
ODEsNyArMTgxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJpbmRSZW5kZQog
fQogCiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpiaW5kVGV4dHVyZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgQ2FudmFzVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
aWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgZWMg
PSBUWVBFX01JU01BVENIX0VSUjsKQEAgLTE5MSw2OCArMTkxLDY4IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpiaW5kVGV4dHUKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwo
ZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRDb2xvcihk
b3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3Jl
ZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpCiB7CiAgICAgbV9jb250ZXh0LT5ibGVuZENv
bG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRFcXVh
dGlvbiggdW5zaWduZWQgbG9uZyBtb2RlICkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
bGVuZEVxdWF0aW9uKCB1bnNpZ25lZCBsb25nIG1vZGUgKQogewogICAgIG1fY29udGV4dC0+Ymxl
bmRFcXVhdGlvbihtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRl
KHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcg
bW9kZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpCiB7CiAgICAgbV9jb250ZXh0LT5ibGVu
ZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoZmFsc2UpOwogfQogCiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpibGVuZEZ1bmModW5zaWduZWQgbG9uZyBzZmFjdG9yLCB1bnNpZ25lZCBsb25nIGRmYWN0b3Ip
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcgc2Zh
Y3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKQogewogICAgIG1fY29udGV4dC0+YmxlbmRGdW5j
KHNmYWN0b3IsIGRmYWN0b3IpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9ICAgICAgIAogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6YmxlbmRGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25l
ZCBsb25nIHNyY0FscGhhLCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNp
Z25lZCBsb25nIGRzdFJHQiwgdW5zaWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBk
c3RBbHBoYSkKIHsKICAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0
UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpidWZmZXJEYXRhKHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBp
bnQgc2l6ZSwgdW5zaWduZWQgbG9uZyB1c2FnZSkKIHsKICAgICBtX2NvbnRleHQtPmJ1ZmZlckRh
dGEodGFyZ2V0LCBzaXplLCB1c2FnZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmJ1ZmZlckRhdGEodW5z
aWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0FycmF5KiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdl
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0
YXJnZXQsIFdlYkdMQXJyYXkqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7CiAgICAgbV9j
b250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YSwgdXNhZ2UpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQ2FudmFz
QXJyYXkqIGRhdGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YSh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJyYXkqIGRhdGEpCiB7CiAg
ICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBkYXRhKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi11bnNpZ25lZCBsb25nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh1bnNpZ25lZCBsb25n
IHRhcmdldCkKK3Vuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFyZ2V0KQogewogICAgIHJldHVybiBtX2NvbnRl
eHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y2xl
YXIodW5zaWduZWQgbG9uZyBtYXNrKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
KHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKICAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmNsZWFyQ29sb3IoZG91YmxlIHIsIGRvdWJsZSBnLCBkb3VibGUgYiwgZG91
YmxlIGEpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihkb3VibGUgciwg
ZG91YmxlIGcsIGRvdWJsZSBiLCBkb3VibGUgYSkKIHsKICAgICBpZiAoaXNuYW4ocikpCiAgICAg
ICAgIHIgPSAwOwpAQCAtMjY2LDI1ICsyNjYsMjUgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmNsZWFyQ29sbwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0
aCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKGRvdWJsZSBkZXB0aCkK
IHsKICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpj
bGVhclN0ZW5jaWwobG9uZyBzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3Rl
bmNpbChsb25nIHMpCiB7CiAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwgYm9vbCBibHVlLCBib29s
IGFscGhhKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayhib29sIHJlZCwg
Ym9vbCBncmVlbiwgYm9vbCBibHVlLCBib29sIGFscGhhKQogewogICAgIG1fY29udGV4dC0+Y29s
b3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29tcGls
ZVNoYWRlcihDYW52YXNTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXNoYWRlciB8fCBzaGFkZXItPmNvbnRleHQo
KSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC0yOTQsNTQg
KzI5NCw1NCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y29tcGlsZVNoCiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxl
dmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcgeSwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyKQordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBsb25nIGxldmVsLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBsb25nIHgsIGxvbmcg
eSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVy
KQogewogICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CiAgICAgY2xlYW51cEFmdGVy
R3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmNvcHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25n
IHhvZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNv
cHlUZXhTdWJJbWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhv
ZmZzZXQsIGxvbmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQogewogICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0cjxD
YW52YXNCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK1Bh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVy
KCkKIHsKLSAgICBSZWZQdHI8Q2FudmFzQnVmZmVyPiBvID0gQ2FudmFzQnVmZmVyOjpjcmVhdGUo
dGhpcyk7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0
aGlzKTsKICAgICBhZGRPYmplY3Qoby5nZXQoKSk7CiAgICAgcmV0dXJuIG87CiB9CiAgICAgICAg
IAotUGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogewotICAgIFJlZlB0cjxDYW52
YXNGcmFtZWJ1ZmZlcj4gbyA9IENhbnZhc0ZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAg
UmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUodGhp
cyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBvOwogfQogCi1QYXNzUmVm
UHRyPENhbnZhc1RleHR1cmU+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVy
ZSgpCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVUZXh0dXJlKCkKIHsKLSAgICBSZWZQdHI8Q2FudmFzVGV4dHVyZT4gbyA9IENhbnZhc1RleHR1
cmU6OmNyZWF0ZSh0aGlzKTsKKyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0
dXJlOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkpOwogICAgIHJldHVybiBv
OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc1Byb2dyYW0+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSgpCitQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkKIHsKLSAgICBSZWZQdHI8Q2FudmFzUHJvZ3JhbT4g
byA9IENhbnZhc1Byb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFt
PiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkp
OwogICAgIHJldHVybiBvOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIoKQorUGFzc1JlZlB0cjxX
ZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZm
ZXIoKQogewotICAgIFJlZlB0cjxDYW52YXNSZW5kZXJidWZmZXI+IG8gPSBDYW52YXNSZW5kZXJi
dWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG8gPSBX
ZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwogICAgIGFkZE9iamVjdChvLmdldCgpKTsK
ICAgICByZXR1cm4gbzsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNTaGFkZXI+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Y3JlYXRlU2hhZGVyKHVuc2lnbmVkIGxvbmcgdHlwZSkKK1Bhc3NSZWZQ
dHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKHVuc2ln
bmVkIGxvbmcgdHlwZSkKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBpbmNsdWRlIEdMXyBjb25z
dGFudHMgZm9yIGludGVybmFsIHVzZQogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGRvIHBhcmFtIGNo
ZWNraW5nIGFuZCB0aHJvdyBleGNlcHRpb24gaWYgYW4gaWxsZWdhbCB2YWx1ZSBpcyBwYXNzZWQg
aW4KQEAgLTM0OSwxOCArMzQ5LDE4IEBAIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBDYW52YXNS
ZW5kZXJpbmcKICAgICBpZiAodHlwZSA9PSAweDhCMzApIC8vIEdMX0ZSQUdNRU5UX1NIQURFUgog
ICAgICAgICBzaGFkZXJUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjsK
ICAgICAgICAgCi0gICAgUmVmUHRyPENhbnZhc1NoYWRlcj4gbyA9IENhbnZhc1NoYWRlcjo6Y3Jl
YXRlKHRoaXMsIHNoYWRlclR5cGUpOworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdM
U2hhZGVyOjpjcmVhdGUodGhpcywgc2hhZGVyVHlwZSk7CiAgICAgYWRkT2JqZWN0KG8uZ2V0KCkp
OwogICAgIHJldHVybiBvOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Y3Vs
bEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1
bGxGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKICAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1v
ZGUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBi
dWZmZXIpCiB7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM2OCw3ICsz
NjgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlQnVmCiAgICAgYnVm
ZmVyLT5kZWxldGVPYmplY3QoKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6
OmRlbGV0ZUZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVy
KiBmcmFtZWJ1ZmZlcikKIHsKICAgICBpZiAoIWZyYW1lYnVmZmVyKQogICAgICAgICByZXR1cm47
CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0
ZUZyYQogICAgIGZyYW1lYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKIH0KIAotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSkKIHsKICAgICBpZiAoIXByb2dyYW0pCiAgICAgICAgIHJldHVybjsKQEAgLTM4NCw3
ICszODQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVsZXRlUHJvCiAgICAg
cHJvZ3JhbS0+ZGVsZXRlT2JqZWN0KCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpkZWxldGVSZW5kZXJidWZmZXIoQ2FudmFzUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJidWZmZXIpCiAgICAg
ICAgIHJldHVybjsKQEAgLTM5Miw3ICszOTIsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6ZGVsZXRlUmVuCiAgICAgcmVuZGVyYnVmZmVyLT5kZWxldGVPYmplY3QoKTsKIH0KIAot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVNoYWRlcihDYW52YXNTaGFkZXIq
IHNoYWRlcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xT
aGFkZXIqIHNoYWRlcikKIHsKICAgICBpZiAoIXNoYWRlcikKICAgICAgICAgcmV0dXJuOwpAQCAt
NDAwLDcgKzQwMCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZWxldGVTaGEK
ICAgICBzaGFkZXItPmRlbGV0ZU9iamVjdCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJlKiB0ZXh0dXJlKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQog
ewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDA4LDI1ICs0MDgsMjUg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlbGV0ZVRleAogICAgIHRleHR1cmUt
PmRlbGV0ZU9iamVjdCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGVw
dGhGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
ZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKQogewogICAgIG1fY29udGV4dC0+ZGVwdGhGdW5j
KGZ1bmMpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpkZXB0aE1hc2soYm9vbCBmbGFnKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhib29sIGZsYWcpCiB7CiAgICAgbV9jb250ZXh0
LT5kZXB0aE1hc2soZmxhZyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoZG91YmxlIHpO
ZWFyLCBkb3VibGUgekZhcikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdl
KGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpCiB7CiAgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdl
KHpOZWFyLCB6RmFyKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKENhbnZhc1Byb2dy
YW0qIHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMgfHwgIXNoYWRlciB8fCBzaGFk
ZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7
CkBAIC00MzcsNTcgKzQzNyw1NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGV0
YWNoU2hhCiB9CiAKIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRpc2FibGUodW5z
aWduZWQgbG9uZyBjYXApCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZSh1bnNp
Z25lZCBsb25nIGNhcCkKIHsKICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKICAgICBjbGVh
bnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2ln
bmVkIGxvbmcgaW5kZXgpCiB7CiAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoaW5kZXgpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKIAot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBt
b2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2RlLCBsb25nIGZpcnN0LCBsb25nIGNvdW50KQog
ewogICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbCh0cnVlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmRyYXdFbGVtZW50cyh1bnNpZ25lZCBsb25nIG1vZGUsIHVuc2lnbmVkIGxvbmcg
Y291bnQsIHVuc2lnbmVkIGxvbmcgdHlwZSwgbG9uZyBvZmZzZXQpCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9u
ZyBjb3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCkKIHsKICAgICBtX2NvbnRl
eHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0KTsKICAgICBjbGVhbnVw
QWZ0ZXJHcmFwaGljc0NhbGwodHJ1ZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjplbmFibGUodW5zaWduZWQgbG9uZyBjYXApCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZW5hYmxlKHVuc2lnbmVkIGxvbmcgY2FwKQogewogICAgIG1fY29udGV4dC0+ZW5hYmxlKGNh
cCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVkIGxv
bmcgaW5kZXgpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCkKIHsKICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZmluaXNoKCkKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpmaW5pc2goKQogewogICAgIG1fY29udGV4dC0+ZmluaXNoKCk7
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKHRydWUpOwogfQogCiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpmbHVzaCgpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Zmx1c2goKQogewogICAgIG1fY29udGV4dC0+Zmx1c2goKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwodHJ1ZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBh
dHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdldCwgQ2FudmFzUmVuZGVy
YnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0LCBX
ZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
YnVmZmVyICYmIGJ1ZmZlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgZWMgPSBUWVBF
X01JU01BVENIX0VSUjsKQEAgLTQ5Nyw3ICs0OTcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6ZnJhbWVidWZmCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgdGV4dGFyZ2V0LCBDYW52YXNUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVsLCBFeGNl
cHRpb25Db2RlJiBlYykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRl
eHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1
bnNpZ25lZCBsb25nIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBsb25nIGxldmVs
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5jb250
ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwpAQCAtNTA3
LDExOSArNTA3LDExOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZnJhbWVidWZm
CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmZyb250RmFjZSh1bnNpZ25lZCBsb25nIG1vZGUpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKHVuc2lnbmVkIGxvbmcgbW9kZSkKIHsKICAg
ICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2VuZXJhdGVN
aXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2VuZXJhdGVNaXBtYXAodW5zaWduZWQgbG9uZyB0YXJnZXQpCiB7CiAgICAgbV9jb250ZXh0LT5n
ZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxz
ZSk7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzQWN0aXZlSW5mbz4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5m
bz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBB
Y3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAh
PSB0aGlzIHx8ICFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihwcm9ncmFtLCBpbmRleCwgaW5m
bykpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotICAgIHJldHVybiBDYW52YXNBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZv
LnR5cGUsIGluZm8uc2l6ZSk7CisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGlu
Zm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0Fj
dGl2ZUluZm8+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShDYW52
YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBY3RpdmVJbmZvIGluZm87CiAgICAgaWYgKCFw
cm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzIHx8ICFtX2NvbnRleHQtPmdldEFj
dGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIGluZm8pKSB7CiAgICAgICAgIGVjID0gSU5ERVhf
U0laRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gQ2FudmFzQWN0
aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworICAgIHJl
dHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5z
aXplKTsKIH0KIAotaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QXR0cmliTG9jYXRp
b24oQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoraW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0QXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7CiB9CiAKLWJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRCb29sZWFuKHVuc2lnbmVkIGxvbmcgcG5hbWUpCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0Qm9vbGVhbih1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGJvb2wgcmVz
dWx0ID0gbV9jb250ZXh0LT5nZXRCb29sZWFuKHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFw
aGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8Q2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0Qm9vbGVh
bnYodW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFudih1bnNpZ25lZCBsb25nIHBuYW1l
KQogewotICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lKTsKKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAotaW50IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dEJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5h
bWUpCiB7CiAgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaSh0
YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBh
cnJheSA9IG1fY29udGV4dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7Cisg
ICAgUmVmUHRyPFdlYkdMSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOwogICAgIHJldHVybiBhcnJheTsKIH0KIAotdW5zaWduZWQgbG9uZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldEVycm9yKCkKK3Vuc2lnbmVkIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRFcnJvcigpCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKIH0K
IAotZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRGbG9hdCh1bnNpZ25lZCBsb25n
IHBuYW1lKQorZmxvYXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdCh1bnNpZ25lZCBs
b25nIHBuYW1lKQogewogICAgIGZsb2F0IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0RmxvYXQocG5h
bWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJH
TEZsb2F0QXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxv
bmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250
ZXh0LT5nZXRGbG9hdHYocG5hbWUpOworICAgIFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGFycmF5
ID0gbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNz
Q2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1pbnQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJh
bWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgaW50IHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0RnJh
bWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NS
ZWZQdHI8V2ViR0xJbnRBcnJheT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxDYW52YXNJ
bnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUpOworICAgIFJlZlB0cjxXZWJHTEludEFy
cmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLWludCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OmdldEludGVnZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKK2ludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEludGVnZXIodW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBmbG9h
dCByZXN1bHQgPSBtX2NvbnRleHQtPmdldEludGVnZXIocG5hbWUpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRJbnRlZ2Vydih1
bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVm
UHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUp
OworICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYocG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0
dXJuIGFycmF5OwogfQogCi1pbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFt
aShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1pKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAg
ICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC02MzEsMTggKzYzMSwxOCBAQCBpbnQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRQcm9ncmFtCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpn
ZXRQcm9ncmFtaXYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQg
bG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFwcm9ncmFtIHx8IHBy
b2dyYW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+
IGFycmF5ID0gbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYocHJvZ3JhbSwgcG5hbWUpOworICAgIFJl
ZlB0cjxXZWJHTEludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KHByb2dy
YW0sIHBuYW1lKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogICAgIHJl
dHVybiBhcnJheTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0UHJv
Z3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCitT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghcHJvZ3JhbSB8fCBw
cm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hf
RVJSOwpAQCAtNjUzLDIxICs2NTMsMjEgQEAgU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6Z2V0UHJvZwogICAgIHJldHVybiBzOwogfQogCi1pbnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQoraW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVm
ZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
IHsKICAgICBpbnQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
KHRhcmdldCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xJbnRBcnJh
eT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKLSAgICBSZWZQdHI8Q2Fu
dmFzSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJp
dih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBtX2Nv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUpOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1p
bnQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJpKENhbnZhc1NoYWRlciogc2hh
ZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK2ludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlcmkoV2ViR0xTaGFkZXIqIHNoYWRlciwgdW5zaWduZWQg
bG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFzaGFkZXIgfHwgc2hh
ZGVyLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJS
OwpAQCAtNjc4LDE4ICs2NzgsMTggQEAgaW50IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0
U2hhZGVyaQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJy
YXk+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBz
aGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0
cjxXZWJHTEludEFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlcml2KFdlYkdM
U2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmICghc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAg
ICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFNoYWRlcml2KHNo
YWRlciwgcG5hbWUpOworICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBhcnJheSA9IG1fY29udGV4
dC0+Z2V0U2hhZGVyaXYoc2hhZGVyLCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coQ2FudmFzU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySW5m
b0xvZyhXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAo
IXNoYWRlciB8fCBzaGFkZXItPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQ
RV9NSVNNQVRDSF9FUlI7CkBAIC03MDAsNyArNzAwLDcgQEAgU3RyaW5nIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6Z2V0U2hhZAogICAgIHJldHVybiBzOwogfQogCi1TdHJpbmcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjpnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlm
ICghc2hhZGVyIHx8IHNoYWRlci0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgZWMgPSBU
WVBFX01JU01BVENIX0VSUjsKQEAgLTcxMSw0MCArNzExLDQwIEBAIFN0cmluZyBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFNoYWQKICAgICByZXR1cm4gczsKIH0KIAotU3RyaW5nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcgbmFtZSkKK1N0cmlu
ZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpCiB7
CiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0U3RyaW5nKG5hbWUpOwogfQogCi1mbG9hdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmYodW5zaWduZWQgbG9uZyB0YXJn
ZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitmbG9hdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFRleFBhcmFtZXRlcmYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CiB7CiAgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmKHRhcmdl
dCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5
ID0gbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lKTsKKyAgICBSZWZQ
dHI8V2ViR0xGbG9hdEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyZnYo
dGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAg
ICByZXR1cm4gYXJyYXk7CiB9CiAKLWludCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRl
eFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitp
bnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGludCByZXN1bHQgPSBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPENh
bnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxX
ZWJHTEludEFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcml2KHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewotICAgIFJlZlB0cjxD
YW52YXNJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUpOworICAgIFJlZlB0cjxXZWJHTEludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+
Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLWZsb2F0IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBs
b2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitmbG9hdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm1mKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dyYW0tPmNvbnRleHQoKSAh
PSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7CkBAIC03NTUsMTggKzc1
NSwxOCBAQCBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25n
IGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dy
YW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghcHJvZ3Jh
bSB8fCBwcm9ncmFtLT5jb250ZXh0KCkgIT0gdGhpcykgewogICAgICAgICBlYyA9IFRZUEVfTUlT
TUFUQ0hfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgUmVmUHRyPENhbnZhc0Zs
b2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRp
b24pOworICAgIFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRV
bmlmb3JtZnYocHJvZ3JhbSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1sb25nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6Z2V0VW5pZm9ybWkoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpCitsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5p
Zm9ybWkoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgpICE9IHRoaXMp
IHsKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKQEAgLTc3NywxOCArNzc3LDE4IEBA
IGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3IKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OmdldFVuaWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9u
LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxv
Y2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3Jh
bS0+Y29udGV4dCgpICE9IHRoaXMpIHsKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxDYW52YXNJbnRBcnJheT4gYXJy
YXkgPSBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihwcm9ncmFtLCBsb2NhdGlvbik7CisgICAgUmVm
UHRyPFdlYkdMSW50QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYocHJvZ3Jh
bSwgbG9jYXRpb24pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAg
cmV0dXJuIGFycmF5OwogfQogCi1sb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VW5p
Zm9ybUxvY2F0aW9uKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCitsb25nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXByb2dyYW0gfHwgcHJvZ3JhbS0+Y29udGV4dCgp
ICE9IHRoaXMpIHsKICAgICAgICAgZWMgPSBUWVBFX01JU01BVENIX0VSUjsKQEAgLTc5Nyw0OCAr
Nzk3LDQ4IEBAIGxvbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRVbmlmb3IKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7CiB9CiAK
LWZsb2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZih1bnNpZ25l
ZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorZmxvYXQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxv
bmcgcG5hbWUpCiB7CiAgICAgZmxvYXQgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRy
aWJmKGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYodW5zaWduZWQgbG9uZyBp
bmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+
IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUpOworICAg
IFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5nZXRWZXJ0ZXhBdHRy
aWJmdihpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1sb25nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6
Z2V0VmVydGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1l
KQorbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYmkodW5zaWduZWQg
bG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBsb25nIHJlc3VsdCA9IG1f
Y29udGV4dC0+Z2V0VmVydGV4QXR0cmliaShpbmRleCwgcG5hbWUpOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0
cjxXZWJHTEludEFycmF5PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYml2
KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7Ci0gICAgUmVmUHRy
PENhbnZhc0ludEFycmF5PiBhcnJheSA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliaXYoaW5k
ZXgsIHBuYW1lKTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBtX2NvbnRleHQt
PmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLWxvbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKK2xvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSkK
IHsKICAgICBsb25nIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGlu
ZGV4LCBwbmFtZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aGludCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBtb2RlKQordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmhpbnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9k
ZSkKIHsKICAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6aXNCdWZmZXIoQ2FudmFzQnVmZmVyKiBidWZmZXIpCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODQ2LDQzICs4NDYsNDMgQEAgYm9vbCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OmlzQnVmZmVyKAogICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVm
ZmVyKGJ1ZmZlcik7CiB9CiAKLWJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjppc0VuYWJs
ZWQodW5zaWduZWQgbG9uZyBjYXApCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFi
bGVkKHVuc2lnbmVkIGxvbmcgY2FwKQogewogICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxl
ZChjYXApOwogfQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNGcmFtZWJ1ZmZl
cihDYW52YXNGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKIHsKICAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKIH0KIAotYm9v
bCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OmlzUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9n
cmFtKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0q
IHByb2dyYW0pCiB7CiAgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0pOwog
fQogCi1ib29sIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoQ2FudmFz
UmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsKICAgICBy
ZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOwogfQogCi1ib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNTaGFkZXIoQ2FudmFzU2hhZGVyKiBzaGFkZXIp
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRl
cikKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXIpOwogfQogCi1ib29s
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6aXNUZXh0dXJlKENhbnZhc1RleHR1cmUqIHRleHR1
cmUpCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSog
dGV4dHVyZSkKIHsKICAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZSk7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpsaW5lV2lkdGgoZG91YmxlIHdpZHRo
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChkb3VibGUgd2lkdGgpCiB7
CiAgICAgbV9jb250ZXh0LT5saW5lV2lkdGgoKGZsb2F0KSB3aWR0aCk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OmxpbmtQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFwcm9ncmFtIHx8IHByb2dy
YW0tPmNvbnRleHQoKSAhPSB0aGlzKSB7CiAgICAgICAgIGVjID0gVFlQRV9NSVNNQVRDSF9FUlI7
CkBAIC04OTMsNTAgKzg5Myw1MCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6bGlu
a1Byb2dyCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKHVuc2lnbmVkIGxvbmcgcG5hbWUs
IGxvbmcgcGFyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkodW5z
aWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSkKIHsKICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKHBuYW1lLCBwYXJhbSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoZG91Ymxl
IGZhY3RvciwgZG91YmxlIHVuaXRzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHln
b25PZmZzZXQoZG91YmxlIGZhY3RvciwgZG91YmxlIHVuaXRzKQogewogICAgIG1fY29udGV4dC0+
cG9seWdvbk9mZnNldCgoZmxvYXQpIGZhY3RvciwgKGZsb2F0KSB1bml0cyk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNBcnJheT4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNp
Z25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3Jt
YXQsIHVuc2lnbmVkIGxvbmcgdHlwZSkKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVk
IGxvbmcgdHlwZSkKIHsKLSAgICBSZWZQdHI8Q2FudmFzQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0
LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CisgICAgUmVm
UHRyPFdlYkdMQXJyYXk+IGFycmF5ID0gbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCiB7CiAgICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWln
aHQpCiB7CiAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFn
ZShkb3VibGUgdmFsdWUsIGJvb2wgaW52ZXJ0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpCiB7CiAgICAgbV9jb250
ZXh0LT5zYW1wbGVDb3ZlcmFnZSgoZmxvYXQpIHZhbHVlLCBpbnZlcnQpOwogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjpzY2lzc29yKGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKGxvbmcg
eCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkKIHsK
ICAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnNoYWRlclNvdXJjZShDYW52YXNTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNo
YWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFzaGFkZXIgfHwgc2hhZGVyLT5jb250ZXh0KCkg
IT0gdGhpcykgewogICAgICAgICBlYyA9IFRZUEVfTUlTTUFUQ0hfRVJSOwpAQCAtOTQ2LDQ1ICs5
NDYsNDUgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnNoYWRlclNvdQogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjpzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNp
Z25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMo
dW5zaWduZWQgbG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogICAg
IG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcg
ZnVuYywgbG9uZyByZWYsIHVuc2lnbmVkIGxvbmcgbWFzaykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgZmFjZSwgdW5zaWduZWQg
bG9uZyBmdW5jLCBsb25nIHJlZiwgdW5zaWduZWQgbG9uZyBtYXNrKQogewogICAgIG1fY29udGV4
dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOwogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjpzdGVuY2lsTWFzayh1bnNpZ25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6c3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyBtYXNrKQogewogICAgIG1fY29u
dGV4dC0+c3RlbmNpbE1hc2sobWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIG1hc2spCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2Us
IHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJh
dGUoZmFjZSwgbWFzayk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnN0ZW5jaWxPcCh1bnNpZ25lZCBsb25n
IGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWdu
ZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKICAgICBtX2NvbnRleHQtPnN0
ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjpzdGVuY2lsT3BT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZmFpbCwgdW5zaWduZWQg
bG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcg
ZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcykKIHsKICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7CiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZl
bCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRl
cm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWdu
ZWQgdHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2ln
bmVkIHR5cGUsIFdlYkdMQXJyYXkqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAgICBlYyA9
IDA7CkBAIC05OTMsNyArOTkzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRl
eEltYWdlMgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKQEAgLTEwMDQsNyArMTAwNCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0
ZXhJbWFnZTIKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVu
c2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBlYyA9IDA7CkBAIC0xMDIyLDcgKzEwMjIsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxs
KGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cywKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdl
dCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRp
cGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGVjID0gMDsKQEAgLTEwNDAsNyAr
MTA0MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhJbWFnZTIKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBI
VE1MVmlkZW9FbGVtZW50KiB2aWRlbywKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAv
LyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZApAQCAtMTA0OSwy
MSArMTA0OSwyMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4SW1hZ2UyCiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBw
bmFtZSwgZmxvYXQgcGFyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1l
dGVyZih1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIHBuYW1lLCBmbG9hdCBwYXJhbSkKIHsKICAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUs
IGludCBwYXJhbSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcG5hbWUsIGludCBwYXJhbSkKIHsKICAgICBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOwogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVk
IHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4
b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5z
aWduZWQgdHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIFdlYkdMQXJyYXkqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7
CiAgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKICAg
ICBlYyA9IDA7CkBAIC0xMDcxLDcgKzEwNzEsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRDo6dGV4U3ViSW1hCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNl
dCwKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBJbWFnZURhdGEqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CkBAIC0xMDgxLDcgKzEwODEsNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3ViSW1hCiAgICAgY2xlYW51cEFmdGVyR3JhcGhp
Y3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1
YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNl
dCwgdW5zaWduZWQgeW9mZnNldCwKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQs
IHVuc2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CkBA
IC0xMTAwLDcgKzExMDAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3Vi
SW1hCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWdu
ZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKQEAgLTExMTksNyArMTExOSw3IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp0ZXhTdWJJbWEKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dGV4U3Vi
SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0
LCB1bnNpZ25lZCB5b2Zmc2V0LAordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1Yklt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwg
dW5zaWduZWQgeW9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRlb0VsZW1lbnQq
IHZpZGVvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKQEAg
LTExMjksMTMgKzExMjksMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnRleFN1
YkltYQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCkK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxv
YXQgeCkKIHsKICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbiwgeCk7CiAgICAgY2xl
YW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdikK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIFdl
YkdMRmxvYXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBu
byBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCkBAIC0xMTQ1LDcgKzExNDUsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFmCiAgICAgY2xlYW51cEFmdGVyR3Jh
cGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBz
aXplKQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3Nl
ZCBpbgogICAgIGlmICghdikKQEAgLTExNTUsMTMgKzExNTUsMTMgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMWkobG9u
ZyBsb2NhdGlvbiwgaW50IHgpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFp
KGxvbmcgbG9jYXRpb24sIGludCB4KQogewogICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0
aW9uLCB4KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBDYW52
YXNJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGxv
bmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQg
dG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTE3MSw3ICsx
MTcxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaQogICAgIGNs
ZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihsb25nIGxvY2F0aW9uLCBpbnQq
IHYsIGludCBzaXplKQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFy
cmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKQEAgLTExODEsMTMgKzExODEsMTMgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0xaQogICAgIGNsZWFudXBBZnRlckdyYXBo
aWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlm
b3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSkKIHsK
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7CiAgICAgY2xlYW51cEFm
dGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0Q6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdikKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGxvbmcgbG9jYXRpb24sIFdlYkdMRmxv
YXRBcnJheSogdikKIHsKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJh
eSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJmCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0y
ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQog
ewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgog
ICAgIGlmICghdikKQEAgLTEyMDksMTMgKzEyMDksMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0M0Q6OnVuaWZvcm0yZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMmkobG9uZyBsb2Nh
dGlvbiwgaW50IHgsIGludCB5KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHkpCiB7CiAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MmkobG9jYXRpb24sIHgsIHkpOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtMml2KGxvbmcgbG9j
YXRpb24sIENhbnZhc0ludEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgV2ViR0xJbnRBcnJheSogdikKIHsKICAgICAvLyBGSVhN
RTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4KICAgICBpZiAoIXYpCkBA
IC0xMjI2LDcgKzEyMjYsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9y
bTJpCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGxvbmcgbG9j
YXRpb24sIGludCogdiwgaW50IHNpemUpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhy
b3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTIzNywxMyArMTIzNywx
MyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTJpCiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBm
bG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQogewogICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxv
Y2F0aW9uLCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwog
fQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0
aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikK
QEAgLTEyNTQsNyArMTI1NCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlm
b3JtM2YKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmdihsb25nIGxvY2F0aW9uLCBmbG9hdCog
diwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihsb25n
IGxvY2F0aW9uLCBmbG9hdCogdiwgaW50IHNpemUpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQg
dG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTI2NSwxMyAr
MTI2NSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNmCiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBpbnQgeCwgaW50IHksIGludCB6
KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShsb25nIGxvY2F0aW9uLCBp
bnQgeCwgaW50IHksIGludCB6KQogewogICAgIG1fY29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9u
LCB4LCB5LCB6KTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBD
YW52YXNJbnRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2
KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5l
ZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTI4Miw3
ICsxMjgyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zaQogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUp
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBp
bnQqIHYsIGludCBzaXplKQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5v
IGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikKQEAgLTEyOTMsMTMgKzEyOTMsMTMgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm0zaQogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQg
dykKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGYobG9uZyBsb2NhdGlvbiwg
ZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdykKIHsKICAgICBtX2NvbnRleHQtPnVu
aWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3ND
YWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00
ZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIFdlYkdMRmxvYXRBcnJheSogdikK
IHsKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byB0aHJvdyBpZiBubyBhcnJheSBwYXNzZWQgaW4K
ICAgICBpZiAoIXYpCkBAIC0xMzEwLDcgKzEzMTAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRDo6dW5pZm9ybTRmCiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsK
IH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00ZnYobG9uZyBsb2Nh
dGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKQogewogICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICghdikK
QEAgLTEzMjEsMTMgKzEzMjEsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVu
aWZvcm00ZgogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGkobG9uZyBsb2NhdGlvbiwgaW50IHgs
IGludCB5LCBpbnQgeiwgaW50IHcpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KQogewogICAgIG1f
Y29udGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5LCB6LCB3KTsKICAgICBjbGVhbnVwQWZ0
ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQz
RDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogdikKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJy
YXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFz
c2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTMzOCw3ICsxMzM4LDcgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm00aQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChm
YWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1bmlmb3JtNGl2KGxv
bmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTRpdihsb25nIGxvY2F0aW9uLCBpbnQqIHYsIGludCBzaXplKQogewogICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAgIGlmICgh
dikKQEAgLTEzNDksNyArMTM0OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1
bmlmb3JtNGkKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihsb25nIGxvY2F0aW9u
LCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gdGhyb3cg
aWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTM2MCw3ICsxMzYwLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
Ojp1bmlmb3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCog
diwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJm
dihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXplKQogewog
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBpbgogICAg
IGlmICghdikKQEAgLTEzNzEsNyArMTM3MSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp1bmlmb3JtTWEKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQog
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDNmdihsb25nIGxv
Y2F0aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdikKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJh
bnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
dGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTM4Miw3ICsxMzgy
LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgIGNsZWFu
dXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBm
bG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1h
dHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGludCBzaXpl
KQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBhc3NlZCBp
bgogICAgIGlmICghdikKQEAgLTEzOTMsNyArMTM5Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEOjp1bmlmb3JtTWEKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2Up
OwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihs
b25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdikKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJv
b2wgdHJhbnNwb3NlLCBXZWJHTEZsb2F0QXJyYXkqIHYpCiB7CiAgICAgLy8gRklYTUU6IHdlIG5l
ZWQgdG8gdGhyb3cgaWYgbm8gYXJyYXkgcGFzc2VkIGluCiAgICAgaWYgKCF2KQpAQCAtMTQwNCw3
ICsxNDA0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAg
IGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNw
b3NlLCBmbG9hdCogdiwgaW50IHNpemUpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHYsIGlu
dCBzaXplKQogewogICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIHRocm93IGlmIG5vIGFycmF5IHBh
c3NlZCBpbgogICAgIGlmICghdikKQEAgLTE0MTUsMzIgKzE0MTUsMzIgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0Q6OnVuaWZvcm1NYQogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp1c2VQcm9ncmFt
KENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNl
UHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCiB7CiAgICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKHByb2dyYW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9n
cmFtKHByb2dyYW0pOwogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAK
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZih1bnNpZ25lZCBs
b25nIGluZHgsIGZsb2F0IHYwKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjApCiB7CiAgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWIxZihpbmR4LCB2MCk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFm
dih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgV2ViR0xG
bG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBp
cyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIxZnYoaW5keCwgdi0+ZGF0YSgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0Nh
bGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZs
b2F0KiB2LCBpbnQgc2l6ZSkKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJy
YXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5nIHNldAogICAgIFVOVVNFRF9QQVJB
TShzaXplKTsKQEAgLTE0NDksMjAgKzE0NDksMjAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dAogICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25l
ZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSkKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2
MSkKIHsKICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZHgsIHYwLCB2MSk7CiAgICAg
Y2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zs
b2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2
KHVuc2lnbmVkIGxvbmcgaW5keCwgV2ViR0xGbG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJWE1F
OiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVp
bmcgc2V0CiAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5keCwgdi0+ZGF0YSgpKTsK
ICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxv
YXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjJmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKICAgICAvLyBG
SVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRl
IGJlaW5nIHNldAogICAgIFVOVVNFRF9QQVJBTShzaXplKTsKQEAgLTE0NzEsMjAgKzE0NzEsMjAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIGNsZWFudXBB
ZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2
MSwgZmxvYXQgdjIpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Yo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB2MCwgZmxvYXQgdjEsIGZsb2F0IHYyKQogewogICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5keCwgdjAsIHYxLCB2Mik7CiAgICAgY2xlYW51
cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0QXJy
YXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KHVuc2ln
bmVkIGxvbmcgaW5keCwgV2ViR0xGbG9hdEFycmF5KiB2KQogewogICAgIC8vIEZJWE1FOiBOZWVk
IHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBhdHRyaWJ1dGUgYmVpbmcgc2V0
CiAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZnYoaW5keCwgdi0+ZGF0YSgpKTsKICAgICBj
bGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQqIHYs
IGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdih1
bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkKIHsKICAgICAvLyBGSVhNRTog
TmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBmb3IgYXR0cmlidXRlIGJlaW5n
IHNldAogICAgIFVOVVNFRF9QQVJBTShzaXplKTsKQEAgLTE0OTMsMjAgKzE0OTMsMjAgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAogICAgIGNsZWFudXBBZnRlckdy
YXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEOjp2
ZXJ0ZXhBdHRyaWI0Zih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHYwLCBmbG9hdCB2MSwgZmxv
YXQgdjIsIGZsb2F0IHYzKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgdjAsIGZsb2F0IHYxLCBmbG9hdCB2MiwgZmxv
YXQgdjMpCiB7CiAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmR4LCB2MCwgdjEsIHYy
LCB2Myk7CiAgICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGlu
ZHgsIENhbnZhc0Zsb2F0QXJyYXkqIHYpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgV2ViR0xGbG9hdEFycmF5KiB2KQogewog
ICAgIC8vIEZJWE1FOiBOZWVkIHRvIG1ha2Ugc3VyZSBhcnJheSBpcyBiaWcgZW5vdWdoIGZvciBh
dHRyaWJ1dGUgYmVpbmcgc2V0CiAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5keCwg
di0+ZGF0YSgpKTsKICAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQqIHYsIGludCBzaXplKQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2LCBpbnQgc2l6ZSkK
IHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBtYWtlIHN1cmUgYXJyYXkgaXMgYmlnIGVub3VnaCBm
b3IgYXR0cmlidXRlIGJlaW5nIHNldAogICAgIFVOVVNFRF9QQVJBTShzaXplKTsKQEAgLTE1MTUs
MTMgKzE1MTUsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Q6OnZlcnRleEF0dAog
ICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2ludGVyKHVuc2lnbmVkIGxvbmcgaW5keCwg
bG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQg
bG9uZyBzdHJpZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgbG9uZyBpbmR4LCBsb25nIHNpemUs
IHVuc2lnbmVkIGxvbmcgdHlwZSwgYm9vbCBub3JtYWxpemVkLCB1bnNpZ25lZCBsb25nIHN0cmlk
ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKGluZHgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKICAg
ICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOwogfQogCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRDo6dmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
ZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25n
IGhlaWdodCkKIHsKICAgICBpZiAoaXNuYW4oeCkpCiAgICAgICAgIHggPSAwOwpAQCAtMTUzNSwy
MSArMTUzNSwyMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6dmlld3BvcnQoCiAg
ICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZhbHNlKTsKIH0KIAotdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0M0Q6OnJlbW92ZU9iamVjdChDYW52YXNPYmplY3QqIG9iamVjdCkKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkK
IHsKICAgICBtX2NhbnZhc09iamVjdHMucmVtb3ZlKG9iamVjdCk7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOjphZGRPYmplY3QoQ2FudmFzT2JqZWN0KiBvYmplY3QpCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgcmVtb3ZlT2JqZWN0KG9iamVjdCk7CiAgICAgbV9jYW52YXNPYmplY3RzLmFkZChvYmpl
Y3QpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRDo6ZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpCiB7Ci0gICAgSGFzaFNldDxDYW52YXNPYmplY3QqPjo6aXRlcmF0b3IgcGVu
ZCA9IG1fY2FudmFzT2JqZWN0cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Q2FudmFzT2JqZWN0
Kj46Oml0ZXJhdG9yIGl0ID0gbV9jYW52YXNPYmplY3RzLmJlZ2luKCk7IGl0ICE9IHBlbmQ7ICsr
aXQpCisgICAgSGFzaFNldDxXZWJHTE9iamVjdCo+OjppdGVyYXRvciBwZW5kID0gbV9jYW52YXNP
YmplY3RzLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxXZWJHTE9iamVjdCo+OjppdGVyYXRvciBp
dCA9IG1fY2FudmFzT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBwZW5kOyArK2l0KQogICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOwogICAgICAgICAKICAgICBtX2NhbnZhc09iamVjdHMuY2xl
YXIoKTsKQEAgLTE1NTgsNCArMTU1OCwzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
OjpkZXRhY2hBbmQKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgz
RF9DQU5WQVMpCi0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gNTA2MzQpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNELmg6NTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RfaAorI2RlZmluZSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0M0RfaAorCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5
LmgiCisjaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYW52YXNB
Y3RpdmVJbmZvOworY2xhc3MgQ2FudmFzQnVmZmVyOworY2xhc3MgQ2FudmFzRnJhbWVidWZmZXI7
CitjbGFzcyBDYW52YXNPYmplY3Q7CitjbGFzcyBDYW52YXNQcm9ncmFtOworY2xhc3MgQ2FudmFz
UmVuZGVyYnVmZmVyOworY2xhc3MgQ2FudmFzU2hhZGVyOworY2xhc3MgQ2FudmFzVGV4dHVyZTsK
K2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3Mg
SW1hZ2VEYXRhOworY2xhc3MgV2ViS2l0Q1NTTWF0cml4OworCisgICAgY2xhc3MgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworICAgIHB1
YmxpYzoKKyAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqKTsKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEKCk7CisKKyAgICAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBp
biBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcworICAgICAgICAvLyBsaWtlIEdMX0ZMT0FULCBH
TF9JTlQsIGV0Yy4KKyAgICAgICAgaW50IHNpemVJbkJ5dGVzKGludCB0eXBlLCBFeGNlcHRpb25D
b2RlJiBlYyk7CisKKyAgICAgICAgdm9pZCBhY3RpdmVUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4
dHVyZSk7CisgICAgICAgIHZvaWQgYXR0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0qLCBDYW52YXNT
aGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0
aW9uKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBDYW52YXNCdWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAg
IHZvaWQgYmluZEZyYW1lYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNGcmFtZWJ1
ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVy
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2Rl
JiBlYyk7CisgICAgICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIENh
bnZhc1RleHR1cmUqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIHZvaWQgYmxlbmRDb2xv
cihkb3VibGUgcmVkLCBkb3VibGUgZ3JlZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOwor
ICAgICAgICB2b2lkIGJsZW5kRXF1YXRpb24odW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICAgICAg
dm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25l
ZCBsb25nIG1vZGVBbHBoYSk7CisgICAgICAgIHZvaWQgYmxlbmRGdW5jKHVuc2lnbmVkIGxvbmcg
c2ZhY3RvciwgdW5zaWduZWQgbG9uZyBkZmFjdG9yKTsKKyAgICAgICAgdm9pZCBibGVuZEZ1bmNT
ZXBhcmF0ZSh1bnNpZ25lZCBsb25nIHNyY1JHQiwgdW5zaWduZWQgbG9uZyBkc3RSR0IsIHVuc2ln
bmVkIGxvbmcgc3JjQWxwaGEsIHVuc2lnbmVkIGxvbmcgZHN0QWxwaGEpOworCisgICAgICAgIHZv
aWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgaW50IHNpemUsIHVuc2lnbmVkIGxv
bmcgdXNhZ2UpOworICAgICAgICB2b2lkIGJ1ZmZlckRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQs
IENhbnZhc0FycmF5KiBkYXRhLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICAgICAgdm9pZCBi
dWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgQ2FudmFzQXJy
YXkqIGRhdGEpOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAgICAgIHZvaWQgY2xlYXIodW5zaWduZWQgbG9u
ZyBtYXNrKTsKKyAgICAgICAgdm9pZCBjbGVhckNvbG9yKGRvdWJsZSByZWQsIGRvdWJsZSBncmVl
biwgZG91YmxlIGJsdWUsIGRvdWJsZSBhbHBoYSk7CisgICAgICAgIHZvaWQgY2xlYXJEZXB0aChk
b3VibGUpOworICAgICAgICB2b2lkIGNsZWFyU3RlbmNpbChsb25nKTsKKyAgICAgICAgdm9pZCBj
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Cisg
ICAgICAgIHZvaWQgY29tcGlsZVNoYWRlcihDYW52YXNTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBl
Yyk7CisgICAgICAgIAorICAgICAgICAvL3ZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBsb25nIGJvcmRlciwg
dW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOworICAgICAgICAvL3Zv
aWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2
ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgdW5zaWduZWQgbG9uZyBmb3JtYXQsIHVuc2lnbmVkIGxvbmcgaW1h
Z2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgY29weVRl
eEltYWdlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIHVuc2lnbmVkIGxvbmcg
aW50ZXJuYWxmb3JtYXQsIGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNp
Z25lZCBsb25nIGhlaWdodCwgbG9uZyBib3JkZXIpOworICAgICAgICB2b2lkIGNvcHlUZXhTdWJJ
bWFnZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBsb25nIGxldmVsLCBsb25nIHhvZmZzZXQsIGxv
bmcgeW9mZnNldCwgbG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKKworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0J1ZmZlcj4gY3JlYXRl
QnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRnJhbWVidWZmZXI+IGNyZWF0ZUZy
YW1lYnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzUHJvZ3JhbT4gY3JlYXRlUHJv
Z3JhbSgpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1JlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVu
ZGVyYnVmZmVyKCk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBjcmVhdGVTaGFk
ZXIodW5zaWduZWQgbG9uZyB0eXBlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNUZXh0dXJl
PiBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICAgICAgdm9pZCBjdWxsRmFjZSh1bnNpZ25lZCBsb25n
IG1vZGUpOworCisgICAgICAgIHZvaWQgZGVsZXRlQnVmZmVyKENhbnZhc0J1ZmZlciopOworICAg
ICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKik7CisgICAgICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShDYW52YXNQcm9ncmFtKik7CisgICAgICAgIHZvaWQgZGVsZXRl
UmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciopOworICAgICAgICB2b2lkIGRlbGV0ZVNo
YWRlcihDYW52YXNTaGFkZXIqKTsKKyAgICAgICAgdm9pZCBkZWxldGVUZXh0dXJlKENhbnZhc1Rl
eHR1cmUqKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcp
OworICAgICAgICB2b2lkIGRlcHRoTWFzayhib29sKTsKKyAgICAgICAgdm9pZCBkZXB0aFJhbmdl
KGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOworICAgICAgICB2b2lkIGRldGFjaFNoYWRlcihD
YW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAg
ICB2b2lkIGRpc2FibGUodW5zaWduZWQgbG9uZyBjYXApOworICAgICAgICB2b2lkIGRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCBkcmF3
QXJyYXlzKHVuc2lnbmVkIGxvbmcgbW9kZSwgbG9uZyBmaXJzdCwgbG9uZyBjb3VudCk7CisgICAg
ICAgIHZvaWQgZHJhd0VsZW1lbnRzKHVuc2lnbmVkIGxvbmcgbW9kZSwgdW5zaWduZWQgbG9uZyBj
b3VudCwgdW5zaWduZWQgbG9uZyB0eXBlLCBsb25nIG9mZnNldCk7CisKKyAgICAgICAgdm9pZCBl
bmFibGUodW5zaWduZWQgbG9uZyBjYXApOworICAgICAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJp
YkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOworICAgICAgICB2b2lkIGZpbmlzaCgpOworICAg
ICAgICB2b2lkIGZsdXNoKCk7CisgICAgICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
dW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQg
bG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNv
ZGUmIGVjKTsKKyAgICAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRhcmdl
dCwgQ2FudmFzVGV4dHVyZSosIGxvbmcgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAg
ICAgdm9pZCBmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKKyAgICAgICAgdm9pZCBnZW5l
cmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxD
YW52YXNBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRyaWIoQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVk
IGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNB
Y3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25n
IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgaW50ICBnZXRBdHRyaWJMb2NhdGlv
bihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgICAgICBib29sIGdl
dEJvb2xlYW4odW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFz
VW5zaWduZWRCeXRlQXJyYXk+IGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAg
ICAgICBpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldEJ1
ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
KTsKKworICAgICAgICB1bnNpZ25lZCBsb25nIGdldEVycm9yKCk7CisKKyAgICAgICAgZmxvYXQg
Z2V0RmxvYXQodW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFz
RmxvYXRBcnJheT4gZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBpbnQg
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRJbnRlZ2VyKHVuc2lnbmVkIGxvbmcg
cG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRJbnRlZ2Vydih1
bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgaW50IGdldFByb2dyYW1pKENhbnZhc1Byb2dy
YW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiwgdW5z
aWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAg
ICAgaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRTaGFkZXJpKENhbnZhc1NoYWRlciosIHVuc2ln
bmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgUGFzc1JlZlB0cjxD
YW52YXNJbnRBcnJheT4gZ2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJJbmZv
TG9nKENhbnZhc1NoYWRlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKworICAgICAgICAvLyBUQkQK
KyAgICAgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1hdCAoR0xlbnVtIHNoYWRl
cnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2UsIEdMaW50KiBwcmVjaXNp
b24pOworCisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwgRXhj
ZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBTdHJpbmcgZ2V0U3RyaW5nKHVuc2lnbmVkIGxvbmcg
bmFtZSk7CisKKyAgICAgICAgZmxvYXQgZ2V0VGV4UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHRh
cmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxv
YXRBcnJheT4gZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVk
IGxvbmcgcG5hbWUpOworICAgICAgICBpbnQgZ2V0VGV4UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFz
SW50QXJyYXk+IGdldFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKKworICAgICAgICBmbG9hdCBnZXRVbmlmb3JtZihDYW52YXNQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0VW5pZm9ybWZ2KENhbnZhc1Byb2dyYW0qIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRp
b25Db2RlJiBlYyk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFVuaWZv
cm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYyk7CisKKyAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSos
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworCisgICAgICAgIGZsb2F0
IGdldFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFt
ZSk7CisgICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0VmVydGV4QXR0cmli
ZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGxv
bmcgZ2V0VmVydGV4QXR0cmliaSh1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBu
YW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0VmVydGV4QXR0cmli
aXYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKKyAgICAgICAg
bG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQg
bG9uZyBwbmFtZSk7CisKKyAgICAgICAgdm9pZCBoaW50KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1
bnNpZ25lZCBsb25nIG1vZGUpOworICAgICAgICBib29sIGlzQnVmZmVyKENhbnZhc0J1ZmZlciop
OworICAgICAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25lZCBsb25nIGNhcCk7CisgICAgICAgIGJv
b2wgaXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOworICAgICAgICBib29sIGlzUHJv
Z3JhbShDYW52YXNQcm9ncmFtKik7CisgICAgICAgIGJvb2wgaXNSZW5kZXJidWZmZXIoQ2FudmFz
UmVuZGVyYnVmZmVyKik7CisgICAgICAgIGJvb2wgaXNTaGFkZXIoQ2FudmFzU2hhZGVyKik7Cisg
ICAgICAgIGJvb2wgaXNUZXh0dXJlKENhbnZhc1RleHR1cmUqKTsKKyAgICAgICAgdm9pZCBsaW5l
V2lkdGgoZG91YmxlKTsKKyAgICAgICAgdm9pZCBsaW5rUHJvZ3JhbShDYW52YXNQcm9ncmFtKiwg
RXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICB2b2lkIHBpeGVsU3RvcmVpKHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGxvbmcgcGFyYW0pOworICAgICAgICB2b2lkIHBvbHlnb25PZmZzZXQoZG91Ymxl
IGZhY3RvciwgZG91YmxlIHVuaXRzKTsKKyAgICAgICAgCisgICAgICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzQXJyYXk+IHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyB0eXBlKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7
CisgICAgICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1
ZSwgYm9vbCBpbnZlcnQpOworICAgICAgICB2b2lkIHNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKyAgICAgICAgdm9pZCBz
aGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYg
ZWMpOworICAgICAgICB2b2lkIHN0ZW5jaWxGdW5jKHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyBy
ZWYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0
ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVuc2lnbmVkIGxvbmcgZnVuYywgbG9uZyByZWYsIHVuc2ln
bmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgc3RlbmNpbE1hc2sodW5zaWduZWQgbG9uZyk7
CisgICAgICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZSh1bnNpZ25lZCBsb25nIGZhY2UsIHVu
c2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgc3RlbmNpbE9wKHVuc2lnbmVkIGxvbmcg
ZmFpbCwgdW5zaWduZWQgbG9uZyB6ZmFpbCwgdW5zaWduZWQgbG9uZyB6cGFzcyk7CisgICAgICAg
IHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25n
IGZhaWwsIHVuc2lnbmVkIGxvbmcgemZhaWwsIHVuc2lnbmVkIGxvbmcgenBhc3MpOworCisgICAg
ICAgIHZvaWQgdGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNp
Z25lZCBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBi
b3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVk
IHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQg
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCBIVE1MSW1hZ2VFbGVt
ZW50KiBpbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZh
cywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHRleEltYWdlMkQodW5zaWduZWQg
dGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sCisgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmKTsKKworICAgICAgICB2b2lkIHRleFBhcmFtZXRlcmYodW5zaWduZWQgdGFyZ2V0
LCB1bnNpZ25lZCBwbmFtZSwgZmxvYXQgcGFyYW0pOworICAgICAgICB2b2lkIHRleFBhcmFtZXRl
cmkodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBwbmFtZSwgaW50IHBhcmFtKTsKKworICAgICAg
ICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhl
bHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVk
IHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNp
Z25lZCB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2
b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWdu
ZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgIHZvaWQgdGV4U3ViSW1hZ2UyRCh1bnNp
Z25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5
b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgICAgICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25l
ZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsIEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBmbGlwWSwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICAgICAgdm9pZCB1
bmlmb3JtMWYobG9uZyBsb2NhdGlvbiwgZmxvYXQgeCk7CisgICAgICAgIHZvaWQgdW5pZm9ybTFm
dihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQg
dW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMWl2
KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3Jt
MWl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgICAgICB2b2lkIHVuaWZv
cm0yZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtMmZ2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkqIHYpOworICAgICAgICB2b2lk
IHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKKyAgICAgICAg
dm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAg
dm9pZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOworICAgICAg
ICB2b2lkIHVuaWZvcm0zZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2Z2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJy
YXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYs
IGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2kobG9uZyBsb2NhdGlvbiwgaW50IHgs
IGludCB5LCBpbnQgeik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9uLCBD
YW52YXNJbnRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNpdihsb25nIGxvY2F0aW9u
LCBpbnQqIHYsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGYobG9uZyBsb2NhdGlv
biwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTRmdihsb25nIGxvY2F0aW9uLCBDYW52YXNGbG9hdEFycmF5KiB2KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CisgICAgICAg
IHZvaWQgdW5pZm9ybTRpKGxvbmcgbG9jYXRpb24sIGludCB4LCBpbnQgeSwgaW50IHosIGludCB3
KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5
KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50
IHNpemUpOworICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9v
bCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlKTsKKyAgICAgICAgdm9pZCB1bmlm
b3JtTWF0cml4MmZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUs
IGludCBzaXplKTsKKyAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24s
IGJvb2wgdHJhbnNwb3NlLCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZSk7CisgICAgICAgIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgZmxvYXQqIHZh
bHVlLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0
aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJheSogdmFsdWUpOworICAgICAgICB2
b2lkIHVuaWZvcm1NYXRyaXg0ZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0
KiB2YWx1ZSwgaW50IHNpemUpOworCisgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShDYW52YXNQcm9n
cmFtKik7CisgICAgICAgIHZvaWQgdmFsaWRhdGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qKTsKKwor
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCk7
CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KHVuc2lnbmVkIGxvbmcgaW5keCwgQ2FudmFz
RmxvYXRBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWdu
ZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZvaWQgdmVy
dGV4QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5KTsKKyAgICAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFy
cmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25n
IGluZHgsIGZsb2F0KiB2YWx1ZXMsIGludCBzaXplKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopOworICAg
ICAgICB2b2lkIHZlcnRleEF0dHJpYjNmdih1bnNpZ25lZCBsb25nIGluZHgsIENhbnZhc0Zsb2F0
QXJyYXkqIHZhbHVlcyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KHVuc2lnbmVkIGxv
bmcgaW5keCwgZmxvYXQqIHZhbHVlcywgaW50IHNpemUpOworICAgICAgICB2b2lkIHZlcnRleEF0
dHJpYjRmKHVuc2lnbmVkIGxvbmcgaW5keCwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdyk7CisgICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KHVuc2lnbmVkIGxvbmcgaW5keCwg
Q2FudmFzRmxvYXRBcnJheSogdmFsdWVzKTsKKyAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYo
dW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CisgICAgICAgIHZv
aWQgdmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5z
aWduZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwor
CisgICAgICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lk
dGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKKworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCog
Z3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KKyAg
ICAKKyAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAg
ICAgLy8gSGVscGVycyBmb3Igbm90aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cy4KKyAgICAg
ICAgdm9pZCBiZWdpblBhaW50KCk7CisgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKKyAgICAgICAg
CisgICAgICAgIHZvaWQgcmVtb3ZlT2JqZWN0KENhbnZhc09iamVjdCopOworICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgQ2FudmFzT2JqZWN0OworCisgICAgICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NPd25QdHI8
R3JhcGhpY3NDb250ZXh0M0Q+KTsKKworICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmpl
Y3QqKTsKKyAgICAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICAg
ICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgdm9pZCBjbGVhbnVwQWZ0ZXJH
cmFwaGljc0NhbGwoYm9vbCBjaGFuZ2VkKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPmNoZWNrRXJyb3IoKTsKKyAgICAgICAgICAgIGlmIChjaGFuZ2VkKQorICAgICAgICAgICAg
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICAgICAgYm9vbCBtX25lZWRz
VXBkYXRlOworICAgICAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CisgICAgICAgIC8vIEZJ
WE1FOiBJIHRoaW5rIHRoaXMgaXMgYnJva2VuIC0tIGl0IGRvZXMgbm90IGluY3JlbWVudCBhbnkK
KyAgICAgICAgLy8gcmVmZXJlbmNlIGNvdW50cywgc28gbWF5IHJlZmVyIHRvIGRlc3Ryb3llZCBv
YmplY3RzLgorICAgICAgICBIYXNoU2V0PENhbnZhc09iamVjdCo+IG1fY2FudmFzT2JqZWN0czsK
KyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA1MDYzNCkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDM2ICsyMywzNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RfaAotI2RlZmluZSBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0RfaAorI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAorI2RlZmluZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHRfaAogCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJDYW52YXNGbG9hdEFycmF5Lmgi
Ci0jaW5jbHVkZSAiQ2FudmFzSW50QXJyYXkuaCIKLSNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMRmxvYXRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdM
SW50QXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhbnZhc0FjdGl2ZUluZm87Ci1jbGFzcyBDYW52
YXNCdWZmZXI7Ci1jbGFzcyBDYW52YXNGcmFtZWJ1ZmZlcjsKLWNsYXNzIENhbnZhc09iamVjdDsK
LWNsYXNzIENhbnZhc1Byb2dyYW07Ci1jbGFzcyBDYW52YXNSZW5kZXJidWZmZXI7Ci1jbGFzcyBD
YW52YXNTaGFkZXI7Ci1jbGFzcyBDYW52YXNUZXh0dXJlOworY2xhc3MgV2ViR0xBY3RpdmVJbmZv
OworY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2Vi
R0xPYmplY3Q7CitjbGFzcyBXZWJHTFByb2dyYW07CitjbGFzcyBXZWJHTFJlbmRlcmJ1ZmZlcjsK
K2NsYXNzIFdlYkdMU2hhZGVyOworY2xhc3MgV2ViR0xUZXh0dXJlOwogY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFz
cyBXZWJLaXRDU1NNYXRyaXg7CiAKLSAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qg
OiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisgICAgY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewogICAgIHB1YmxpYzoK
LSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEPiBjcmVh
dGUoSFRNTENhbnZhc0VsZW1lbnQqKTsKLSAgICAgICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDNEKCk7CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50Kik7CisgICAgICAgIHZpcnR1YWwgfldlYkdM
UmVuZGVyaW5nQ29udGV4dCgpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02MSwxMiArNjEsMTIgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0
cml4OwogICAgICAgICBpbnQgc2l6ZUluQnl0ZXMoaW50IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVj
KTsKIAogICAgICAgICB2b2lkIGFjdGl2ZVRleHR1cmUodW5zaWduZWQgbG9uZyB0ZXh0dXJlKTsK
LSAgICAgICAgdm9pZCBhdHRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSosIENhbnZhc1NoYWRlcios
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24oQ2Fu
dmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICB2b2lkIGJpbmRCdWZmZXIodW5zaWduZWQgbG9uZyB0
YXJnZXQsIENhbnZhc0J1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAgdm9pZCBi
aW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0ZyYW1lYnVmZmVyKiwg
RXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsK
LSAgICAgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzVGV4
dHVyZSosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIHZv
aWQgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICB2b2lkIGJp
bmRCdWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29k
ZSYgZWMpOworICAgICAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBi
aW5kUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBiaW5kVGV4dHVyZSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgICAgICB2
b2lkIGJsZW5kQ29sb3IoZG91YmxlIHJlZCwgZG91YmxlIGdyZWVuLCBkb3VibGUgYmx1ZSwgZG91
YmxlIGFscGhhKTsKICAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uKHVuc2lnbmVkIGxvbmcgbW9k
ZSk7CiAgICAgICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKHVuc2lnbmVkIGxvbmcgbW9k
ZVJHQiwgdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOwpAQCAtNzQsOCArNzQsOCBAQCBjbGFzcyBX
ZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUodW5zaWduZWQg
bG9uZyBzcmNSR0IsIHVuc2lnbmVkIGxvbmcgZHN0UkdCLCB1bnNpZ25lZCBsb25nIHNyY0FscGhh
LCB1bnNpZ25lZCBsb25nIGRzdEFscGhhKTsKIAogICAgICAgICB2b2lkIGJ1ZmZlckRhdGEodW5z
aWduZWQgbG9uZyB0YXJnZXQsIGludCBzaXplLCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKLSAgICAg
ICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNBcnJheSogZGF0
YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7Ci0gICAgICAgIHZvaWQgYnVmZmVyU3ViRGF0YSh1bnNp
Z25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIENhbnZhc0FycmF5KiBkYXRhKTsKKyAgICAg
ICAgdm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEFycmF5KiBkYXRh
LCB1bnNpZ25lZCBsb25nIHVzYWdlKTsKKyAgICAgICAgdm9pZCBidWZmZXJTdWJEYXRhKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogZGF0YSk7CiAKICAgICAg
ICAgdW5zaWduZWQgbG9uZyBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0KTsKICAgICAgICAgdm9pZCBjbGVhcih1bnNpZ25lZCBsb25nIG1hc2spOwpAQCAtODMsNyAr
ODMsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIHZvaWQgY2xlYXJEZXB0aChk
b3VibGUpOwogICAgICAgICB2b2lkIGNsZWFyU3RlbmNpbChsb25nKTsKICAgICAgICAgdm9pZCBj
b2xvck1hc2soYm9vbCByZWQsIGJvb2wgZ3JlZW4sIGJvb2wgYmx1ZSwgYm9vbCBhbHBoYSk7Ci0g
ICAgICAgIHZvaWQgY29tcGlsZVNoYWRlcihDYW52YXNTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBl
Yyk7CisgICAgICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNv
ZGUmIGVjKTsKICAgICAgICAgCiAgICAgICAgIC8vdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRCh1
bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9y
ZGVyLCB1bnNpZ25lZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7CiAgICAgICAg
IC8vdm9pZCBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9u
ZyBsZXZlbCwgbG9uZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgs
IHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9u
ZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwpAQCAtOTEsMjYgKzkxLDI2IEBAIGNsYXNz
IFdlYktpdENTU01hdHJpeDsKICAgICAgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgbG9u
ZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBs
b25nIGJvcmRlcik7CiAgICAgICAgIHZvaWQgY29weVRleFN1YkltYWdlMkQodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGxvbmcgbGV2ZWwsIGxvbmcgeG9mZnNldCwgbG9uZyB5b2Zmc2V0LCBsb25nIHgs
IGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCi0g
ICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKLSAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNQcm9ncmFtPiBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICAg
ICAgUGFzc1JlZlB0cjxDYW52YXNTaGFkZXI+IGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5
cGUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CisgICAgICAg
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAg
IFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcih1bnNpZ25lZCBsb25nIHR5cGUp
OworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlVGV4dHVyZSgpOwogCiAg
ICAgICAgIHZvaWQgY3VsbEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKIAotICAgICAgICB2b2lk
IGRlbGV0ZUJ1ZmZlcihDYW52YXNCdWZmZXIqKTsKLSAgICAgICAgdm9pZCBkZWxldGVGcmFtZWJ1
ZmZlcihDYW52YXNGcmFtZWJ1ZmZlciopOwotICAgICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oQ2Fu
dmFzUHJvZ3JhbSopOwotICAgICAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihDYW52YXNSZW5k
ZXJidWZmZXIqKTsKLSAgICAgICAgdm9pZCBkZWxldGVTaGFkZXIoQ2FudmFzU2hhZGVyKik7Ci0g
ICAgICAgIHZvaWQgZGVsZXRlVGV4dHVyZShDYW52YXNUZXh0dXJlKik7CisgICAgICAgIHZvaWQg
ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7CisgICAgICAgIHZvaWQgZGVsZXRlRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciopOworICAgICAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKik7CisgICAgICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVm
ZmVyKik7CisgICAgICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKik7CisgICAgICAg
IHZvaWQgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKICAgICAgICAgCiAgICAgICAgIHZv
aWQgZGVwdGhGdW5jKHVuc2lnbmVkIGxvbmcpOwogICAgICAgICB2b2lkIGRlcHRoTWFzayhib29s
KTsKICAgICAgICAgdm9pZCBkZXB0aFJhbmdlKGRvdWJsZSB6TmVhciwgZG91YmxlIHpGYXIpOwot
ICAgICAgICB2b2lkIGRldGFjaFNoYWRlcihDYW52YXNQcm9ncmFtKiwgQ2FudmFzU2hhZGVyKiwg
RXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICB2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dy
YW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAgICAgICAgdm9pZCBkaXNh
YmxlKHVuc2lnbmVkIGxvbmcgY2FwKTsKICAgICAgICAgdm9pZCBkaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkodW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgICAgIHZvaWQgZHJhd0FycmF5cyh1bnNp
Z25lZCBsb25nIG1vZGUsIGxvbmcgZmlyc3QsIGxvbmcgY291bnQpOwpAQCAtMTIwLDg0ICsxMjAs
ODQgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICB2b2lkIGVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgICAgICB2b2lkIGZpbmlzaCgpOwog
ICAgICAgICB2b2lkIGZsdXNoKCk7Ci0gICAgICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWdu
ZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKLSAgICAgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRh
cmdldCwgQ2FudmFzVGV4dHVyZSosIGxvbmcgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAg
ICAgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIHZvaWQg
ZnJhbWVidWZmZXJUZXh0dXJlMkQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
YXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIGxvbmcg
bGV2ZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAgICAgICAgdm9pZCBmcm9udEZhY2UodW5zaWdu
ZWQgbG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcCh1bnNpZ25lZCBsb25n
IHRhcmdldCk7CiAKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBnZXRBY3Rp
dmVBdHRyaWIoQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlm
b3JtKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7
CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRyaWIoV2Vi
R0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgICAg
ICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dy
YW0qLCB1bnNpZ25lZCBsb25nIGluZGV4LCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAgICAgaW50
ICBnZXRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsK
KyAgICAgICAgaW50ICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJp
bmcmIG5hbWUpOwogCiAgICAgICAgIGJvb2wgZ2V0Qm9vbGVhbih1bnNpZ25lZCBsb25nIHBuYW1l
KTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gZ2V0Qm9vbGVh
bnYodW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheT4gZ2V0Qm9vbGVhbnYodW5zaWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAgIGlu
dCBnZXRCdWZmZXJQYXJhbWV0ZXJpKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gZ2V0QnVmZmVyUGFy
YW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAg
ICAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGdldEJ1ZmZlclBhcmFtZXRlcml2KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKIAogICAgICAgICB1bnNpZ25l
ZCBsb25nIGdldEVycm9yKCk7CiAKICAgICAgICAgZmxvYXQgZ2V0RmxvYXQodW5zaWduZWQgbG9u
ZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0RmxvYXR2
KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJh
eT4gZ2V0RmxvYXR2KHVuc2lnbmVkIGxvbmcgcG5hbWUpOwogICAgICAgICBpbnQgZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxv
bmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAgIGludCBnZXRJbnRl
Z2VyKHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFy
cmF5PiBnZXRJbnRlZ2Vydih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgaW50IGdldFBy
b2dyYW1pKENhbnZhc1Byb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lLCBFeGNlcHRpb25Db2Rl
JiBlYyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFByb2dyYW1pdihD
YW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwot
ICAgICAgICBTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coQ2FudmFzUHJvZ3JhbSosIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRJbnRlZ2Vy
dih1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgaW50IGdldFByb2dyYW1pKFdlYkdMUHJv
Z3JhbSosIHVuc2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiwgdW5z
aWduZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogICAgICAg
ICBpbnQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBs
b25nIHBuYW1lKTsKLSAgICAgICAgaW50IGdldFNoYWRlcmkoQ2FudmFzU2hhZGVyKiwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwotICAgICAgICBQYXNzUmVmUHRyPENh
bnZhc0ludEFycmF5PiBnZXRTaGFkZXJpdihDYW52YXNTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJh
eT4gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOworICAgICAgICBpbnQgZ2V0U2hhZGVyaShXZWJHTFNoYWRlciosIHVu
c2lnbmVkIGxvbmcgcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKKyAgICAgICAgUGFzc1JlZlB0
cjxXZWJHTEludEFycmF5PiBnZXRTaGFkZXJpdihXZWJHTFNoYWRlciosIHVuc2lnbmVkIGxvbmcg
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAotICAgICAgICBTdHJpbmcgZ2V0U2hhZGVySW5m
b0xvZyhDYW52YXNTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFN0cmluZyBn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYgZWMpOwogCiAgICAg
ICAgIC8vIFRCRAogICAgICAgICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IChH
TGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdMaW50KiByYW5nZSwgR0xp
bnQqIHByZWNpc2lvbik7CiAKLSAgICAgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShDYW52YXNT
aGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3Vy
Y2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJiBlYyk7CiAgICAgICAgIFN0cmluZyBnZXRT
dHJpbmcodW5zaWduZWQgbG9uZyBuYW1lKTsKIAogICAgICAgICBmbG9hdCBnZXRUZXhQYXJhbWV0
ZXJmKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAg
UGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NSZWZQdHI8V2Vi
R0xGbG9hdEFycmF5PiBnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5z
aWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAgIGludCBnZXRUZXhQYXJhbWV0ZXJpKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgUGFzc1JlZlB0cjxD
YW52YXNJbnRBcnJheT4gZ2V0VGV4UGFyYW1ldGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGdl
dFRleFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1l
KTsKIAotICAgICAgICBmbG9hdCBnZXRVbmlmb3JtZihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzRmxvYXRBcnJheT4gZ2V0VW5pZm9ybWZ2KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcg
bG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKLSAgICAgICAgbG9uZyBnZXRVbmlmb3JtaShD
YW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7
Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFVuaWZvcm1pdihDYW52YXNQ
cm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYyk7CisgICAg
ICAgIGZsb2F0IGdldFVuaWZvcm1mKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlv
biwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJh
eT4gZ2V0VW5pZm9ybWZ2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBsb25nIGdldFVuaWZvcm1pKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgbG9uZyBsb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICBQYXNz
UmVmUHRyPFdlYkdMSW50QXJyYXk+IGdldFVuaWZvcm1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0s
IGxvbmcgbG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAotICAgICAgICBsb25nIGdldFVu
aWZvcm1Mb2NhdGlvbihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYyk7CisgICAgICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpOwogCiAgICAgICAgIGZs
b2F0IGdldFZlcnRleEF0dHJpYmYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBw
bmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0VmVydGV4QXR0
cmliZnYodW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAg
IFBhc3NSZWZQdHI8V2ViR0xGbG9hdEFycmF5PiBnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKICAgICAgICAgbG9uZyBnZXRWZXJ0ZXhB
dHRyaWJpKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAg
ICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBs
b25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJH
TEludEFycmF5PiBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25l
ZCBsb25nIHBuYW1lKTsKIAogICAgICAgICBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldCh1bnNp
Z25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKIAogICAgICAgICB2b2lkIGhp
bnQodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgICAgIGJv
b2wgaXNCdWZmZXIoQ2FudmFzQnVmZmVyKik7CisgICAgICAgIGJvb2wgaXNCdWZmZXIoV2ViR0xC
dWZmZXIqKTsKICAgICAgICAgYm9vbCBpc0VuYWJsZWQodW5zaWduZWQgbG9uZyBjYXApOwotICAg
ICAgICBib29sIGlzRnJhbWVidWZmZXIoQ2FudmFzRnJhbWVidWZmZXIqKTsKLSAgICAgICAgYm9v
bCBpc1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSopOwotICAgICAgICBib29sIGlzUmVuZGVyYnVmZmVy
KENhbnZhc1JlbmRlcmJ1ZmZlciopOwotICAgICAgICBib29sIGlzU2hhZGVyKENhbnZhc1NoYWRl
ciopOwotICAgICAgICBib29sIGlzVGV4dHVyZShDYW52YXNUZXh0dXJlKik7CisgICAgICAgIGJv
b2wgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgICAgIGJvb2wgaXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSopOworICAgICAgICBib29sIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVu
ZGVyYnVmZmVyKik7CisgICAgICAgIGJvb2wgaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICAg
ICAgYm9vbCBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7CiAgICAgICAgIHZvaWQgbGluZVdpZHRo
KGRvdWJsZSk7Ci0gICAgICAgIHZvaWQgbGlua1Byb2dyYW0oQ2FudmFzUHJvZ3JhbSosIEV4Y2Vw
dGlvbkNvZGUmIGVjKTsKKyAgICAgICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBF
eGNlcHRpb25Db2RlJiBlYyk7CiAgICAgICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9u
ZyBwbmFtZSwgbG9uZyBwYXJhbSk7CiAgICAgICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUg
ZmFjdG9yLCBkb3VibGUgdW5pdHMpOwogICAgICAgICAKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52
YXNBcnJheT4gcmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHR5cGUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHJlYWRQaXhlbHMobG9uZyB4
LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNp
Z25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKTsKICAgICAgICAgCiAgICAgICAg
IHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7CiAgICAgICAgIHZvaWQgcmVuZGVyYnVmZmVy
U3RvcmFnZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAgICB2
b2lkIHNhbXBsZUNvdmVyYWdlKGRvdWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOwogICAgICAgICB2
b2lkIHNjaXNzb3IobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0KTsKLSAgICAgICAgdm9pZCBzaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwg
Y29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYgZWMpOworICAgICAgICB2b2lkIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKICAg
ICAgICAgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNp
Z25lZCBsb25nIG1hc2spOwogICAgICAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUodW5zaWdu
ZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1bnNpZ25lZCBsb25n
IG1hc2spOwogICAgICAgICB2b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxvbmcpOwpAQCAtMjA3
LDcgKzIwNyw3IEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKIAogICAgICAgICB2b2lkIHRleElt
YWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxm
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
aGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQg
dHlwZSwgV2ViR0xBcnJheSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CiAgICAgICAgIHZvaWQg
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRl
cm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQsIHVuc2lnbmVkIGJvcmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmKTsKQEAgLTIyMyw3ICsyMjMsNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAKICAg
ICAgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWws
IHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBDYW52YXNBcnJheSog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIFdlYkdMQXJyYXkqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYpOwogICAgICAgICB2b2lkIHRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNp
Z25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9mZnNldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIElt
YWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CkBAIC0yMzgsNTAgKzIzOCw1MCBAQCBj
bGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGZs
aXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgICAgICB2
b2lkIHVuaWZvcm0xZihsb25nIGxvY2F0aW9uLCBmbG9hdCB4KTsKLSAgICAgICAgdm9pZCB1bmlm
b3JtMWZ2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0QXJyYXkqIHYpOworICAgICAgICB2b2lk
IHVuaWZvcm0xZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xGbG9hdEFycmF5KiB2KTsKICAgICAgICAg
dm9pZCB1bmlmb3JtMWZ2KGxvbmcgbG9jYXRpb24sIGZsb2F0KiB2LCBpbnQgc2l6ZSk7CiAgICAg
ICAgIHZvaWQgdW5pZm9ybTFpKGxvbmcgbG9jYXRpb24sIGludCB4KTsKLSAgICAgICAgdm9pZCB1
bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtMWl2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwogICAgICAgICB2
b2lkIHVuaWZvcm0xaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7CiAgICAgICAg
IHZvaWQgdW5pZm9ybTJmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgsIGZsb2F0IHkpOwotICAgICAg
ICB2b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgQ2FudmFzRmxvYXRBcnJheSogdik7Cisg
ICAgICAgIHZvaWQgdW5pZm9ybTJmdihsb25nIGxvY2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYp
OwogICAgICAgICB2b2lkIHVuaWZvcm0yZnYobG9uZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBz
aXplKTsKICAgICAgICAgdm9pZCB1bmlmb3JtMmkobG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5
KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5
KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMml2KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJy
YXkqIHYpOwogICAgICAgICB2b2lkIHVuaWZvcm0yaXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBp
bnQgc2l6ZSk7CiAgICAgICAgIHZvaWQgdW5pZm9ybTNmKGxvbmcgbG9jYXRpb24sIGZsb2F0IHgs
IGZsb2F0IHksIGZsb2F0IHopOwotICAgICAgICB2b2lkIHVuaWZvcm0zZnYobG9uZyBsb2NhdGlv
biwgQ2FudmFzRmxvYXRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmdihsb25nIGxv
Y2F0aW9uLCBXZWJHTEZsb2F0QXJyYXkqIHYpOwogICAgICAgICB2b2lkIHVuaWZvcm0zZnYobG9u
ZyBsb2NhdGlvbiwgZmxvYXQqIHYsIGludCBzaXplKTsKICAgICAgICAgdm9pZCB1bmlmb3JtM2ko
bG9uZyBsb2NhdGlvbiwgaW50IHgsIGludCB5LCBpbnQgeik7Ci0gICAgICAgIHZvaWQgdW5pZm9y
bTNpdihsb25nIGxvY2F0aW9uLCBDYW52YXNJbnRBcnJheSogdik7CisgICAgICAgIHZvaWQgdW5p
Zm9ybTNpdihsb25nIGxvY2F0aW9uLCBXZWJHTEludEFycmF5KiB2KTsKICAgICAgICAgdm9pZCB1
bmlmb3JtM2l2KGxvbmcgbG9jYXRpb24sIGludCogdiwgaW50IHNpemUpOwogICAgICAgICB2b2lk
IHVuaWZvcm00Zihsb25nIGxvY2F0aW9uLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9h
dCB3KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIENhbnZhc0Zsb2F0
QXJyYXkqIHYpOworICAgICAgICB2b2lkIHVuaWZvcm00ZnYobG9uZyBsb2NhdGlvbiwgV2ViR0xG
bG9hdEFycmF5KiB2KTsKICAgICAgICAgdm9pZCB1bmlmb3JtNGZ2KGxvbmcgbG9jYXRpb24sIGZs
b2F0KiB2LCBpbnQgc2l6ZSk7CiAgICAgICAgIHZvaWQgdW5pZm9ybTRpKGxvbmcgbG9jYXRpb24s
IGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKLSAgICAgICAgdm9pZCB1bmlmb3JtNGl2KGxv
bmcgbG9jYXRpb24sIENhbnZhc0ludEFycmF5KiB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtNGl2
KGxvbmcgbG9jYXRpb24sIFdlYkdMSW50QXJyYXkqIHYpOwogICAgICAgICB2b2lkIHVuaWZvcm00
aXYobG9uZyBsb2NhdGlvbiwgaW50KiB2LCBpbnQgc2l6ZSk7Ci0gICAgICAgIHZvaWQgdW5pZm9y
bU1hdHJpeDJmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgQ2FudmFzRmxvYXRBcnJh
eSogdmFsdWUpOworICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwg
Ym9vbCB0cmFuc3Bvc2UsIFdlYkdMRmxvYXRBcnJheSogdmFsdWUpOwogICAgICAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyZnYobG9uZyBsb2NhdGlvbiwgYm9vbCB0cmFuc3Bvc2UsIGZsb2F0KiB2YWx1
ZSwgaW50IHNpemUpOwotICAgICAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYobG9uZyBsb2NhdGlv
biwgYm9vbCB0cmFuc3Bvc2UsIENhbnZhc0Zsb2F0QXJyYXkqIHZhbHVlKTsKKyAgICAgICAgdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBXZWJHTEZs
b2F0QXJyYXkqIHZhbHVlKTsKICAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxvbmcgbG9j
YXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKLSAgICAgICAg
dm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBDYW52
YXNGbG9hdEFycmF5KiB2YWx1ZSk7CisgICAgICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihsb25n
IGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwgV2ViR0xGbG9hdEFycmF5KiB2YWx1ZSk7CiAgICAg
ICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihsb25nIGxvY2F0aW9uLCBib29sIHRyYW5zcG9zZSwg
ZmxvYXQqIHZhbHVlLCBpbnQgc2l6ZSk7CiAKLSAgICAgICAgdm9pZCB1c2VQcm9ncmFtKENhbnZh
c1Byb2dyYW0qKTsKLSAgICAgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oQ2FudmFzUHJvZ3JhbSop
OworICAgICAgICB2b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgICAgIHZvaWQg
dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSopOwogCiAgICAgICAgIHZvaWQgdmVydGV4QXR0
cmliMWYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZXMpOwor
ICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIFdlYkdMRmxv
YXRBcnJheSogdmFsdWVzKTsKICAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYodW5zaWduZWQg
bG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CiAgICAgICAgIHZvaWQgdmVydGV4
QXR0cmliMmYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5KTsKLSAgICAgICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIyZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5
KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjJmdih1bnNpZ25lZCBsb25nIGlu
ZHgsIFdlYkdMRmxvYXRBcnJheSogdmFsdWVzKTsKICAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIy
ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CiAgICAgICAg
IHZvaWQgdmVydGV4QXR0cmliM2YodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6KTsKLSAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBp
bmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJp
YjNmdih1bnNpZ25lZCBsb25nIGluZHgsIFdlYkdMRmxvYXRBcnJheSogdmFsdWVzKTsKICAgICAg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYodW5zaWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVz
LCBpbnQgc2l6ZSk7CiAgICAgICAgIHZvaWQgdmVydGV4QXR0cmliNGYodW5zaWduZWQgbG9uZyBp
bmR4LCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6LCBmbG9hdCB3KTsKLSAgICAgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZnYodW5zaWduZWQgbG9uZyBpbmR4LCBDYW52YXNGbG9hdEFycmF5KiB2YWx1
ZXMpOworICAgICAgICB2b2lkIHZlcnRleEF0dHJpYjRmdih1bnNpZ25lZCBsb25nIGluZHgsIFdl
YkdMRmxvYXRBcnJheSogdmFsdWVzKTsKICAgICAgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYodW5z
aWduZWQgbG9uZyBpbmR4LCBmbG9hdCogdmFsdWVzLCBpbnQgc2l6ZSk7CiAgICAgICAgIHZvaWQg
dmVydGV4QXR0cmliUG9pbnRlcih1bnNpZ25lZCBsb25nIGluZHgsIGxvbmcgc2l6ZSwgdW5zaWdu
ZWQgbG9uZyB0eXBlLCBib29sIG5vcm1hbGl6ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIHN0cmlkZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpOwpAQCAt
Mjk2LDE0ICsyOTYsMTQgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgICAgICB2b2lkIGJl
Z2luUGFpbnQoKTsKICAgICAgICAgdm9pZCBlbmRQYWludCgpOwogICAgICAgICAKLSAgICAgICAg
dm9pZCByZW1vdmVPYmplY3QoQ2FudmFzT2JqZWN0Kik7CisgICAgICAgIHZvaWQgcmVtb3ZlT2Jq
ZWN0KFdlYkdMT2JqZWN0Kik7CiAgICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVu
ZCBjbGFzcyBDYW52YXNPYmplY3Q7CisgICAgICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsK
IAotICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QoSFRNTENhbnZhc0VsZW1lbnQqLCBQ
YXNzT3duUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsK
IAotICAgICAgICB2b2lkIGFkZE9iamVjdChDYW52YXNPYmplY3QqKTsKKyAgICAgICAgdm9pZCBh
ZGRPYmplY3QoV2ViR0xPYmplY3QqKTsKICAgICAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxP
YmplY3RzKCk7CiAKICAgICAgICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKQEAgLTMxOSw3
ICszMTksNyBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgICAgIGJvb2wgbV9tYXJrZWRD
YW52YXNEaXJ0eTsKICAgICAgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhpcyBpcyBicm9rZW4gLS0g
aXQgZG9lcyBub3QgaW5jcmVtZW50IGFueQogICAgICAgICAvLyByZWZlcmVuY2UgY291bnRzLCBz
byBtYXkgcmVmZXIgdG8gZGVzdHJveWVkIG9iamVjdHMuCi0gICAgICAgIEhhc2hTZXQ8Q2FudmFz
T2JqZWN0Kj4gbV9jYW52YXNPYmplY3RzOworICAgICAgICBIYXNoU2V0PFdlYkdMT2JqZWN0Kj4g
bV9jYW52YXNPYmplY3RzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHJldmlz
aW9uIDUwNjM0KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRC5pZGw6NTA2MzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2ODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCittb2R1
bGUgaHRtbCB7CisKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBDb25kaXRpb25hbD0zRF9DQU5W
QVMsCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3IsCisgICAgICAgIEludGVyZmFjZVVVSUQ9
OThmYjQ4YWUtNzIxNi00ODljLTg2MmItOGUxMjE3ZmM0NDQzLAorICAgICAgICBJbXBsZW1lbnRh
dGlvblVVSUQ9YWI0ZjA3ODEtMTUyZi00NTBlLTk1NDYtNWIzOTg3NDkxYTU0CisgICAgXSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKKworICAgICAg
ICAvKiBDbGVhckJ1ZmZlck1hc2sgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRI
X0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBTVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAgPSAweDAwMDAwNDAwOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ09MT1JfQlVGRkVSX0JJVCAgICAgICAgICAgICAg
ID0gMHgwMDAwNDAwMDsKKworICAgICAgICAvKiBCb29sZWFuICovCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBGQUxTRSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKKwor
ICAgICAgICAvKiBCZWdpbk1vZGUgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFBPSU5U
UyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IExJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExJTkVfU1RSSVAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDAwMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRSSUFOR0xFUyAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRS
SUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9IDB4MDAwNjsKKworICAg
ICAgICAvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGluIEVTMjApICovCisgICAgICAg
IC8qICAgICAgTkVWRVIgKi8KKyAgICAgICAgLyogICAgICBMRVNTICovCisgICAgICAgIC8qICAg
ICAgRVFVQUwgKi8KKyAgICAgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAgICAgLyogICAgICBH
UkVBVEVSICovCisgICAgICAgIC8qICAgICAgTk9URVFVQUwgKi8KKyAgICAgICAgLyogICAgICBH
RVFVQUwgKi8KKyAgICAgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgICAgICAvKiBCbGVuZGlu
Z0ZhY3RvckRlc3QgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFpFUk8gICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBPTkUgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
U1JDX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1JDX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMzAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgT05FX01JTlVTX1NSQ19BTFBIQSAg
ICAgICAgICAgID0gMHgwMzAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRFNUX0FMUEhB
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgID0gMHgwMzA1OworCisgICAgICAgIC8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCisgICAgICAgIC8qICAgICAgWkVSTyAqLworICAgICAgICAv
KiAgICAgIE9ORSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRFNUX0NPTE9SICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMzA2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgT05F
X01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgID0gMHgwMzA4OworICAgICAg
ICAvKiAgICAgIFNSQ19BTFBIQSAqLworICAgICAgICAvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQ
SEEgKi8KKyAgICAgICAgLyogICAgICBEU1RfQUxQSEEgKi8KKyAgICAgICAgLyogICAgICBPTkVf
TUlOVVNfRFNUX0FMUEhBICovCisKKyAgICAgICAgLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICov
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDgwMDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBCTEVORF9FUVVBVElPTiAg
ICAgICAgICAgICAgICAgPSAweDgwMDk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBCTEVO
RF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9F
UVVBVElPTiAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQkxFTkRfRVFVQVRJT05fQUxQ
SEEgICAgICAgICAgID0gMHg4ODNEOworCisgICAgICAgIC8qIEJsZW5kU3VidHJhY3QgKi8KKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9
IDB4ODAwQTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZVTkNfUkVWRVJTRV9TVUJUUkFD
VCAgICAgICAgICA9IDB4ODAwQjsKKworICAgICAgICAvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlv
bnMgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJMRU5EX0RTVF9SR0IgICAgICAgICAg
ICAgICAgICA9IDB4ODBDODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJMRU5EX1NSQ19S
R0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IEJMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA9
IDB4ODAwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE9ORV9NSU5VU19DT05TVEFOVF9D
T0xPUiAgICAgICA9IDB4ODAwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENPTlNUQU5U
X0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4ODAwNDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEJMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAgICA9IDB4ODAwNTsK
KworICAgICAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgQVJSQVlfQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4ODkyOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIgICAgICAgICAgID0gMHg4ODkzOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ID0gMHg4ODk0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRUxFTUVOVF9BUlJBWV9CVUZG
RVJfQklORElORyAgID0gMHg4ODk1OworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBTVFJF
QU1fRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTA7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4
RTg7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJVRkZFUl9TSVpFICAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEJVRkZFUl9VU0FH
RSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4NjI2OworCisgICAgICAgIC8q
IEN1bGxGYWNlTW9kZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJPTlQgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
QkFDSyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgRlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgID0gMHgwNDA4OworCisg
ICAgICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAgICAgLyogICAgICBORVZFUiAqLworICAg
ICAgICAvKiAgICAgIExFU1MgKi8KKyAgICAgICAgLyogICAgICBFUVVBTCAqLworICAgICAgICAv
KiAgICAgIExFUVVBTCAqLworICAgICAgICAvKiAgICAgIEdSRUFURVIgKi8KKyAgICAgICAgLyog
ICAgICBOT1RFUVVBTCAqLworICAgICAgICAvKiAgICAgIEdFUVVBTCAqLworICAgICAgICAvKiAg
ICAgIEFMV0FZUyAqLworCisgICAgICAgIC8qIEVuYWJsZUNhcCAqLworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgID0gMHgwREUxOworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQjQ0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQkxFTkQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwQkUyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRElUSEVSICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkQwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQjkwOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAg
ID0gMHgwQzExOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUE9MWUdPTl9PRkZTRVRfRklM
TCAgICAgICAgICAgID0gMHg4MDM3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0FNUExF
X0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4MEEwOworCisgICAgICAg
IC8qIEVycm9yQ29kZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTk9fRVJST1IgICAg
ICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IElOVkFM
SURfRU5VTSAgICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IElOVkFMSURfVkFMVUUgICAgICAgICAgICAgICAgICA9IDB4MDUwMTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUw
MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE9VVF9PRl9NRU1PUlkgICAgICAgICAgICAg
ICAgICA9IDB4MDUwNTsKKworICAgICAgICAvKiBGcm9udEZhY2VEaXJlY3Rpb24gKi8KKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDkwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IENDVyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDkwMTsKKworICAgICAgICAvKiBHZXRQTmFtZSAqLworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAg
ID0gMHg4NDZEOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFICAgICAgID0gMHg4NDZFOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ1VMTF9G
QUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ2OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHgwQjcw
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAg
ICAgID0gMHgwQjcyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVQVEhfQ0xFQVJfVkFM
VUUgICAgICAgICAgICAgID0gMHgwQjczOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVQ
VEhfRlVOQyAgICAgICAgICAgICAgICAgICAgID0gMHgwQjc0OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgw
QjkyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9GQUlMICAgICAgICAgICAg
ICAgICAgID0gMHgwQjk0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
U1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgwQjk2OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAgID0gMHgwQjk3OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgID0g
MHgwQjkzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9XUklURU1BU0sgICAg
ICAgICAgICAgID0gMHgwQjk4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9C
QUNLX0ZVTkMgICAgICAgICAgICAgID0gMHg4ODAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCAgID0gMHg4ODAyOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUyAg
ID0gMHg4ODAzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9CQUNLX1JFRiAg
ICAgICAgICAgICAgID0gMHg4Q0EzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJ
TF9CQUNLX1ZBTFVFX01BU0sgICAgICAgID0gMHg4Q0E0OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyAgICAgICAgID0gMHg4Q0E1OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEy
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0NJU1NPUl9CT1ggICAgICAgICAgICAgICAg
ICAgID0gMHgwQzEwOworICAgICAgICAvKiAgICAgIFNDSVNTT1JfVEVTVCAqLworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIy
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAg
ICAgID0gMHgwQzIzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVU5QQUNLX0FMSUdOTUVO
VCAgICAgICAgICAgICAgID0gMHgwQ0Y1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUEFD
S19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAgID0gMHgwRDMzOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAgICAgICAgID0gMHgw
RDNBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1VCUElYRUxfQklUUyAgICAgICAgICAg
ICAgICAgID0gMHgwRDUwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkVEX0JJVFMgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwRDUyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
R1JFRU5fQklUUyAgICAgICAgICAgICAgICAgICAgID0gMHgwRDUzOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQUxQSEFfQklUUyAgICAgICAgICAgICAgICAgICAgID0g
MHgwRDU1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVQVEhfQklUUyAgICAgICAgICAg
ICAgICAgICAgID0gMHgwRDU2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9C
SVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgUE9MWUdPTl9PRkZTRVRfVU5JVFMgICAgICAgICAgID0gMHgyQTAwOworICAgICAgICAvKiAg
ICAgIFBPTFlHT05fT0ZGU0VUX0ZJTEwgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAgICA9IDB4ODA2OTsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRV9CVUZGRVJTICAgICAgICAgICAgICAgICA9IDB4
ODBBODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRVMgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODBBOTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNBTVBMRV9DT1ZF
UkFHRV9WQUxVRSAgICAgICAgICA9IDB4ODBBQTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQgICAgICAgICA9IDB4ODBBQjsKKworICAgICAgICAvKiBH
ZXRUZXh0dXJlUGFyYW1ldGVyICovCisgICAgICAgIC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVS
ICovCisgICAgICAgIC8qICAgICAgVEVYVFVSRV9NSU5fRklMVEVSICovCisgICAgICAgIC8qICAg
ICAgVEVYVFVSRV9XUkFQX1MgKi8KKyAgICAgICAgLyogICAgICBURVhUVVJFX1dSQVBfVCAqLwor
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFMgPSAweDg2QTI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBDT01QUkVTU0VEX1RFWFRV
UkVfRk9STUFUUyAgICAgPSAweDg2QTM7CisKKyAgICAgICAgLyogSGludE1vZGUgKi8KKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZBU1RFU1QgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MTEwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE5JQ0VTVCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworICAgICAgICAvKiBIaW50VGFyZ2V0ICov
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBHRU5FUkFURV9NSVBNQVBfSElOVCAgICAgICAg
ICAgID0gMHg4MTkyOworCisgICAgICAgIC8qIERhdGFUeXBlICovCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBCWVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDA7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgPSAw
eDE0MDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBTSE9SVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBVTlNJR05FRF9T
SE9SVCAgICAgICAgICAgICAgICAgPSAweDE0MDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDQ7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0MDU7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDE0MDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGSVhFRCAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE0MEM7CisKKyAgICAgICAgLyogUGl4ZWxGb3JtYXQgKi8KKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4
MTkwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFMUEhBICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MTkwNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFJHQiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IExVTUlOQU5DRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwOTsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IExVTUlOQU5DRV9BTFBIQSAgICAgICAgICAgICAgICA9
IDB4MTkwQTsKKworICAgICAgICAvKiBQaXhlbFR5cGUgKi8KKyAgICAgICAgLyogICAgICBVTlNJ
R05FRF9CWVRFICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBVTlNJR05FRF9TSE9SVF80
XzRfNF80ICAgICAgICAgPSAweDgwMzM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBVTlNJ
R05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBVTlNJR05FRF9TSE9SVF81XzZfNSAgICAgICAgICAgPSAweDgzNjM7CisKKyAgICAg
ICAgLyogU2hhZGVycyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJBR01FTlRfU0hB
REVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA9IDB4OEIzMTsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAgICAgID0gMHg4ODY5
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMg
ICAgICAgPSAweDhERkI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBNQVhfVkFSWUlOR19W
RUNUT1JTICAgICAgICAgICAgICA9IDB4OERGQzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTID0gMHg4QjREOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUyAgICAg
ICAgICA9IDB4ODg3MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMgICAgID0gMHg4REZEOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
U0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBERUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MDsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjgyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVkFMSURBVEVfU1RBVFVT
ICAgICAgICAgICAgICAgICAgPSAweDhCODM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBB
VFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgID0gMHg4Qjg2Owor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCAgICAg
ICAgPSAweDhCODc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBBQ1RJVkVfQVRUUklCVVRF
UyAgICAgICAgICAgICAgICA9IDB4OEI4OTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFD
VElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSCAgICAgID0gMHg4QjhBOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgPSAweDhCOEM7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBDVVJSRU5UX1BST0dSQU0gICAgICAgICAgICAgICAg
ICA9IDB4OEI4RDsKKworICAgICAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi8KKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExFU1MgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwMTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEVRVUFMICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDIwMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExFUVVB
TCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIw
NTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEdFUVVBTCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDIwNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEFMV0FZUyAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwNzsKKworICAgICAgICAvKiBTdGVuY2lsT3AgKi8KKyAg
ICAgICAgLyogICAgICBaRVJPICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBLRUVQICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTlZFUlQgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE1MEE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBJTkNS
X1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDg7CisKKyAgICAg
ICAgLyogU3RyaW5nTmFtZSAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVkVORE9SICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgVkVSU0lPTiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAyOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRVhURU5TSU9OUyAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRjAzOworCisgICAgICAgIC8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IE5FQVJFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMDsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MjYwMTsKKworICAgICAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovCisgICAgICAgIC8q
ICAgICAgTkVBUkVTVCAqLworICAgICAgICAvKiAgICAgIExJTkVBUiAqLworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAg
ID0gMHgyNzAxOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTkVBUkVTVF9NSVBNQVBfTElO
RUFSICAgICAgICAgID0gMHgyNzAyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTElORUFS
X01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOworCisgICAgICAgIC8qIFRleHR1cmVQ
YXJhbWV0ZXJOYW1lICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFX01BR19G
SUxURVIgICAgICAgICAgICAgPSAweDI4MDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBU
RVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4MDE7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFX1dSQVBfVCAgICAgICAgICAgICAgICAgPSAw
eDI4MDM7CisKKyAgICAgICAgLyogVGV4dHVyZVRhcmdldCAqLworICAgICAgICAvKiAgICAgIFRF
WFRVUkVfMkQgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFRFWFRVUkUgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTcwMjsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVY
VFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YICAgID0gMHg4
NTE1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YICAgID0gMHg4NTE2OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZICAgID0gMHg4NTE4OworICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0g
MHg4NTFBOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTUFYX0NVQkVfTUFQX1RFWFRVUkVf
U0laRSAgICAgID0gMHg4NTFDOworCisgICAgICAgIC8qIFRleHR1cmVVbml0ICovCisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
QzA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMSAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0QzE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMiAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBU
RVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBURVhUVVJFNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzQ7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0QzU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFNiAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFNyAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTAgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Q0E7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTEgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0Q0I7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJF
MTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBURVhUVVJFMTMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Q7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0Y7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTYgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0RDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhU
VVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDI7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0RDQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjEgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBU
RVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7CisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDg7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjUgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjYg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBURVhUVVJFMjcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAgPSAweDg0REM7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJFMzAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0REU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBURVhUVVJF
MzEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgPSAweDg0RTA7CisKKyAgICAgICAg
LyogVGV4dHVyZVdyYXBNb2RlICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRVBFQVQg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgPSAweDgzNzA7
CisKKyAgICAgICAgLyogVW5pZm9ybSBUeXBlcyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRkxPQVRfVkVDNCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5UX1ZFQzIgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjUzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5UX1ZF
QzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgSU5UX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQk9PTF9WRUMyICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjU3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQk9PTF9WRUMzICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjU4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgQk9P
TF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVBOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVCOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRkxPQVRfTUFUNCAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjVDOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0FNUExFUl8yRCAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjVFOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
U0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOworCisgICAgICAgIC8qIFZl
cnRleCBBcnJheXMgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBWRVJURVhfQVRUUklCX0FSUkFZX1NJWkUgICAgICAgICAgID0gMHg4NjIzOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4
ODYyNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQ
RSAgICAgICAgICAgPSAweDg2MjU7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBWRVJURVhf
QVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgID0gMHg4ODZBOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
TkcgPSAweDg4OUY7CisKKyAgICAgICAgLyogUmVhZCBGb3JtYXQgKi8KKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRSAgID0gMHg4QjlBOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQgPSAweDhCOUI7CisKKyAgICAgICAgLyogU2hhZGVyIFNvdXJjZSAqLworICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgQ09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOwor
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5GT19MT0dfTEVOR1RIICAgICAgICAgICAgICAg
ID0gMHg4Qjg0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0hBREVSX1NPVVJDRV9MRU5H
VEggICAgICAgICAgID0gMHg4Qjg4OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgU0hBREVS
X0NPTVBJTEVSICAgICAgICAgICAgICAgID0gMHg4REZBOworCisgICAgICAgIC8qIFNoYWRlciBC
aW5hcnkgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFNIQURFUl9CSU5BUllfRk9STUFU
UyAgICAgICAgICA9IDB4OERGODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE5VTV9TSEFE
RVJfQklOQVJZX0ZPUk1BVFMgICAgICA9IDB4OERGOTsKKworICAgICAgICAvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTE9X
X0ZMT0FUICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgID0gMHg4
REYyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTE9XX0lOVCAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4REYzOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgTUVESVVNX0lOVCAg
ICAgICAgICAgICAgICAgICAgID0gMHg4REY0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
SElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OworCisgICAgICAgIC8qIEZy
YW1lYnVmZmVyIE9iamVjdC4gKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworICAgICAgICBj
b25zdCB1bnNpZ25lZCBpbnQgUkdCQTQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU2
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkdCNV9BMSAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4MDU3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgUkdCNTY1ICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4RDYyOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgREVQ
VEhfQ09NUE9ORU5UMTYgICAgICAgICAgICAgID0gMHg4MUE1OworICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4
RDQ4OworCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVJfV0lEVEggICAg
ICAgICAgICAgPSAweDhENDI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZG
RVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgPSAweDhENDQ7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhENTA7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAg
PSAweDhENTE7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVJfQkxVRV9T
SVpFICAgICAgICAgPSAweDhENTI7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBSRU5ERVJC
VUZGRVJfQUxQSEFfU0laRSAgICAgICAgPSAweDhENTM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgPSAweDhENTU7
CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Cisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVf
TEVWRUwgICAgICAgICA9IDB4OENEMjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAw
eDhDRTA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBERVBUSF9BVFRBQ0hNRU5UICAgICAg
ICAgICAgICAgPSAweDhEMDA7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBTVEVOQ0lMX0FU
VEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IE5PTkUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0g
MHg4Q0Q1OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENENzsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5TSU9O
UyAgICAgICAgID0gMHg4Q0Q5OworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgRlJBTUVCVUZG
RVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IEZSQU1FQlVGRkVSX0JJTkRJTkcgICAgICAgICAgICA9IDB4OENBNjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAg
ICA9IDB4OENBNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IE1BWF9SRU5ERVJCVUZGRVJf
U0laRSAgICAgICAgICA9IDB4ODRFODsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgSU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gID0gMHgwNTA2OworCisgICAgICAgIGxvbmcgc2l6
ZUluQnl0ZXMoaW4gdW5zaWduZWQgbG9uZyB0eXBlKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKwor
ICAgICAgICB2b2lkICAgICAgICAgYWN0aXZlVGV4dHVyZShpbiB1bnNpZ25lZCBsb25nIHRleHR1
cmUpOworICAgICAgICB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKGluIENhbnZhc1Byb2dyYW0g
cHJvZ3JhbSwgaW4gQ2FudmFzU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Cisg
ICAgICAgIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oaW4gQ2FudmFzUHJvZ3JhbSBw
cm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBET01TdHJpbmcgbmFtZSkgcmFpc2Vz
KERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKGluIHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCBpbiBDYW52YXNCdWZmZXIgYnVmZmVyKSByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCwgaW4gQ2FudmFzRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihpbiB1bnNp
Z25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShpbiB1
bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzVGV4dHVyZSB0ZXh0dXJlKSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kQ29sb3IoaW4gZG91YmxlIHJl
ZCwgaW4gZG91YmxlIGdyZWVuLCBpbiBkb3VibGUgYmx1ZSwgaW4gZG91YmxlIGFscGhhKTsKKyAg
ICAgICAgdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oIGluIHVuc2lnbmVkIGxvbmcgbW9kZSAp
OworICAgICAgICB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKGluIHVuc2lnbmVk
IGxvbmcgbW9kZVJHQiwgaW4gdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEpOworICAgICAgICB2b2lk
ICAgICAgICAgYmxlbmRGdW5jKGluIHVuc2lnbmVkIGxvbmcgc2ZhY3RvciwgaW4gdW5zaWduZWQg
bG9uZyBkZmFjdG9yKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKGlu
IHVuc2lnbmVkIGxvbmcgc3JjUkdCLCBpbiB1bnNpZ25lZCBsb25nIGRzdFJHQiwgaW4gdW5zaWdu
ZWQgbG9uZyBzcmNBbHBoYSwgaW4gdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7CisgICAgICAgIC8v
IFN1cHBvcnRlZCBmb3JtczoKKyAgICAgICAgLy8gICB2b2lkIGJ1ZmZlckRhdGEgKGluIEdMZW51
bSB0YXJnZXQsIGluIEdMc2l6ZWkgc2l6ZSwgaW4gR0xlbnVtIHVzYWdlKTsKKyAgICAgICAgLy8g
ICB2b2lkIGJ1ZmZlckRhdGEgKGluIEdMZW51bSB0YXJnZXQsIGluIENhbnZhc0FycmF5IGRhdGEs
IGluIEdMZW51bSB1c2FnZSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgYnVmZmVyRGF0YSgpOwor
ICAgICAgICAvLyBTdXBwb3J0ZWQgZm9ybXM6CisgICAgICAgIC8vICAgdm9pZCBidWZmZXJTdWJE
YXRhIChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTHNpemVpcHRyIG9mZnNldCwgaW4gQ2FudmFzQXJy
YXkgZGF0YSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgYnVmZmVyU3ViRGF0YSgpOworCisgICAg
ICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhpbiB1bnNpZ25lZCBsb25n
IHRhcmdldCk7CisgICAgICAgIHZvaWQgICAgICAgICBjbGVhcihpbiB1bnNpZ25lZCBsb25nIG1h
c2spOworICAgICAgICB2b2lkICAgICAgICAgY2xlYXJDb2xvcihpbiBkb3VibGUgcmVkLCBpbiBk
b3VibGUgZ3JlZW4sIGluIGRvdWJsZSBibHVlLCBpbiBkb3VibGUgYWxwaGEpOworICAgICAgICB2
b2lkICAgICAgICAgY2xlYXJEZXB0aChpbiBkb3VibGUgZGVwdGgpOworICAgICAgICB2b2lkICAg
ICAgICAgY2xlYXJTdGVuY2lsKGluIGxvbmcgcyk7CisgICAgICAgIHZvaWQgICAgICAgICBjb2xv
ck1hc2soaW4gYm9vbGVhbiByZWQsIGluIGJvb2xlYW4gZ3JlZW4sIGluIGJvb2xlYW4gYmx1ZSwg
aW4gYm9vbGVhbiBhbHBoYSk7CisgICAgICAgIHZvaWQgICAgICAgICBjb21waWxlU2hhZGVyKGlu
IENhbnZhc1NoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICAKKyAg
ICAgICAgLy92b2lkICAgICAgICAgY29tcHJlc3NlZFRleEltYWdlMkQoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWwsIGluIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQs
IGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBpbiBsb25n
IGJvcmRlciwgaW4gdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0IHZvaWQqIGRhdGEpOwor
ICAgICAgICAvL3ZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChpbiB1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW4gbG9uZyBsZXZlbCwgaW4gbG9uZyB4b2Zmc2V0LCBpbiBsb25nIHlv
ZmZzZXQsIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCBp
biB1bnNpZ25lZCBsb25nIGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyBpbWFnZVNpemUsIGNvbnN0
IHZvaWQqIGRhdGEpOworICAgICAgICAKKyAgICAgICAgdm9pZCAgICAgICAgIGNvcHlUZXhJbWFn
ZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiB1bnNpZ25lZCBs
b25nIGludGVybmFsZm9ybWF0LCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9u
ZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIGxvbmcgYm9yZGVyKTsKKyAgICAg
ICAgdm9pZCAgICAgICAgIGNvcHlUZXhTdWJJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCBpbiBsb25nIGxldmVsLCBpbiBsb25nIHhvZmZzZXQsIGluIGxvbmcgeW9mZnNldCwgaW4gbG9u
ZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcg
aGVpZ2h0KTsKKworICAgICAgICBDYW52YXNCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgICAg
IENhbnZhc0ZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIENhbnZhc1By
b2dyYW0gY3JlYXRlUHJvZ3JhbSgpOworICAgICAgICBDYW52YXNSZW5kZXJidWZmZXIgY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgICAgIENhbnZhc1NoYWRlciBjcmVhdGVTaGFkZXIoaW4gdW5z
aWduZWQgbG9uZyB0eXBlKTsKKyAgICAgICAgQ2FudmFzVGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7
CisKKyAgICAgICAgdm9pZCAgICAgICAgIGN1bGxGYWNlKGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7
CisKKyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihpbiBDYW52YXNCdWZmZXIgYnVm
ZmVyKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKGluIENhbnZhc0Zy
YW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0ZVByb2dy
YW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICAg
ICAgdm9pZCAgICAgICAgIGRlbGV0ZVNoYWRlcihpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsKKyAg
ICAgICAgdm9pZCAgICAgICAgIGRlbGV0ZVRleHR1cmUoaW4gQ2FudmFzVGV4dHVyZSB0ZXh0dXJl
KTsKKworICAgICAgICB2b2lkICAgICAgICAgZGVwdGhGdW5jKGluIHVuc2lnbmVkIGxvbmcgZnVu
Yyk7CisgICAgICAgIHZvaWQgICAgICAgICBkZXB0aE1hc2soaW4gYm9vbGVhbiBmbGFnKTsKKyAg
ICAgICAgLy8gRklYTUU6IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IFdlYkdMIHNwZWMg
KGRlcHRoUmFuZ2VmKQorICAgICAgICB2b2lkICAgICAgICAgZGVwdGhSYW5nZShpbiBkb3VibGUg
ek5lYXIsIGluIGRvdWJsZSB6RmFyKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGRldGFjaFNoYWRl
cihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIENhbnZhc1NoYWRlciBzaGFkZXIpIHJhaXNl
cyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAgZGlzYWJsZShpbiB1bnNpZ25l
ZCBsb25nIGNhcCk7CisgICAgICAgIHZvaWQgICAgICAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7CisgICAgICAgIHZvaWQgICAgICAgICBkcmF3QXJy
YXlzKGluIHVuc2lnbmVkIGxvbmcgbW9kZSwgaW4gbG9uZyBmaXJzdCwgaW4gdW5zaWduZWQgbG9u
ZyBjb3VudCk7CisgICAgICAgIHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMgKGluIHVuc2lnbmVk
IGxvbmcgbW9kZSwgaW4gbG9uZyBjb3VudCwgaW4gdW5zaWduZWQgbG9uZyB0eXBlLCBpbiB1bnNp
Z25lZCBsb25nIG9mZnNldCk7CisKKyAgICAgICAgdm9pZCAgICAgICAgIGVuYWJsZShpbiB1bnNp
Z25lZCBsb25nIGNhcCk7CisgICAgICAgIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKKyAgICAgICAgdm9pZCAgICAgICAgIGZpbmlz
aCgpOworICAgICAgICB2b2lkICAgICAgICAgZmx1c2goKTsKKyAgICAgICAgdm9pZCAgICAgICAg
IGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFyZ2V0
LCBpbiBDYW52YXNSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEKGluIHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2lnbmVkIGxv
bmcgdGV4dGFyZ2V0LCBpbiBDYW52YXNUZXh0dXJlIHRleHR1cmUsIGluIGxvbmcgbGV2ZWwpIHJh
aXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAgZnJvbnRGYWNlKGluIHVu
c2lnbmVkIGxvbmcgbW9kZSk7CisgICAgICAgIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChp
biB1bnNpZ25lZCBsb25nIHRhcmdldCk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhl
c2UgbmVlZCB0byBiZSBhZGRlZCBwZXIgdGhlIFdlYkdMIHNwZWMKKyAgICAgICAgQ2FudmFzQWN0
aXZlSW5mbyBnZXRBY3RpdmVBdHRyaWIoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNp
Z25lZCBsb25nIGluZGV4KQorICAgICAgICAgICAgcmFpc2VzIChET01FeGNlcHRpb24pOworICAg
ICAgICBDYW52YXNBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oaW4gQ2FudmFzUHJvZ3JhbSBw
cm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4KQorICAgICAgICAgICAgcmFpc2VzIChET01F
eGNlcHRpb24pOworCisgICAgICAgIC8vIENhbnZhc1NoYWRlckFycmF5IGdsR2V0QXR0YWNoZWRT
aGFkZXJzKEdMdWludCBwcm9ncmFtKTsKKworICAgICAgICBpbnQgICAgICAgICAgZ2V0QXR0cmli
TG9jYXRpb24oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBET01TdHJpbmcgbmFtZSk7CisK
KyAgICAgICAgYm9vbGVhbiBnZXRCb29sZWFuKGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAg
ICAgICBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSBnZXRCb29sZWFudihpbiB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKKyAgICAgICAgbG9uZyBnZXRCdWZmZXJQYXJhbWV0ZXJpKGluIHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgQ2FudmFzSW50QXJy
YXkgZ2V0QnVmZmVyUGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOworCisgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKKwor
ICAgICAgICBmbG9hdCBnZXRGbG9hdChpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAg
Q2FudmFzRmxvYXRBcnJheSBnZXRGbG9hdHYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAg
ICAgIGxvbmcgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShpbiB1bnNpZ25lZCBs
b25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBpbiB1bnNpZ25lZCBsb25n
IHBuYW1lKTsKKyAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGxvbmcgZ2V0SW50ZWdl
cihpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0SW50
ZWdlcnYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGxvbmcgZ2V0UHJvZ3JhbWko
aW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0UHJvZ3JhbWl2KGluIENh
bnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CisgICAgICAgIERPTVN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhpbiBDYW52YXNQ
cm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBsb25nIGdldFJl
bmRlcmJ1ZmZlclBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVk
IGxvbmcgcG5hbWUpOworICAgICAgICBDYW52YXNJbnRBcnJheSBnZXRSZW5kZXJidWZmZXJQYXJh
bWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7
CisgICAgICAgIGxvbmcgZ2V0U2hhZGVyaShpbiBDYW52YXNTaGFkZXIgc2hhZGVyLCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgQ2FudmFzSW50
QXJyYXkgZ2V0U2hhZGVyaXYoaW4gQ2FudmFzU2hhZGVyIHNoYWRlciwgaW4gdW5zaWduZWQgbG9u
ZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisKKyAgICAgICAgRE9NU3RyaW5nICAgIGdl
dFNoYWRlckluZm9Mb2coaW4gQ2FudmFzU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4Y2VwdGlv
bik7CisKKyAgICAgICAgLy8gVEJECisgICAgICAgIC8vIHZvaWQgZ2xHZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQgKEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSwgR0xpbnQq
IHJhbmdlLCBHTGludCogcHJlY2lzaW9uKTsKKworICAgICAgICBET01TdHJpbmcgICAgZ2V0U2hh
ZGVyU291cmNlKGluIENhbnZhc1NoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwor
ICAgICAgICBET01TdHJpbmcgICAgZ2V0U3RyaW5nKGluIHVuc2lnbmVkIGxvbmcgbmFtZSk7CisK
KyAgICAgICAgZmxvYXQgZ2V0VGV4UGFyYW1ldGVyZihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0VGV4
UGFyYW1ldGVyZnYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOworICAgICAgICBsb25nIGdldFRleFBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9uZyB0YXJn
ZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBDYW52YXNJbnRBcnJheSBnZXRU
ZXhQYXJhbWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBw
bmFtZSk7CisKKyAgICAgICAgZmxvYXQgZ2V0VW5pZm9ybWYoaW4gQ2FudmFzUHJvZ3JhbSBwcm9n
cmFtLCBpbiBsb25nIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgQ2Fu
dmFzRmxvYXRBcnJheSBnZXRVbmlmb3JtZnYoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBs
b25nIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgbG9uZyBnZXRVbmlm
b3JtaShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIGxvbmcgbG9jYXRpb24pIHJhaXNlcyhE
T01FeGNlcHRpb24pOworICAgICAgICBDYW52YXNJbnRBcnJheSBnZXRVbmlmb3JtaXYoaW4gQ2Fu
dmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiBsb25nIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIGxvbmcgZ2V0VW5pZm9ybUxvY2F0aW9uKGluIENhbnZhc1By
b2dyYW0gcHJvZ3JhbSwgaW4gRE9NU3RyaW5nIG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOwor
CisgICAgICAgIGZsb2F0IGdldFZlcnRleEF0dHJpYmYoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0VmVy
dGV4QXR0cmliZnYoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFt
ZSk7CisgICAgICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliaShpbiB1bnNpZ25lZCBsb25nIGluZGV4
LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0VmVy
dGV4QXR0cmliaXYoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFt
ZSk7CisKKyAgICAgICAgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW4gdW5zaWduZWQgbG9u
ZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisKKyAgICAgICAgdm9pZCAgICAgICAg
IGhpbnQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7Cisg
ICAgICAgIGJvb2xlYW4gICAgICBpc0J1ZmZlcihpbiBDYW52YXNCdWZmZXIgYnVmZmVyKTsKKyAg
ICAgICAgYm9vbGVhbiAgICAgIGlzRW5hYmxlZChpbiB1bnNpZ25lZCBsb25nIGNhcCk7CisgICAg
ICAgIGJvb2xlYW4gICAgICBpc0ZyYW1lYnVmZmVyKGluIENhbnZhc0ZyYW1lYnVmZmVyIGZyYW1l
YnVmZmVyKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGlzUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFt
IHByb2dyYW0pOworICAgICAgICBib29sZWFuICAgICAgaXNSZW5kZXJidWZmZXIoaW4gQ2FudmFz
UmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7CisgICAgICAgIGJvb2xlYW4gICAgICBpc1NoYWRl
cihpbiBDYW52YXNTaGFkZXIgc2hhZGVyKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGlzVGV4dHVy
ZShpbiBDYW52YXNUZXh0dXJlIHRleHR1cmUpOworICAgICAgICB2b2lkICAgICAgICAgbGluZVdp
ZHRoKGluIGRvdWJsZSB3aWR0aCk7CisgICAgICAgIHZvaWQgICAgICAgICBsaW5rUHJvZ3JhbShp
biBDYW52YXNQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2
b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSwgaW4gbG9uZyBw
YXJhbSk7CisgICAgICAgIHZvaWQgICAgICAgICBwb2x5Z29uT2Zmc2V0KGluIGRvdWJsZSBmYWN0
b3IsIGluIGRvdWJsZSB1bml0cyk7CisKKyAgICAgICAgQ2FudmFzQXJyYXkgcmVhZFBpeGVscyhp
biBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQg
bG9uZyBoZWlnaHQsIGluIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCBpbiB1bnNpZ25lZCBsb25nIHR5
cGUpOworICAgICAgICAKKyAgICAgICAgdm9pZCAgICAgICAgIHJlbGVhc2VTaGFkZXJDb21waWxl
cigpOworICAgICAgICB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShpbiB1bnNpZ25l
ZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgaW4gdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOworICAgICAgICB2b2lkICAg
ICAgICAgc2FtcGxlQ292ZXJhZ2UoaW4gZG91YmxlIHZhbHVlLCBpbiBib29sZWFuIGludmVydCk7
CisgICAgICAgIHZvaWQgICAgICAgICBzY2lzc29yKGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1
bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgICAgIHZv
aWQgICAgICAgICBzaGFkZXJTb3VyY2UoaW4gQ2FudmFzU2hhZGVyIHNoYWRlciwgaW4gRE9NU3Ry
aW5nIHN0cmluZykgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgICAgICAgICBz
dGVuY2lsRnVuYyhpbiB1bnNpZ25lZCBsb25nIGZ1bmMsIGluIGxvbmcgcmVmLCBpbiB1bnNpZ25l
ZCBsb25nIG1hc2spOworICAgICAgICB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZShp
biB1bnNpZ25lZCBsb25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgZnVuYywgaW4gbG9uZyByZWYs
IGluIHVuc2lnbmVkIGxvbmcgbWFzayk7CisgICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsTWFz
ayhpbiB1bnNpZ25lZCBsb25nIG1hc2spOworICAgICAgICB2b2lkICAgICAgICAgc3RlbmNpbE1h
c2tTZXBhcmF0ZShpbiB1bnNpZ25lZCBsb25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgbWFzayk7
CisgICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsT3AoaW4gdW5zaWduZWQgbG9uZyBmYWlsLCBp
biB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpwYXNzKTsKKyAgICAgICAg
dm9pZCAgICAgICAgIHN0ZW5jaWxPcFNlcGFyYXRlKGluIHVuc2lnbmVkIGxvbmcgZmFjZSwgaW4g
dW5zaWduZWQgbG9uZyBmYWlsLCBpbiB1bnNpZ25lZCBsb25nIHpmYWlsLCBpbiB1bnNpZ25lZCBs
b25nIHpwYXNzKTsKKworICAgICAgICB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyZihpbiB1bnNp
Z25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSwgaW4gZmxvYXQgcGFyYW0p
OworICAgICAgICB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyaShpbiB1bnNpZ25lZCBsb25nIHRh
cmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSwgaW4gbG9uZyBwYXJhbSk7CisKKyAgICAgICAg
Ly8gU3VwcG9ydGVkIGZvcm1zOgorICAgICAgICAvLyAgIHZvaWQgdGV4SW1hZ2UyRChpbiBHTGVu
dW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xlbnVtIGludGVybmFsZm9ybWF0LCBpbiBH
THNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgCisgICAgICAgIC8vICAgICAgICAgICAg
ICAgICAgIGluIEdMaW50IGJvcmRlciwgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUs
IGluIENhbnZhc0FycmF5IHBpeGVscyk7CisgICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGlu
IEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCAKKyAgICAgICAgLy8gICAgICAg
ICAgICAgICAgICAgaW4gR0xpbnQgYm9yZGVyLCBpbiBHTGVudW0gZm9ybWF0LCBpbiBHTGVudW0g
dHlwZSwgaW4gSW1hZ2VEYXRhIHBpeGVscyk7CisgICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJE
KGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGlt
YWdlLAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIGluIEdMYm9vbGVh
biBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgLy8gICB2
b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxD
YW52YXNFbGVtZW50IGNhbnZhcywKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgW09wdGlv
bmFsXSBpbiBHTGJvb2xlYW4gZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50
IGxldmVsLCBpbiBIVE1MVmlkZW9FbGVtZW50IHZpZGVvLAorICAgICAgICAvLyAgICAgICAgICAg
ICAgICAgICBbT3B0aW9uYWxdIGluIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBwcmVt
dWx0aXBseUFscGhhKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB0ZXhJbWFnZTJEKCk7CisKKyAg
ICAgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgorICAgICAgICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2Uy
RChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4g
R0xpbnQgeW9mZnNldCwgCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluIEdMc2l6
ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCAKKyAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVtIHR5cGUsIGluIENhbnZhc0FycmF5IHBp
eGVscyk7CisgICAgICAgIC8vICAgdm9pZCB0ZXhTdWJJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQs
IGluIEdMaW50IGxldmVsLCBpbiBHTGludCB4b2Zmc2V0LCBpbiBHTGludCB5b2Zmc2V0LCAKKyAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXpl
aSBoZWlnaHQsIAorICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBHTGVudW0gZm9y
bWF0LCBpbiBHTGVudW0gdHlwZSwgaW4gSW1hZ2VEYXRhIHBpeGVscyk7CisgICAgICAgIC8vICAg
dm9pZCB0ZXhTdWJJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBH
TGludCB4b2Zmc2V0LCBpbiBHTGludCB5b2Zmc2V0LCAKKyAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgICAgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIGluIEhUTUxJbWFn
ZUVsZW1lbnQgaW1hZ2UsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIFtPcHRpb25h
bF0gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOworICAg
ICAgICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBs
ZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCisgICAgICAgIC8vICAg
ICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCBp
biBIVE1MQ2FudmFzRWxlbWVudCBjYW52YXMsCisgICAgICAgIC8vICAgICAgICAgICAgICAgICAg
ICAgIFtPcHRpb25hbF0gR0xib29sZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5
QWxwaGEpOworICAgICAgICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0
LCBpbiBHTGludCBsZXZlbCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCisg
ICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6
ZWkgaGVpZ2h0LCBpbiBIVE1MVmlkZW9FbGVtZW50IHZpZGVvLAorICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlwWSwgW09wdGlvbmFsXSBpbiBw
cmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7
CisKKyAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7
CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBD
YW52YXNGbG9hdEFycmF5IHYpOworICAgICAgICB2b2lkIHVuaWZvcm0xaShpbiBsb25nIGxvY2F0
aW9uLCBpbiBsb25nIHgpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gbG9u
ZyBsb2NhdGlvbiwgaW4gQ2FudmFzSW50QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTJm
KGluIGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHVuaWZvcm0yZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzRmxvYXRBcnJh
eSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtMmkoaW4gbG9uZyBsb2NhdGlvbiwgaW4gbG9uZyB4
LCBpbiBsb25nIHkpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0yaXYoaW4gbG9uZyBs
b2NhdGlvbiwgaW4gQ2FudmFzSW50QXJyYXkgdik7CisgICAgICAgIHZvaWQgdW5pZm9ybTNmKGlu
IGxvbmcgbG9jYXRpb24sIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFz
RmxvYXRBcnJheSB2KTsKKyAgICAgICAgdm9pZCB1bmlmb3JtM2koaW4gbG9uZyBsb2NhdGlvbiwg
aW4gbG9uZyB4LCBpbiBsb25nIHksIGluIGxvbmcgeik7CisgICAgICAgIFtDdXN0b21dIHZvaWQg
dW5pZm9ybTNpdihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNJbnRBcnJheSB2KTsKKyAgICAg
ICAgdm9pZCB1bmlmb3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCwgaW4gZmxvYXQg
eSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgdyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9y
bTRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNGbG9hdEFycmF5IHYpOworICAgICAgICB2
b2lkIHVuaWZvcm00aShpbiBsb25nIGxvY2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4g
bG9uZyB6LCBpbiBsb25nIHcpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00aXYoaW4g
bG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFzSW50QXJyYXkgdik7CisKKyAgICAgICAgW0N1c3RvbV0g
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xlYW4gdHJhbnNw
b3NlLCBpbiBDYW52YXNGbG9hdEFycmF5IGFycmF5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1
bmlmb3JtTWF0cml4M2Z2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xlYW4gdHJhbnNwb3NlLCBp
biBDYW52YXNGbG9hdEFycmF5IGFycmF5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KGluIGxvbmcgbG9jYXRpb24sIGluIGJvb2xlYW4gdHJhbnNwb3NlLCBpbiBDYW52
YXNGbG9hdEFycmF5IGFycmF5KTsKKworICAgICAgICB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShp
biBDYW52YXNQcm9ncmFtIHByb2dyYW0pOworICAgICAgICB2b2lkICAgICAgICAgdmFsaWRhdGVQ
cm9ncmFtKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSk7CisKKyAgICAgICAgdm9pZCAgICAgICAg
IHZlcnRleEF0dHJpYjFmKGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gZmxvYXQgeCk7CisgICAg
ICAgIFtDdXN0b21dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZnYoaW4gdW5zaWduZWQgbG9u
ZyBpbmR4LCBpbiBDYW52YXNGbG9hdEFycmF5IHZhbHVlcyk7CisgICAgICAgIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWIyZihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIGZsb2F0IHgsIGluIGZs
b2F0IHkpOworICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliMmZ2KGlu
IHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxvYXRBcnJheSB2YWx1ZXMpOworICAgICAg
ICB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2YoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBm
bG9hdCB4LCBpbiBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCAg
ICAgICAgIHZlcnRleEF0dHJpYjNmdihpbiB1bnNpZ25lZCBsb25nIGluZHgsIGluIENhbnZhc0Zs
b2F0QXJyYXkgdmFsdWVzKTsKKyAgICAgICAgdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKGlu
IHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwg
aW4gZmxvYXQgdyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0
ZnYoaW4gdW5zaWduZWQgbG9uZyBpbmR4LCBpbiBDYW52YXNGbG9hdEFycmF5IHZhbHVlcyk7Cisg
ICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyKGluIHVuc2lnbmVkIGxvbmcg
aW5keCwgaW4gbG9uZyBzaXplLCBpbiB1bnNpZ25lZCBsb25nIHR5cGUsIGluIGJvb2xlYW4gbm9y
bWFsaXplZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGxv
bmcgc3RyaWRlLCBpbiB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisKKyAgICAgICAgdm9pZCAgICAg
ICAgIHZpZXdwb3J0KGluIGxvbmcgeCwgaW4gbG9uZyB5LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRo
LCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCk7CisgICAgfTsKK30KKwpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAkocmV2aXNpb24gNTA2MzQp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0
ZUNvbnN0cnVjdG9yLAogICAgICAgICBJbnRlcmZhY2VVVUlEPTk4ZmI0OGFlLTcyMTYtNDg5Yy04
NjJiLThlMTIxN2ZjNDQ0MywKICAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWFiNGYwNzgxLTE1
MmYtNDUwZS05NTQ2LTViMzk4NzQ5MWE1NAotICAgIF0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisgICAgXSBXZWJHTFJlbmRlcmluZ0NvbnRleHQg
OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKIAogICAgICAgICAvKiBDbGVhckJ1ZmZlck1hc2sg
Ki8KICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAg
ICAgICA9IDB4MDAwMDAxMDA7CkBAIC00NjEsMTIgKzQ2MSwxMiBAQCBtb2R1bGUgaHRtbCB7CiAg
ICAgICAgIGxvbmcgc2l6ZUluQnl0ZXMoaW4gdW5zaWduZWQgbG9uZyB0eXBlKSByYWlzZXMoRE9N
RXhjZXB0aW9uKTsKIAogICAgICAgICB2b2lkICAgICAgICAgYWN0aXZlVGV4dHVyZShpbiB1bnNp
Z25lZCBsb25nIHRleHR1cmUpOwotICAgICAgICB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKGlu
IENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gQ2FudmFzU2hhZGVyIHNoYWRlcikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oaW4g
Q2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiBET01TdHJp
bmcgbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBiaW5k
QnVmZmVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBDYW52YXNCdWZmZXIgYnVmZmVyKSBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZl
cihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzRnJhbWVidWZmZXIgZnJhbWVidWZm
ZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICB2b2lkICAgICAgICAgYmluZFJlbmRl
cmJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzUmVuZGVyYnVmZmVyIHJl
bmRlcmJ1ZmZlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIHZvaWQgICAgICAgICBi
aW5kVGV4dHVyZShpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gQ2FudmFzVGV4dHVyZSB0ZXh0
dXJlKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGF0dGFjaFNo
YWRlcihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gV2ViR0xTaGFkZXIgc2hhZGVyKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGJpbmRBdHRyaWJMb2NhdGlv
bihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gRE9N
U3RyaW5nIG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAg
YmluZEJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gV2ViR0xCdWZmZXIgYnVmZmVy
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1
ZmZlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1
ZmZlcikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgICAgICAgICBiaW5kUmVu
ZGVyYnVmZmVyKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBXZWJHTFJlbmRlcmJ1ZmZlciBy
ZW5kZXJidWZmZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAg
YmluZFRleHR1cmUoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIFdlYkdMVGV4dHVyZSB0ZXh0
dXJlKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kQ29s
b3IoaW4gZG91YmxlIHJlZCwgaW4gZG91YmxlIGdyZWVuLCBpbiBkb3VibGUgYmx1ZSwgaW4gZG91
YmxlIGFscGhhKTsKICAgICAgICAgdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oIGluIHVuc2ln
bmVkIGxvbmcgbW9kZSApOwogICAgICAgICB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFy
YXRlKGluIHVuc2lnbmVkIGxvbmcgbW9kZVJHQiwgaW4gdW5zaWduZWQgbG9uZyBtb2RlQWxwaGEp
OwpAQCAtNDc0LDEwICs0NzQsMTAgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkICAgICAg
ICAgYmxlbmRGdW5jU2VwYXJhdGUoaW4gdW5zaWduZWQgbG9uZyBzcmNSR0IsIGluIHVuc2lnbmVk
IGxvbmcgZHN0UkdCLCBpbiB1bnNpZ25lZCBsb25nIHNyY0FscGhhLCBpbiB1bnNpZ25lZCBsb25n
IGRzdEFscGhhKTsKICAgICAgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgogICAgICAgICAvLyAgIHZv
aWQgYnVmZmVyRGF0YSAoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xzaXplaSBzaXplLCBpbiBHTGVu
dW0gdXNhZ2UpOwotICAgICAgICAvLyAgIHZvaWQgYnVmZmVyRGF0YSAoaW4gR0xlbnVtIHRhcmdl
dCwgaW4gQ2FudmFzQXJyYXkgZGF0YSwgaW4gR0xlbnVtIHVzYWdlKTsKKyAgICAgICAgLy8gICB2
b2lkIGJ1ZmZlckRhdGEgKGluIEdMZW51bSB0YXJnZXQsIGluIFdlYkdMQXJyYXkgZGF0YSwgaW4g
R0xlbnVtIHVzYWdlKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBidWZmZXJEYXRhKCk7CiAgICAg
ICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKLSAgICAgICAgLy8gICB2b2lkIGJ1ZmZlclN1YkRhdGEg
KGluIEdMZW51bSB0YXJnZXQsIGluIEdMc2l6ZWlwdHIgb2Zmc2V0LCBpbiBDYW52YXNBcnJheSBk
YXRhKTsKKyAgICAgICAgLy8gICB2b2lkIGJ1ZmZlclN1YkRhdGEgKGluIEdMZW51bSB0YXJnZXQs
IGluIEdMc2l6ZWlwdHIgb2Zmc2V0LCBpbiBXZWJHTEFycmF5IGRhdGEpOwogICAgICAgICBbQ3Vz
dG9tXSB2b2lkIGJ1ZmZlclN1YkRhdGEoKTsKIAogICAgICAgICB1bnNpZ25lZCBsb25nIGNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQpOwpAQCAtNDg2LDcgKzQ4
Niw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoaW4g
ZG91YmxlIGRlcHRoKTsKICAgICAgICAgdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChpbiBsb25n
IHMpOwogICAgICAgICB2b2lkICAgICAgICAgY29sb3JNYXNrKGluIGJvb2xlYW4gcmVkLCBpbiBi
b29sZWFuIGdyZWVuLCBpbiBib29sZWFuIGJsdWUsIGluIGJvb2xlYW4gYWxwaGEpOwotICAgICAg
ICB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihpbiBDYW52YXNTaGFkZXIgc2hhZGVyKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoaW4g
V2ViR0xTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICAgICAgCiAgICAg
ICAgIC8vdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBp
biB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4gbG9uZyBi
b3JkZXIsIGluIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2b2lkKiBkYXRhKTsKICAg
ICAgICAgLy92b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIGxvbmcgbGV2ZWwsIGluIGxvbmcgeG9mZnNldCwgaW4gbG9uZyB5b2Zm
c2V0LCBpbiB1bnNpZ25lZCBsb25nIHdpZHRoLCBpbiB1bnNpZ25lZCBsb25nIGhlaWdodCwgaW4g
dW5zaWduZWQgbG9uZyBmb3JtYXQsIGluIHVuc2lnbmVkIGxvbmcgaW1hZ2VTaXplLCBjb25zdCB2
b2lkKiBkYXRhKTsKQEAgLTQ5NCwyNyArNDk0LDI3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
dm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBs
b25nIGxldmVsLCBpbiB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCBpbiBsb25nIHgsIGlu
IGxvbmcgeSwgaW4gdW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQs
IGluIGxvbmcgYm9yZGVyKTsKICAgICAgICAgdm9pZCAgICAgICAgIGNvcHlUZXhTdWJJbWFnZTJE
KGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiBsb25nIGxldmVsLCBpbiBsb25nIHhvZmZzZXQs
IGluIGxvbmcgeW9mZnNldCwgaW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcg
d2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAotICAgICAgICBDYW52YXNCdWZmZXIg
Y3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIENhbnZhc0ZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVm
ZmVyKCk7Ci0gICAgICAgIENhbnZhc1Byb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOwotICAgICAgICBD
YW52YXNSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgIENhbnZhc1No
YWRlciBjcmVhdGVTaGFkZXIoaW4gdW5zaWduZWQgbG9uZyB0eXBlKTsKLSAgICAgICAgQ2FudmFz
VGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7CisgICAgICAgIFdlYkdMQnVmZmVyIGNyZWF0ZUJ1ZmZl
cigpOworICAgICAgICBXZWJHTEZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
ICAgIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgICAgIFdlYkdMUmVuZGVyYnVm
ZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAgICBXZWJHTFNoYWRlciBjcmVhdGVTaGFk
ZXIoaW4gdW5zaWduZWQgbG9uZyB0eXBlKTsKKyAgICAgICAgV2ViR0xUZXh0dXJlIGNyZWF0ZVRl
eHR1cmUoKTsKIAogICAgICAgICB2b2lkICAgICAgICAgY3VsbEZhY2UoaW4gdW5zaWduZWQgbG9u
ZyBtb2RlKTsKIAotICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKGluIENhbnZhc0J1
ZmZlciBidWZmZXIpOwotICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoaW4g
Q2FudmFzRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgICAgICB2b2lkICAgICAgICAgZGVs
ZXRlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pOwotICAgICAgICB2b2lkICAgICAg
ICAgZGVsZXRlUmVuZGVyYnVmZmVyKGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIp
OwotICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKGluIENhbnZhc1NoYWRlciBzaGFk
ZXIpOwotICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShpbiBDYW52YXNUZXh0dXJl
IHRleHR1cmUpOworICAgICAgICB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKGluIFdlYkdMQnVm
ZmVyIGJ1ZmZlcik7CisgICAgICAgIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihpbiBX
ZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0
ZVByb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgICAgICB2b2lkICAgICAgICAg
ZGVsZXRlUmVuZGVyYnVmZmVyKGluIFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Cisg
ICAgICAgIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoaW4gV2ViR0xTaGFkZXIgc2hhZGVyKTsK
KyAgICAgICAgdm9pZCAgICAgICAgIGRlbGV0ZVRleHR1cmUoaW4gV2ViR0xUZXh0dXJlIHRleHR1
cmUpOwogCiAgICAgICAgIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoaW4gdW5zaWduZWQgbG9uZyBm
dW5jKTsKICAgICAgICAgdm9pZCAgICAgICAgIGRlcHRoTWFzayhpbiBib29sZWFuIGZsYWcpOwog
ICAgICAgICAvLyBGSVhNRTogdGhpcyBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgV2ViR0wgc3Bl
YyAoZGVwdGhSYW5nZWYpCiAgICAgICAgIHZvaWQgICAgICAgICBkZXB0aFJhbmdlKGluIGRvdWJs
ZSB6TmVhciwgaW4gZG91YmxlIHpGYXIpOwotICAgICAgICB2b2lkICAgICAgICAgZGV0YWNoU2hh
ZGVyKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gQ2FudmFzU2hhZGVyIHNoYWRlcikgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQgICAgICAgICBkZXRhY2hTaGFkZXIoaW4g
V2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIFdlYkdMU2hhZGVyIHNoYWRlcikgcmFpc2VzKERPTUV4
Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICBkaXNhYmxlKGluIHVuc2lnbmVkIGxvbmcg
Y2FwKTsKICAgICAgICAgdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbiB1
bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICAgICAgdm9pZCAgICAgICAgIGRyYXdBcnJheXMoaW4g
dW5zaWduZWQgbG9uZyBtb2RlLCBpbiBsb25nIGZpcnN0LCBpbiB1bnNpZ25lZCBsb25nIGNvdW50
KTsKQEAgLTUyNCw4OSArNTI0LDg5IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAg
ICAgICB2b2lkICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgIHZvaWQgICAgICAgICBmbHVzaCgp
OwotICAgICAgICB2b2lkICAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoaW4gdW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgaW4gdW5zaWduZWQg
bG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZm
ZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwotICAgICAgICB2b2lkICAgICAgICAgZnJhbWVidWZm
ZXJUZXh0dXJlMkQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgaW4gdW5zaWduZWQgbG9uZyB0ZXh0YXJnZXQsIGluIENhbnZhc1RleHR1cmUgdGV4
dHVyZSwgaW4gbG9uZyBsZXZlbCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIHZvaWQg
ICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBpbiB1bnNpZ25lZCBsb25nIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgaW4gV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKSByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKKyAgICAgICAgdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEKGluIHVu
c2lnbmVkIGxvbmcgdGFyZ2V0LCBpbiB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIGluIHVuc2ln
bmVkIGxvbmcgdGV4dGFyZ2V0LCBpbiBXZWJHTFRleHR1cmUgdGV4dHVyZSwgaW4gbG9uZyBsZXZl
bCkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICBmcm9udEZhY2Uo
aW4gdW5zaWduZWQgbG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCAgICAgICAgIGdlbmVyYXRlTWlw
bWFwKGluIHVuc2lnbmVkIGxvbmcgdGFyZ2V0KTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJWE1F
OiB0aGVzZSBuZWVkIHRvIGJlIGFkZGVkIHBlciB0aGUgV2ViR0wgc3BlYwotICAgICAgICBDYW52
YXNBY3RpdmVJbmZvIGdldEFjdGl2ZUF0dHJpYihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGlu
IHVuc2lnbmVkIGxvbmcgaW5kZXgpCisgICAgICAgIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3RpdmVB
dHRyaWIoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpCiAg
ICAgICAgICAgICByYWlzZXMgKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIENhbnZhc0FjdGl2ZUlu
Zm8gZ2V0QWN0aXZlVW5pZm9ybShpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVk
IGxvbmcgaW5kZXgpCisgICAgICAgIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3RpdmVVbmlmb3JtKGlu
IFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25nIGluZGV4KQogICAgICAgICAg
ICAgcmFpc2VzIChET01FeGNlcHRpb24pOwogCi0gICAgICAgIC8vIENhbnZhc1NoYWRlckFycmF5
IGdsR2V0QXR0YWNoZWRTaGFkZXJzKEdMdWludCBwcm9ncmFtKTsKKyAgICAgICAgLy8gV2ViR0xT
aGFkZXJBcnJheSBnbEdldEF0dGFjaGVkU2hhZGVycyhHTHVpbnQgcHJvZ3JhbSk7CiAKLSAgICAg
ICAgaW50ICAgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKGluIENhbnZhc1Byb2dyYW0gcHJvZ3Jh
bSwgaW4gRE9NU3RyaW5nIG5hbWUpOworICAgICAgICBpbnQgICAgICAgICAgZ2V0QXR0cmliTG9j
YXRpb24oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKTsKIAogICAg
ICAgICBib29sZWFuIGdldEJvb2xlYW4oaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAg
IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IGdldEJvb2xlYW52KGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOworICAgICAgICBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGdldEJvb2xlYW52KGluIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOwogICAgICAgICBsb25nIGdldEJ1ZmZlclBhcmFtZXRlcmkoaW4gdW5z
aWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBDYW52
YXNJbnRBcnJheSBnZXRCdWZmZXJQYXJhbWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFdlYkdMSW50QXJyYXkgZ2V0QnVmZmVy
UGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5h
bWUpOwogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0RXJyb3IoKTsKIAogICAgICAgICBmbG9h
dCBnZXRGbG9hdChpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgQ2FudmFzRmxvYXRB
cnJheSBnZXRGbG9hdHYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFdlYkdMRmxv
YXRBcnJheSBnZXRGbG9hdHYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAgIGxvbmcg
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaShpbiB1bnNpZ25lZCBsb25nIHRhcmdl
dCwgaW4gdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsK
LSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
aXYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwg
aW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFdlYkdMSW50QXJyYXkgZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVu
c2lnbmVkIGxvbmcgYXR0YWNobWVudCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAg
IGxvbmcgZ2V0SW50ZWdlcihpbiB1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgQ2FudmFz
SW50QXJyYXkgZ2V0SW50ZWdlcnYoaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIGxv
bmcgZ2V0UHJvZ3JhbWkoaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNpZ25lZCBsb25n
IHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKLSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0
UHJvZ3JhbWl2KGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gdW5zaWduZWQgbG9uZyBwbmFt
ZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIERPTVN0cmluZyBnZXRQcm9ncmFtSW5m
b0xvZyhpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAg
ICAgICBXZWJHTEludEFycmF5IGdldEludGVnZXJ2KGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwor
ICAgICAgICBsb25nIGdldFByb2dyYW1pKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiB1bnNp
Z25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgV2ViR0xJbnRB
cnJheSBnZXRQcm9ncmFtaXYoaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIHVuc2lnbmVkIGxv
bmcgcG5hbWUpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBET01TdHJpbmcgZ2V0UHJv
Z3JhbUluZm9Mb2coaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24p
OwogICAgICAgICBsb25nIGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBDYW52YXNJbnRBcnJh
eSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4g
dW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIGxvbmcgZ2V0U2hhZGVyaShpbiBDYW52YXNT
aGFkZXIgc2hhZGVyLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKLSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0U2hhZGVyaXYoaW4gQ2FudmFzU2hhZGVyIHNo
YWRlciwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSkgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAg
ICAgIFdlYkdMSW50QXJyYXkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBsb25nIGdldFNo
YWRlcmkoaW4gV2ViR0xTaGFkZXIgc2hhZGVyLCBpbiB1bnNpZ25lZCBsb25nIHBuYW1lKSByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgV2ViR0xJbnRBcnJheSBnZXRTaGFkZXJpdihpbiBX
ZWJHTFNoYWRlciBzaGFkZXIsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpIHJhaXNlcyhET01FeGNl
cHRpb24pOwogCi0gICAgICAgIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKGluIENhbnZh
c1NoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBET01TdHJpbmcg
ICAgZ2V0U2hhZGVySW5mb0xvZyhpbiBXZWJHTFNoYWRlciBzaGFkZXIpIHJhaXNlcyhET01FeGNl
cHRpb24pOwogCiAgICAgICAgIC8vIFRCRAogICAgICAgICAvLyB2b2lkIGdsR2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUsIEdM
aW50KiByYW5nZSwgR0xpbnQqIHByZWNpc2lvbik7CiAKLSAgICAgICAgRE9NU3RyaW5nICAgIGdl
dFNoYWRlclNvdXJjZShpbiBDYW52YXNTaGFkZXIgc2hhZGVyKSByYWlzZXMoRE9NRXhjZXB0aW9u
KTsKKyAgICAgICAgRE9NU3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShpbiBXZWJHTFNoYWRlciBz
aGFkZXIpIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAgICBET01TdHJpbmcgICAgZ2V0U3Ry
aW5nKGluIHVuc2lnbmVkIGxvbmcgbmFtZSk7CiAKICAgICAgICAgZmxvYXQgZ2V0VGV4UGFyYW1l
dGVyZihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0g
ICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0VGV4UGFyYW1ldGVyZnYoaW4gdW5zaWduZWQgbG9u
ZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBXZWJHTEZsb2F0QXJy
YXkgZ2V0VGV4UGFyYW1ldGVyZnYoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwogICAgICAgICBsb25nIGdldFRleFBhcmFtZXRlcmkoaW4gdW5zaWduZWQg
bG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBDYW52YXNJbnRB
cnJheSBnZXRUZXhQYXJhbWV0ZXJpdihpbiB1bnNpZ25lZCBsb25nIHRhcmdldCwgaW4gdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFdlYkdMSW50QXJyYXkgZ2V0VGV4UGFyYW1ldGVyaXYo
aW4gdW5zaWduZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwogCi0gICAg
ICAgIGZsb2F0IGdldFVuaWZvcm1mKGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBs
b2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIENhbnZhc0Zsb2F0QXJyYXkg
Z2V0VW5pZm9ybWZ2KGluIENhbnZhc1Byb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikg
cmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIGxvbmcgZ2V0VW5pZm9ybWkoaW4gQ2FudmFz
UHJvZ3JhbSBwcm9ncmFtLCBpbiBsb25nIGxvY2F0aW9uKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
LSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0VW5pZm9ybWl2KGluIENhbnZhc1Byb2dyYW0gcHJv
Z3JhbSwgaW4gbG9uZyBsb2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIGZs
b2F0IGdldFVuaWZvcm1mKGluIFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBpbiBsb25nIGxvY2F0aW9u
KSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgV2ViR0xGbG9hdEFycmF5IGdldFVuaWZv
cm1mdihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gbG9uZyBsb2NhdGlvbikgcmFpc2VzKERP
TUV4Y2VwdGlvbik7CisgICAgICAgIGxvbmcgZ2V0VW5pZm9ybWkoaW4gV2ViR0xQcm9ncmFtIHBy
b2dyYW0sIGluIGxvbmcgbG9jYXRpb24pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBX
ZWJHTEludEFycmF5IGdldFVuaWZvcm1pdihpbiBXZWJHTFByb2dyYW0gcHJvZ3JhbSwgaW4gbG9u
ZyBsb2NhdGlvbikgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIAotICAgICAgICBsb25n
IGdldFVuaWZvcm1Mb2NhdGlvbihpbiBDYW52YXNQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmlu
ZyBuYW1lKSByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgbG9uZyBnZXRVbmlmb3JtTG9j
YXRpb24oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0sIGluIERPTVN0cmluZyBuYW1lKSByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKIAogICAgICAgICBmbG9hdCBnZXRWZXJ0ZXhBdHRyaWJmKGluIHVuc2ln
bmVkIGxvbmcgaW5kZXgsIGluIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBDYW52YXNG
bG9hdEFycmF5IGdldFZlcnRleEF0dHJpYmZ2KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgsIGluIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBXZWJHTEZsb2F0QXJyYXkgZ2V0VmVydGV4QXR0
cmliZnYoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAg
ICAgICAgIGxvbmcgZ2V0VmVydGV4QXR0cmliaShpbiB1bnNpZ25lZCBsb25nIGluZGV4LCBpbiB1
bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgQ2FudmFzSW50QXJyYXkgZ2V0VmVydGV4QXR0
cmliaXYoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7Cisg
ICAgICAgIFdlYkdMSW50QXJyYXkgZ2V0VmVydGV4QXR0cmliaXYoaW4gdW5zaWduZWQgbG9uZyBp
bmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAKICAgICAgICAgbG9uZyBnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoaW4gdW5zaWduZWQgbG9uZyBpbmRleCwgaW4gdW5zaWduZWQgbG9uZyBwbmFt
ZSk7CiAKICAgICAgICAgdm9pZCAgICAgICAgIGhpbnQoaW4gdW5zaWduZWQgbG9uZyB0YXJnZXQs
IGluIHVuc2lnbmVkIGxvbmcgbW9kZSk7Ci0gICAgICAgIGJvb2xlYW4gICAgICBpc0J1ZmZlcihp
biBDYW52YXNCdWZmZXIgYnVmZmVyKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGlzQnVmZmVyKGlu
IFdlYkdMQnVmZmVyIGJ1ZmZlcik7CiAgICAgICAgIGJvb2xlYW4gICAgICBpc0VuYWJsZWQoaW4g
dW5zaWduZWQgbG9uZyBjYXApOwotICAgICAgICBib29sZWFuICAgICAgaXNGcmFtZWJ1ZmZlcihp
biBDYW52YXNGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgICAgIGJvb2xlYW4gICAgICBp
c1Byb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICAgICAgYm9vbGVhbiAgICAg
IGlzUmVuZGVyYnVmZmVyKGluIENhbnZhc1JlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAg
ICAgICBib29sZWFuICAgICAgaXNTaGFkZXIoaW4gQ2FudmFzU2hhZGVyIHNoYWRlcik7Ci0gICAg
ICAgIGJvb2xlYW4gICAgICBpc1RleHR1cmUoaW4gQ2FudmFzVGV4dHVyZSB0ZXh0dXJlKTsKKyAg
ICAgICAgYm9vbGVhbiAgICAgIGlzRnJhbWVidWZmZXIoaW4gV2ViR0xGcmFtZWJ1ZmZlciBmcmFt
ZWJ1ZmZlcik7CisgICAgICAgIGJvb2xlYW4gICAgICBpc1Byb2dyYW0oaW4gV2ViR0xQcm9ncmFt
IHByb2dyYW0pOworICAgICAgICBib29sZWFuICAgICAgaXNSZW5kZXJidWZmZXIoaW4gV2ViR0xS
ZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICAgICAgYm9vbGVhbiAgICAgIGlzU2hhZGVy
KGluIFdlYkdMU2hhZGVyIHNoYWRlcik7CisgICAgICAgIGJvb2xlYW4gICAgICBpc1RleHR1cmUo
aW4gV2ViR0xUZXh0dXJlIHRleHR1cmUpOwogICAgICAgICB2b2lkICAgICAgICAgbGluZVdpZHRo
KGluIGRvdWJsZSB3aWR0aCk7Ci0gICAgICAgIHZvaWQgICAgICAgICBsaW5rUHJvZ3JhbShpbiBD
YW52YXNQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lk
ICAgICAgICAgbGlua1Byb2dyYW0oaW4gV2ViR0xQcm9ncmFtIHByb2dyYW0pIHJhaXNlcyhET01F
eGNlcHRpb24pOwogICAgICAgICB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoaW4gdW5zaWduZWQg
bG9uZyBwbmFtZSwgaW4gbG9uZyBwYXJhbSk7CiAgICAgICAgIHZvaWQgICAgICAgICBwb2x5Z29u
T2Zmc2V0KGluIGRvdWJsZSBmYWN0b3IsIGluIGRvdWJsZSB1bml0cyk7CiAKLSAgICAgICAgQ2Fu
dmFzQXJyYXkgcmVhZFBpeGVscyhpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gdW5zaWduZWQgbG9u
ZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQsIGluIHVuc2lnbmVkIGxvbmcgZm9ybWF0
LCBpbiB1bnNpZ25lZCBsb25nIHR5cGUpOworICAgICAgICBXZWJHTEFycmF5IHJlYWRQaXhlbHMo
aW4gbG9uZyB4LCBpbiBsb25nIHksIGluIHVuc2lnbmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVk
IGxvbmcgaGVpZ2h0LCBpbiB1bnNpZ25lZCBsb25nIGZvcm1hdCwgaW4gdW5zaWduZWQgbG9uZyB0
eXBlKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGls
ZXIoKTsKICAgICAgICAgdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoaW4gdW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIGluIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIGluIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIGluIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKICAgICAgICAgdm9pZCAg
ICAgICAgIHNhbXBsZUNvdmVyYWdlKGluIGRvdWJsZSB2YWx1ZSwgaW4gYm9vbGVhbiBpbnZlcnQp
OwogICAgICAgICB2b2lkICAgICAgICAgc2Npc3NvcihpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4g
dW5zaWduZWQgbG9uZyB3aWR0aCwgaW4gdW5zaWduZWQgbG9uZyBoZWlnaHQpOwotICAgICAgICB2
b2lkICAgICAgICAgc2hhZGVyU291cmNlKGluIENhbnZhc1NoYWRlciBzaGFkZXIsIGluIERPTVN0
cmluZyBzdHJpbmcpIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICB2b2lkICAgICAgICAg
c2hhZGVyU291cmNlKGluIFdlYkdMU2hhZGVyIHNoYWRlciwgaW4gRE9NU3RyaW5nIHN0cmluZykg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsRnVuYyhp
biB1bnNpZ25lZCBsb25nIGZ1bmMsIGluIGxvbmcgcmVmLCBpbiB1bnNpZ25lZCBsb25nIG1hc2sp
OwogICAgICAgICB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNTZXBhcmF0ZShpbiB1bnNpZ25lZCBs
b25nIGZhY2UsIGluIHVuc2lnbmVkIGxvbmcgZnVuYywgaW4gbG9uZyByZWYsIGluIHVuc2lnbmVk
IGxvbmcgbWFzayk7CiAgICAgICAgIHZvaWQgICAgICAgICBzdGVuY2lsTWFzayhpbiB1bnNpZ25l
ZCBsb25nIG1hc2spOwpAQCAtNjE5LDEyICs2MTksMTIgQEAgbW9kdWxlIGh0bWwgewogCiAgICAg
ICAgIC8vIFN1cHBvcnRlZCBmb3JtczoKICAgICAgICAgLy8gICB2b2lkIHRleEltYWdlMkQoaW4g
R0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwg
aW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAvLyAgICAgICAg
ICAgICAgICAgICBpbiBHTGludCBib3JkZXIsIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0
eXBlLCBpbiBDYW52YXNBcnJheSBwaXhlbHMpOworICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICBpbiBHTGludCBib3JkZXIsIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBX
ZWJHTEFycmF5IHBpeGVscyk7CiAgICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdMZW51
bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGluIEdM
c2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCAKICAgICAgICAgLy8gICAgICAgICAgICAg
ICAgICAgaW4gR0xpbnQgYm9yZGVyLCBpbiBHTGVudW0gZm9ybWF0LCBpbiBHTGVudW0gdHlwZSwg
aW4gSW1hZ2VEYXRhIHBpeGVscyk7CiAgICAgICAgIC8vICAgdm9pZCB0ZXhJbWFnZTJEKGluIEdM
ZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBIVE1MSW1hZ2VFbGVtZW50IGltYWdlLAog
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIGluIEdMYm9vbGVhbiBmbGlw
WSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKLSAgICAgICAgLy8gICB2b2lkIHRl
eEltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxDYW52YXNF
bGVtZW50IGNhbnZhcywKKyAgICAgICAgLy8gICB2b2lkIHRleEltYWdlMkQoaW4gR0xlbnVtIHRh
cmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxXZWJHTEVsZW1lbnQgY2FudmFzLAogICAgICAg
ICAvLyAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIGluIEdMYm9vbGVhbiBmbGlwWSwgW09w
dGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgLy8gICB2b2lkIHRleEltYWdl
MkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEhUTUxWaWRlb0VsZW1lbnQg
dmlkZW8sCiAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIFtPcHRpb25hbF0gaW4gR0xib29s
ZWFuIGZsaXBZLCBbT3B0aW9uYWxdIGluIHByZW11bHRpcGx5QWxwaGEpOwpAQCAtNjMzLDcgKzYz
Myw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgogICAgICAg
ICAvLyAgIHZvaWQgdGV4U3ViSW1hZ2UyRChpbiBHTGVudW0gdGFyZ2V0LCBpbiBHTGludCBsZXZl
bCwgaW4gR0xpbnQgeG9mZnNldCwgaW4gR0xpbnQgeW9mZnNldCwgCiAgICAgICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgIGluIEdMc2l6ZWkgd2lkdGgsIGluIEdMc2l6ZWkgaGVpZ2h0LCAKLSAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaW4gR0xlbnVtIGZvcm1hdCwgaW4gR0xlbnVt
IHR5cGUsIGluIENhbnZhc0FycmF5IHBpeGVscyk7CisgICAgICAgIC8vICAgICAgICAgICAgICAg
ICAgICAgIGluIEdMZW51bSBmb3JtYXQsIGluIEdMZW51bSB0eXBlLCBpbiBXZWJHTEFycmF5IHBp
eGVscyk7CiAgICAgICAgIC8vICAgdm9pZCB0ZXhTdWJJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQs
IGluIEdMaW50IGxldmVsLCBpbiBHTGludCB4b2Zmc2V0LCBpbiBHTGludCB5b2Zmc2V0LCAKICAg
ICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXpl
aSBoZWlnaHQsIAogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBHTGVudW0gZm9y
bWF0LCBpbiBHTGVudW0gdHlwZSwgaW4gSW1hZ2VEYXRhIHBpeGVscyk7CkBAIC02NDEsNyArNjQx
LDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBpbiBH
THNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgaW4gSFRNTEltYWdlRWxlbWVudCBpbWFn
ZSwKICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgW09wdGlvbmFsXSBHTGJvb2xlYW4g
ZmxpcFksIFtPcHRpb25hbF0gaW4gcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIC8vICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKGluIEdMZW51bSB0YXJnZXQsIGluIEdMaW50IGxldmVsLCBpbiBHTGlu
dCB4b2Zmc2V0LCBpbiBHTGludCB5b2Zmc2V0LCAKLSAgICAgICAgLy8gICAgICAgICAgICAgICAg
ICAgICAgaW4gR0xzaXplaSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIGluIEhUTUxDYW52YXNF
bGVtZW50IGNhbnZhcywKKyAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgaW4gR0xzaXpl
aSB3aWR0aCwgaW4gR0xzaXplaSBoZWlnaHQsIGluIEhUTUxXZWJHTEVsZW1lbnQgY2FudmFzLAog
ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICBbT3B0aW9uYWxdIEdMYm9vbGVhbiBmbGlw
WSwgW09wdGlvbmFsXSBpbiBwcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgLy8gICB2b2lkIHRl
eFN1YkltYWdlMkQoaW4gR0xlbnVtIHRhcmdldCwgaW4gR0xpbnQgbGV2ZWwsIGluIEdMaW50IHhv
ZmZzZXQsIGluIEdMaW50IHlvZmZzZXQsIAogICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAg
ICBpbiBHTHNpemVpIHdpZHRoLCBpbiBHTHNpemVpIGhlaWdodCwgaW4gSFRNTFZpZGVvRWxlbWVu
dCB2aWRlbywKQEAgLTY0OSwzNyArNjQ5LDM3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgW0N1
c3RvbV0gdm9pZCB0ZXhTdWJJbWFnZTJEKCk7CiAKICAgICAgICAgdm9pZCB1bmlmb3JtMWYoaW4g
bG9uZyBsb2NhdGlvbiwgaW4gZmxvYXQgeCk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9y
bTFmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNGbG9hdEFycmF5IHYpOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHVuaWZvcm0xZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xGbG9hdEFy
cmF5IHYpOwogICAgICAgICB2b2lkIHVuaWZvcm0xaShpbiBsb25nIGxvY2F0aW9uLCBpbiBsb25n
IHgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0xaXYoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gQ2FudmFzSW50QXJyYXkgdik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTFpdihp
biBsb25nIGxvY2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwogICAgICAgICB2b2lkIHVuaWZv
cm0yZihpbiBsb25nIGxvY2F0aW9uLCBpbiBmbG9hdCB4LCBpbiBmbG9hdCB5KTsKLSAgICAgICAg
W0N1c3RvbV0gdm9pZCB1bmlmb3JtMmZ2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0Zsb2F0
QXJyYXkgdik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTJmdihpbiBsb25nIGxvY2F0
aW9uLCBpbiBXZWJHTEZsb2F0QXJyYXkgdik7CiAgICAgICAgIHZvaWQgdW5pZm9ybTJpKGluIGxv
bmcgbG9jYXRpb24sIGluIGxvbmcgeCwgaW4gbG9uZyB5KTsKLSAgICAgICAgW0N1c3RvbV0gdm9p
ZCB1bmlmb3JtMml2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFycmF5IHYpOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0yaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJ
bnRBcnJheSB2KTsKICAgICAgICAgdm9pZCB1bmlmb3JtM2YoaW4gbG9uZyBsb2NhdGlvbiwgaW4g
ZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeik7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQg
dW5pZm9ybTNmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNGbG9hdEFycmF5IHYpOworICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zZnYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xG
bG9hdEFycmF5IHYpOwogICAgICAgICB2b2lkIHVuaWZvcm0zaShpbiBsb25nIGxvY2F0aW9uLCBp
biBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB6KTsKLSAgICAgICAgW0N1c3RvbV0gdm9pZCB1
bmlmb3JtM2l2KGluIGxvbmcgbG9jYXRpb24sIGluIENhbnZhc0ludEFycmF5IHYpOworICAgICAg
ICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm0zaXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gV2ViR0xJbnRB
cnJheSB2KTsKICAgICAgICAgdm9pZCB1bmlmb3JtNGYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gZmxv
YXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQgeiwgaW4gZmxvYXQgdyk7Ci0gICAgICAgIFtDdXN0
b21dIHZvaWQgdW5pZm9ybTRmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBDYW52YXNGbG9hdEFycmF5
IHYpOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00ZnYoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gV2ViR0xGbG9hdEFycmF5IHYpOwogICAgICAgICB2b2lkIHVuaWZvcm00aShpbiBsb25nIGxv
Y2F0aW9uLCBpbiBsb25nIHgsIGluIGxvbmcgeSwgaW4gbG9uZyB6LCBpbiBsb25nIHcpOwotICAg
ICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm00aXYoaW4gbG9uZyBsb2NhdGlvbiwgaW4gQ2FudmFz
SW50QXJyYXkgdik7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybTRpdihpbiBsb25nIGxv
Y2F0aW9uLCBpbiBXZWJHTEludEFycmF5IHYpOwogCi0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5p
Zm9ybU1hdHJpeDJmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4g
Q2FudmFzRmxvYXRBcnJheSBhcnJheSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1h
dHJpeDNmdihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFz
RmxvYXRBcnJheSBhcnJheSk7Ci0gICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDRm
dihpbiBsb25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gQ2FudmFzRmxvYXRB
cnJheSBhcnJheSk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihpbiBs
b25nIGxvY2F0aW9uLCBpbiBib29sZWFuIHRyYW5zcG9zZSwgaW4gV2ViR0xGbG9hdEFycmF5IGFy
cmF5KTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGluIGxvbmcgbG9j
YXRpb24sIGluIGJvb2xlYW4gdHJhbnNwb3NlLCBpbiBXZWJHTEZsb2F0QXJyYXkgYXJyYXkpOwor
ICAgICAgICBbQ3VzdG9tXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoaW4gbG9uZyBsb2NhdGlvbiwg
aW4gYm9vbGVhbiB0cmFuc3Bvc2UsIGluIFdlYkdMRmxvYXRBcnJheSBhcnJheSk7CiAKLSAgICAg
ICAgdm9pZCAgICAgICAgIHVzZVByb2dyYW0oaW4gQ2FudmFzUHJvZ3JhbSBwcm9ncmFtKTsKLSAg
ICAgICAgdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShpbiBDYW52YXNQcm9ncmFtIHByb2dy
YW0pOworICAgICAgICB2b2lkICAgICAgICAgdXNlUHJvZ3JhbShpbiBXZWJHTFByb2dyYW0gcHJv
Z3JhbSk7CisgICAgICAgIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dyYW0oaW4gV2ViR0xQcm9n
cmFtIHByb2dyYW0pOwogCiAgICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihpbiB1
bnNpZ25lZCBsb25nIGluZHgsIGluIGZsb2F0IHgpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkICAg
ICAgICAgdmVydGV4QXR0cmliMWZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxv
YXRBcnJheSB2YWx1ZXMpOworICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVydGV4QXR0
cmliMWZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gV2ViR0xGbG9hdEFycmF5IHZhbHVlcyk7
CiAgICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihpbiB1bnNpZ25lZCBsb25nIGlu
ZHgsIGluIGZsb2F0IHgsIGluIGZsb2F0IHkpOwotICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAg
ICAgdmVydGV4QXR0cmliMmZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxvYXRB
cnJheSB2YWx1ZXMpOworICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmli
MmZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gV2ViR0xGbG9hdEFycmF5IHZhbHVlcyk7CiAg
ICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihpbiB1bnNpZ25lZCBsb25nIGluZHgs
IGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHopOwotICAgICAgICBbQ3VzdG9tXSB2
b2lkICAgICAgICAgdmVydGV4QXR0cmliM2Z2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gQ2Fu
dmFzRmxvYXRBcnJheSB2YWx1ZXMpOworICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliM2Z2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gV2ViR0xGbG9hdEFycmF5IHZh
bHVlcyk7CiAgICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihpbiB1bnNpZ25lZCBs
b25nIGluZHgsIGluIGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHosIGluIGZsb2F0IHcp
OwotICAgICAgICBbQ3VzdG9tXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGZ2KGluIHVuc2ln
bmVkIGxvbmcgaW5keCwgaW4gQ2FudmFzRmxvYXRBcnJheSB2YWx1ZXMpOworICAgICAgICBbQ3Vz
dG9tXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGZ2KGluIHVuc2lnbmVkIGxvbmcgaW5keCwg
aW4gV2ViR0xGbG9hdEFycmF5IHZhbHVlcyk7CiAgICAgICAgIHZvaWQgICAgICAgICB2ZXJ0ZXhB
dHRyaWJQb2ludGVyKGluIHVuc2lnbmVkIGxvbmcgaW5keCwgaW4gbG9uZyBzaXplLCBpbiB1bnNp
Z25lZCBsb25nIHR5cGUsIGluIGJvb2xlYW4gbm9ybWFsaXplZCwgCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvbmcgc3RyaWRlLCBpbiB1bnNpZ25lZCBsb25n
IG9mZnNldCk7CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCShyZXZpc2lv
biA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTaGFkZXIuY3BwOjUwNTc1
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKKyNpbmNsdWRlICJD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
UGFzc1JlZlB0cjxDYW52YXNTaGFkZXI+IENhbnZhc1NoYWRlcjo6Y3JlYXRlKENhbnZhc1JlbmRl
cmluZ0NvbnRleHQzRCogY3R4LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyVHlwZSB0eXBlKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzU2hhZGVyKGN0eCwgdHlwZSkpOworfQor
CitDYW52YXNTaGFkZXI6OkNhbnZhc1NoYWRlcihDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0
eCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclR5cGUgdHlwZSkKKyAgICA6IENhbnZhc09iamVj
dChjdHgpCit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
Y3JlYXRlU2hhZGVyKHR5cGUpKTsKK30KKwordm9pZCBDYW52YXNTaGFkZXI6Ol9kZWxldGVPYmpl
Y3QoUGxhdGZvcm0zRE9iamVjdCBvYmplY3QpCit7CisgICAgY29udGV4dCgpLT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5kZWxldGVTaGFkZXIob2JqZWN0KTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCShyZXZp
c2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNywyMyArMjcsMjMgQEAKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAK
LSNpbmNsdWRlICJDYW52YXNTaGFkZXIuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1QYXNzUmVmUHRyPENh
bnZhc1NoYWRlcj4gQ2FudmFzU2hhZGVyOjpjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
KiBjdHgsIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlIHR5cGUpCitQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
LCBHcmFwaGljc0NvbnRleHQzRDo6U2hhZGVyVHlwZSB0eXBlKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzU2hhZGVyKGN0eCwgdHlwZSkpOworICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViR0xTaGFkZXIoY3R4LCB0eXBlKSk7CiB9CiAKLUNhbnZhc1NoYWRlcjo6Q2FudmFzU2hh
ZGVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4LCBHcmFwaGljc0NvbnRleHQzRDo6U2hh
ZGVyVHlwZSB0eXBlKQotICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKK1dlYkdMU2hhZGVyOjpXZWJH
TFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNo
YWRlclR5cGUgdHlwZSkKKyAgICA6IFdlYkdMT2JqZWN0KGN0eCkKIHsKICAgICBzZXRPYmplY3Qo
Y29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVTaGFkZXIodHlwZSkpOwogfQog
Ci12b2lkIENhbnZhc1NoYWRlcjo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0IG9iamVj
dCkKK3ZvaWQgV2ViR0xTaGFkZXI6Ol9kZWxldGVPYmplY3QoUGxhdGZvcm0zRE9iamVjdCBvYmpl
Y3QpCiB7CiAgICAgY29udGV4dCgpLT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVTaGFkZXIo
b2JqZWN0KTsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHJldmlzaW9uIDUw
NTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1NoYWRlci5oOjUwNTc1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1NoYWRlcl9oCisjZGVmaW5lIENhbnZh
c1NoYWRlcl9oCisKKyNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAorICAgIGNsYXNzIENhbnZhc1NoYWRlciA6IHB1YmxpYyBDYW52YXNPYmpl
Y3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFzU2hhZGVyKCkgeyBkZWxl
dGVPYmplY3QoKTsgfQorICAgICAgICAKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFz
U2hhZGVyPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNoYWRlclR5cGUpOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBDYW52YXNT
aGFkZXIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRl
clR5cGUpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RP
YmplY3QpOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBDYW52YXNTaGFkZXJfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNp
b24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDI4ICsyMywyOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBDYW52YXNTaGFkZXJfaAotI2RlZmluZSBDYW52YXNTaGFkZXJfaAorI2lmbmRlZiBXZWJHTFNo
YWRlcl9oCisjZGVmaW5lIFdlYkdMU2hhZGVyX2gKIAotI2luY2x1ZGUgIkNhbnZhc09iamVjdC5o
IgorI2luY2x1ZGUgIldlYkdMT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKLSAgICBjbGFzcyBDYW52YXNTaGFkZXIgOiBwdWJsaWMgQ2FudmFzT2JqZWN0IHsKKyAgICBj
bGFzcyBXZWJHTFNoYWRlciA6IHB1YmxpYyBXZWJHTE9iamVjdCB7CiAgICAgcHVibGljOgotICAg
ICAgICB2aXJ0dWFsIH5DYW52YXNTaGFkZXIoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CisgICAgICAg
IHZpcnR1YWwgfldlYkdMU2hhZGVyKCkgeyBkZWxldGVPYmplY3QoKTsgfQogICAgICAgICAKLSAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU2hhZGVyPiBjcmVhdGUoQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDNEKiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclR5cGUpOworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCosIEdyYXBoaWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlKTsKICAgICAgICAgCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgQ2FudmFzU2hhZGVyKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCosIEdyYXBo
aWNzQ29udGV4dDNEOjpTaGFkZXJUeXBlKTsKKyAgICAgICAgV2ViR0xTaGFkZXIoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNoYWRlclR5cGUpOwogCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOwogICAgIH07CiAg
ICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNTaGFkZXJfaAor
I2VuZGlmIC8vIFdlYkdMU2hhZGVyX2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xT
aGFkZXIuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIu
aWRsCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTaGFk
ZXIuaWRsOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAg
ICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzU2hhZGVyIHsKKyAgICB9
OworfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwJKHJldmlzaW9uIDUwNTc1
KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5pZGwJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDYgKzI0LDYgQEAKICAqLwogCiBtb2R1bGUgaHRtbCB7Ci0gICAgaW50ZXJmYWNlIFtD
b25kaXRpb25hbD0zRF9DQU5WQVNdIENhbnZhc1NoYWRlciB7CisgICAgaW50ZXJmYWNlIFtDb25k
aXRpb25hbD0zRF9DQU5WQVNdIFdlYkdMU2hhZGVyIHsKICAgICB9OwogfQpJbmRleDogV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU2hvcnRBcnJheS5jcHA6NTA1NzUpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisKKyNpbmNsdWRlICJDYW52YXNBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkNhbnZh
c1Nob3J0QXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIFBhc3NSZWZQ
dHI8Q2FudmFzU2hvcnRBcnJheT4gQ2FudmFzU2hvcnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxl
bmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyID0g
Q2FudmFzQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2Yoc2hvcnQpKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgUGFzc1Jl
ZlB0cjxDYW52YXNTaG9ydEFycmF5PiBDYW52YXNTaG9ydEFycmF5OjpjcmVhdGUoc2hvcnQqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBSZWZQdHI8Q2FudmFzU2hvcnRB
cnJheT4gYSA9IENhbnZhc1Nob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhLT5zZXQoaSwg
YXJyYXlbaV0pOworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPENh
bnZhc1Nob3J0QXJyYXk+IENhbnZhc1Nob3J0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZh
c0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCisg
ICAgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFs
aWdubWVudC4KKyAgICAgICAgaWYgKChvZmZzZXQgJSBzaXplb2Yoc2hvcnQpKSAhPSAwKQorICAg
ICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICAg
ICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVn
aW9uIG9mCisgICAgICAgICAgICAvLyB0aGUgZ2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9y
YWdlLgorICAgICAgICAgICAgaWYgKChvZmZzZXQgKyAobGVuZ3RoICogc2l6ZW9mKHNob3J0KSkp
ID4gYnVmZmVyLT5ieXRlTGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENhbnZhc1Nob3J0QXJyYXko
YnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNTaG9ydEFy
cmF5OjpDYW52YXNTaG9ydEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IENhbnZhc0FycmF5KGJ1
ZmZlciwgb2Zmc2V0KQorICAgICAgICAsIG1fc2l6ZShsZW5ndGgpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBDYW52YXNTaG9ydEFycmF5OjpsZW5ndGgoKSBjb25zdCB7CisgICAg
ICAgIHJldHVybiBtX3NpemU7CisgICAgfQorICAgICAgICAKKyAgICB1bnNpZ25lZCBDYW52YXNT
aG9ydEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgp
ICogc2l6ZW9mKHNob3J0KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFT
KQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkocmV2aXNpb24g
NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDI2ICsyNywyNiBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAot
I2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2FudmFzU2hvcnRBcnJh
eS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFNob3J0
QXJyYXkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzU2hvcnRBcnJheT4gQ2FudmFzU2hvcnRBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkK
KyAgICBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gV2ViR0xTaG9ydEFycmF5OjpjcmVhdGUo
dW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZihzaG9y
dCkpOworICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyID0gV2ViR0xBcnJh
eUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZihzaG9ydCkpOwogICAgICAgICByZXR1cm4g
Y3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPENhbnZh
c1Nob3J0QXJyYXk+IENhbnZhc1Nob3J0QXJyYXk6OmNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2ln
bmVkIGxlbmd0aCkKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gV2ViR0xTaG9ydEFy
cmF5OjpjcmVhdGUoc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAg
ICBSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gYSA9IENhbnZhc1Nob3J0QXJyYXk6OmNyZWF0ZShs
ZW5ndGgpOworICAgICAgICBSZWZQdHI8V2ViR0xTaG9ydEFycmF5PiBhID0gV2ViR0xTaG9ydEFy
cmF5OjpjcmVhdGUobGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aDsgKytpKQogICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKICAgICAgICAgcmV0
dXJuIGE7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxDYW52YXNTaG9ydEFycmF5PiBDYW52YXNT
aG9ydEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAor
ICAgIFBhc3NSZWZQdHI8V2ViR0xTaG9ydEFycmF5PiBXZWJHTFNob3J0QXJyYXk6OmNyZWF0ZShQ
YXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCkKICAgICB7CkBAIC01NiwyNSArNTYsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgICAgIGlmIChidWZmZXIpIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ug
c3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBvZgotICAgICAgICAgICAg
Ly8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KKyAgICAgICAgICAgIC8v
IHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KICAgICAgICAgICAgIGlmICgo
b2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZihzaG9ydCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNTaG9ydEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJHTFNob3J0QXJyYXkoYnVmZmVyLCBv
ZmZzZXQsIGxlbmd0aCkpOwogICAgIH0KICAgICAKLSAgICBDYW52YXNTaG9ydEFycmF5OjpDYW52
YXNTaG9ydEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKQotICAgICAgICA6IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zm
c2V0KQorICAgIFdlYkdMU2hvcnRBcnJheTo6V2ViR0xTaG9ydEFycmF5KFBhc3NSZWZQdHI8V2Vi
R0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCisgICAg
ICAgIDogV2ViR0xBcnJheShidWZmZXIsIG9mZnNldCkKICAgICAgICAgLCBtX3NpemUobGVuZ3Ro
KQogICAgIHsKICAgICB9CiAgICAgCi0gICAgdW5zaWduZWQgQ2FudmFzU2hvcnRBcnJheTo6bGVu
Z3RoKCkgY29uc3QgeworICAgIHVuc2lnbmVkIFdlYkdMU2hvcnRBcnJheTo6bGVuZ3RoKCkgY29u
c3QgewogICAgICAgICByZXR1cm4gbV9zaXplOwogICAgIH0KICAgICAgICAgCi0gICAgdW5zaWdu
ZWQgQ2FudmFzU2hvcnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgdW5zaWduZWQg
V2ViR0xTaG9ydEFycmF5OjpzaXplSW5CeXRlcygpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGxl
bmd0aCgpICogc2l6ZW9mKHNob3J0KTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMU2hvcnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTaG9ydEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1Nob3J0QXJyYXkuaDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xTaG9ydEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQ2FudmFzU2hvcnRBcnJheV9oCisjZGVmaW5lIENhbnZhc1Nob3J0QXJyYXlfaAor
CisjaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFz
cyBDYW52YXNTaG9ydEFycmF5IDogcHVibGljIENhbnZhc0FycmF5IHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJy
YXk+IGNyZWF0ZShzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0Fy
cmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICAg
ICAgc2hvcnQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydCo+KGJhc2VBZGRyZXNz
KCkpOyB9CisKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAg
ICAgdmlydHVhbCB1bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAgIHZvaWQg
c2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgaWYgKGlzbmFuKHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IDA7CisgICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHNo
b3J0Pjo6bWluKCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWluKCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJp
Y19saW1pdHM8c2hvcnQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKTsKKyAgICAgICAgICAgIHNob3J0KiBzdG9yYWdlID0g
c3RhdGljX2Nhc3Q8c2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0b3JhZ2Vb
aW5kZXhdID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHNob3J0JiByZXN1bHQpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0ID0gaXRlbShpbmRleCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2hvcnQg
aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9zaXplKTsKKyAgICAgICAgICAgIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nh
c3Q8c2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiBzdG9yYWdlW2lu
ZGV4XTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzU2hvcnRBcnJh
eShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB9OworICAgIAorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzU2hvcnRBcnJheV9oCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsMTAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIENhbnZhc1No
b3J0QXJyYXlfaAotI2RlZmluZSBDYW52YXNTaG9ydEFycmF5X2gKKyNpZm5kZWYgV2ViR0xTaG9y
dEFycmF5X2gKKyNkZWZpbmUgV2ViR0xTaG9ydEFycmF5X2gKIAotI2luY2x1ZGUgIkNhbnZhc0Fy
cmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0z
NCwxMyArMzQsMTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENh
bnZhc1Nob3J0QXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkgeworICAgIGNsYXNzIFdlYkdMU2hv
cnRBcnJheSA6IHB1YmxpYyBXZWJHTEFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1Nob3J0QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0
aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZShz
aG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1Nob3J0QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBi
dWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hvcnRBcnJheT4gY3JlYXRlKHNob3J0KiBhcnJheSwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaG9ydEFy
cmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICAgICAgc2hvcnQqIGRhdGEoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxzaG9ydCo+KGJhc2VBZGRyZXNzKCkpOyB9CiAKQEAgLTc3LDEwICs3NywxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IENhbnZhc1Nob3J0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBp
bnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBXZWJHTFNob3J0QXJyYXkoUGFz
c1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB9OwogICAgIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ2FudmFzU2hvcnRBcnJheV9oCisjZW5kaWYgLy8g
V2ViR0xTaG9ydEFycmF5X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFy
cmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJh
eS5pZGwJKHJldmlzaW9uIDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1No
b3J0QXJyYXkuaWRsOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJy
YXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworbW9kdWxlIGh0bWwgeworICAgIGludGVyZmFjZSBbCisgICAgICAgIENvbmRpdGlvbmFsPTNE
X0NBTlZBUywKKyAgICAgICAgSGFzTnVtZXJpY0luZGV4R2V0dGVyLAorICAgICAgICBIYXNDdXN0
b21JbmRleFNldHRlciwKKyAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCisgICAgICAg
IEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCisgICAgICAgIEN1c3RvbVRvSlMKKyAgICBdIENh
bnZhc1Nob3J0QXJyYXkgOiBDYW52YXNBcnJheSB7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5pZGwJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw2IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIs
CiAgICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAgIEN1c3RvbVRvSlMK
LSAgICBdIENhbnZhc1Nob3J0QXJyYXkgOiBDYW52YXNBcnJheSB7CisgICAgXSBXZWJHTFNob3J0
QXJyYXkgOiBXZWJHTEFycmF5IHsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xUZXh0dXJlLmNwcAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzVGV4dHVyZS5jcHA6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisKKyNpbmNsdWRlICJDYW52
YXNUZXh0dXJlLmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK1Bhc3NSZWZQdHI8Q2FudmFzVGV4dHVyZT4gQ2FudmFz
VGV4dHVyZTo6Y3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY3R4KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ2FudmFzVGV4dHVyZShjdHgpKTsKK30KKworQ2FudmFzVGV4dHVy
ZTo6Q2FudmFzVGV4dHVyZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QqIGN0eCkKKyAgICA6IENh
bnZhc09iamVjdChjdHgpCisgICAgLCBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQoZmFsc2Up
Cit7CisgICAgc2V0T2JqZWN0KGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRl
VGV4dHVyZSgpKTsKK30KKwordm9pZCBDYW52YXNUZXh0dXJlOjpfZGVsZXRlT2JqZWN0KFBsYXRm
b3JtM0RPYmplY3Qgb2JqZWN0KQoreworICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+ZGVsZXRlVGV4dHVyZShvYmplY3QpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0Rf
Q0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAkocmV2aXNpb24g
NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDI0ICsyNywyNCBAQAogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKIAotI2lu
Y2x1ZGUgIkNhbnZhc1RleHR1cmUuaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0QuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotUGFzc1JlZlB0cjxDYW52
YXNUZXh0dXJlPiBDYW52YXNUZXh0dXJlOjpjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52
YXNUZXh0dXJlKGN0eCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0
eCkpOwogfQogCi1DYW52YXNUZXh0dXJlOjpDYW52YXNUZXh0dXJlKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRCogY3R4KQotICAgIDogQ2FudmFzT2JqZWN0KGN0eCkKK1dlYkdMVGV4dHVyZTo6V2Vi
R0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorICAgIDogV2ViR0xPYmplY3Qo
Y3R4KQogICAgICwgY3ViZU1hcFJXcmFwTW9kZUluaXRpYWxpemVkKGZhbHNlKQogewogICAgIHNl
dE9iamVjdChjb250ZXh0KCktPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZVRleHR1cmUoKSk7
CiB9CiAKLXZvaWQgQ2FudmFzVGV4dHVyZTo6X2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0
IG9iamVjdCkKK3ZvaWQgV2ViR0xUZXh0dXJlOjpfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmpl
Y3Qgb2JqZWN0KQogewogICAgIGNvbnRleHQoKS0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRl
VGV4dHVyZShvYmplY3QpOwogfQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCShy
ZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNUZXh0dXJlLmg6
NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENhbnZhc1RleHR1cmVfaAor
I2RlZmluZSBDYW52YXNUZXh0dXJlX2gKKworI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xhc3MgQ2FudmFzVGV4dHVyZSA6IHB1
YmxpYyBDYW52YXNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Q2FudmFz
VGV4dHVyZSgpIHsgZGVsZXRlT2JqZWN0KCk7IH0KKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENhbnZhc1RleHR1cmU+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qq
KTsKKyAgICAKKyAgICAgICAgYm9vbCBpc0N1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZCgpIHsK
KyAgICAgICAgICAgIHJldHVybiBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQ7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHNldEN1YmVNYXBSV3JhcE1vZGVJbml0aWFsaXplZChib29sIGlu
aXRpYWxpemVkKSB7CisgICAgICAgICAgICBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQgPSBp
bml0aWFsaXplZDsKKyAgICAgICAgfQorCisgICAgcHJvdGVjdGVkOgorICAgICAgICBDYW52YXNU
ZXh0dXJlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCopOworCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBfZGVsZXRlT2JqZWN0KFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgYm9vbCBjdWJlTWFwUldyYXBNb2RlSW5pdGlhbGl6ZWQ7CisgICAgfTsKKyAgICAKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc1RleHR1cmVfaApJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIxICsyMywyMSBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBDYW52YXNUZXh0dXJlX2gKLSNkZWZp
bmUgQ2FudmFzVGV4dHVyZV9oCisjaWZuZGVmIFdlYkdMVGV4dHVyZV9oCisjZGVmaW5lIFdlYkdM
VGV4dHVyZV9oCiAKLSNpbmNsdWRlICJDYW52YXNPYmplY3QuaCIKKyNpbmNsdWRlICJXZWJHTE9i
amVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi0gICAgY2xhc3MgQ2FudmFz
VGV4dHVyZSA6IHB1YmxpYyBDYW52YXNPYmplY3QgeworICAgIGNsYXNzIFdlYkdMVGV4dHVyZSA6
IHB1YmxpYyBXZWJHTE9iamVjdCB7CiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIH5DYW52
YXNUZXh0dXJlKCkgeyBkZWxldGVPYmplY3QoKTsgfQorICAgICAgICB2aXJ0dWFsIH5XZWJHTFRl
eHR1cmUoKSB7IGRlbGV0ZU9iamVjdCgpOyB9CiAgICAgICAgIAotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXNUZXh0dXJlPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEKik7
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gY3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCopOwogICAgIAogICAgICAgICBib29sIGlzQ3ViZU1hcFJXcmFwTW9kZUlu
aXRpYWxpemVkKCkgewogICAgICAgICAgICAgcmV0dXJuIGN1YmVNYXBSV3JhcE1vZGVJbml0aWFs
aXplZDsKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAK
ICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIENhbnZhc1RleHR1cmUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDNEKik7CisgICAgICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
IAogICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlbGV0ZU9iamVjdChQbGF0Zm9ybTNET2JqZWN0KTsK
IApAQCAtNTgsNCArNTgsNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDYW52YXNUZXh0dXJlX2gKKyNlbmRpZiAvLyBXZWJH
TFRleHR1cmVfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbAkocmV2aXNp
b24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVGV4dHVyZS5pZGw6NTA1
NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKK21vZHVsZSBodG1sIHsKKyAgICBpbnRlcmZh
Y2UgW0NvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzVGV4dHVyZSB7CisgICAgfTsKK30KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwJKHJldmlzaW9uIDUwNTc1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCw2ICsyNCw2IEBACiAgKi8KIAogbW9kdWxlIGh0bWwgewotICAgIGludGVyZmFjZSBbQ29uZGl0
aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNUZXh0dXJlIHsKKyAgICBpbnRlcmZhY2UgW0NvbmRpdGlv
bmFsPTNEX0NBTlZBU10gV2ViR0xUZXh0dXJlIHsKICAgICB9OwogfQpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCShyZXZpc2lvbiA1MDU3
NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5jcHA6
NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXlC
dWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eT4gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCisgICAg
eworICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5
QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKTsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0
cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0
ZSh1bnNpZ25lZCBjaGFyKiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAg
UmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBhID0gQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXk6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBhLT5zZXQoaSwgYXJyYXlbaV0pOworICAgICAgICByZXR1
cm4gYTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBD
YW52YXNVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZm
ZXI+IGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBpZiAoYnVmZmVyKSB7CisgICAgICAgICAg
ICAvLyBDaGVjayB0byBtYWtlIHN1cmUgd2UgYXJlIHRhbGtpbmcgYWJvdXQgYSB2YWxpZCByZWdp
b24gb2YKKyAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBDYW52YXNBcnJheUJ1ZmZlcidzIHN0b3Jh
Z2UuCisgICAgICAgICAgICBpZiAoKG9mZnNldCArIChsZW5ndGggKiBzaXplb2YodW5zaWduZWQg
Y2hhcikpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBO
VUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgfQorICAgIAorICAg
IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpDYW52YXNVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVm
UHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKKyAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIsIG9mZnNldCkKKyAgICAgICAgLCBtX3Np
emUobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAg
ICB9CisgICAgICAgIAorICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpzaXpl
SW5CeXRlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHVuc2ln
bmVkIGNoYXIpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAJKHJl
dmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNTAgKzI3LDUwIEBACiAKICNpZiBFTkFCTEUo
M0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKLSNpbmNsdWRlICJD
YW52YXNVbnNpZ25lZEJ5dGVBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXlCdWZmZXIuaCIK
KyNpbmNsdWRlICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKLSAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKHVuc2lnbmVkIGxlbmd0aCkKKyAgICBQYXNzUmVmUHRy
PFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHVuc2ln
bmVkIGNoYXIpKTsKKyAgICAgICAgUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciA9IFdl
YkdMQXJyYXlCdWZmZXI6OmNyZWF0ZShsZW5ndGggKiBzaXplb2YodW5zaWduZWQgY2hhcikpOwog
ICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKICAgICB9CiAKLSAgICBQ
YXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eTo6Y3JlYXRlKHVuc2lnbmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCisgICAgUGFz
c1JlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Ojpj
cmVhdGUodW5zaWduZWQgY2hhciogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gYSA9IENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5OjpjcmVhdGUobGVuZ3RoKTsKKyAgICAgICAgUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRl
QXJyYXk+IGEgPSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUobGVuZ3RoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgYS0+
c2V0KGksIGFycmF5W2ldKTsKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgUGFzc1Jl
ZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXk6OmNy
ZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsCisgICAgUGFzc1JlZlB0
cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5PiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUo
UGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
b2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQogICAgIHsKICAgICAgICAg
aWYgKGJ1ZmZlcikgewogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0
YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgZ2l2ZW4g
Q2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICAgICAgLy8gdGhlIGdpdmVuIFdl
YkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgogICAgICAgICAgICAgaWYgKChvZmZzZXQgKyAobGVu
Z3RoICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKSkgPiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGxlbmd0
aCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5zaWduZWRCeXRlQXJyYXko
YnVmZmVyLCBvZmZzZXQsIGxlbmd0aCkpOwogICAgIH0KICAgICAKLSAgICBDYW52YXNVbnNpZ25l
ZEJ5dGVBcnJheTo6Q2FudmFzVW5zaWduZWRCeXRlQXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJh
eUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpCi0gICAgICAgIDog
Q2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCisgICAgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZl
ciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAgICAgICA6IFdlYkdMQXJyYXkoYnVm
ZmVyLCBvZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxlbmd0aCkKICAgICB7CiAgICAgfQogICAg
IAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpsZW5ndGgoKSBjb25zdCB7
CisgICAgdW5zaWduZWQgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTo6bGVuZ3RoKCkgY29uc3Qgewog
ICAgICAgICByZXR1cm4gbV9zaXplOwogICAgIH0KICAgICAgICAgCi0gICAgdW5zaWduZWQgQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgeworICAgIHVuc2lnbmVk
IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNpemVJbkJ5dGVzKCkgY29uc3QgewogICAgICAgICBy
ZXR1cm4gbGVuZ3RoKCkgKiBzaXplb2YodW5zaWduZWQgY2hhcik7CiAgICAgfQogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgJKHJldmlzaW9u
IDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
Lmg6NTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDYW52
YXNVbnNpZ25lZEJ5dGVBcnJheV9oCisjZGVmaW5lIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5X2gK
KworI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgY2xh
c3MgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkgeworICAgIHB1
YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRCeXRlQXJyYXkoKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGNoYXIqIGFy
cmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1
ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKworICAgICAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJhc2VBZGRy
ZXNzKCkpOyB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKCkgY29uc3Q7CisKKyAg
ICAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGluZGV4ID49IG1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBpZiAoaXNuYW4odmFsdWUpKSAvLyBDbGFtcCBOYU4gdG8gMAorICAgICAg
ICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dW5zaWduZWQgY2hhcj46Om1pbigpKQorICAgICAgICAgICAgICAgIHZhbHVlID0g
c3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBjaGFyPjo6bWluKCk7CisgICAgICAgICAgICBl
bHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj46Om1heCgp
KQorICAgICAgICAgICAgICAgIHZhbHVlID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBj
aGFyPjo6bWF4KCk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBzdG9yYWdlID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAgICAgc3RvcmFn
ZVtpbmRleF0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih2YWx1ZSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgZ2V0KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjaGFy
JiByZXN1bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3Np
emUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0ID0g
aXRlbShpbmRleCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgY2hhciBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICAgICAg
dW5zaWduZWQgY2hhciogc3RvcmFnZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtX2Jh
c2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkoUGFzc1Jl
ZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5n
dGgpOworICAgICAgICB1bnNpZ25lZCBtX3NpemU7CisgICAgfTsKKyAgICAKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5X2gKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5oCShyZXZpc2lv
biA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTAgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaAotI2RlZmluZSBDYW52YXNVbnNp
Z25lZEJ5dGVBcnJheV9oCisjaWZuZGVmIFdlYkdMVW5zaWduZWRCeXRlQXJyYXlfaAorI2RlZmlu
ZSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5X2gKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisj
aW5jbHVkZSAiV2ViR0xBcnJheS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNCwxMyArMzQs
MTMgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENhbnZhc1Vuc2ln
bmVkQnl0ZUFycmF5IDogcHVibGljIENhbnZhc0FycmF5IHsKKyAgICBjbGFzcyBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5IDogcHVibGljIFdlYkdMQXJyYXkgewogICAgIHB1YmxpYzoKICAgICAgICAg
dmlydHVhbCBib29sIGlzVW5zaWduZWRCeXRlQXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNV
bnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGNoYXIqIGFycmF5LCB1bnNpZ25lZCBs
ZW5ndGgpOwotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJh
eT4gY3JlYXRlKFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xVbnNp
Z25lZEJ5dGVBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMVW5zaWduZWRCeXRlQXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBjaGFyKiBh
cnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheT4gY3JlYXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVm
ZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oYmFzZUFkZHJl
c3MoKSk7IH0KICAgICAgICAgCkBAIC03NywxMCArNzcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBDYW52YXNVbnNpZ25lZEJ5dGVB
cnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgICAgIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoUGFzc1JlZlB0
cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7
CiAgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB9OwogICAgIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlfaAorI2VuZGlmIC8v
IFdlYkdMVW5zaWduZWRCeXRlQXJyYXlfaApJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEJ5dGVBcnJheS5pZGw6NTA1NzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBIYXNOdW1lcmljSW5k
ZXhHZXR0ZXIsCisgICAgICAgIEhhc0N1c3RvbUluZGV4U2V0dGVyLAorICAgICAgICBHZW5lcmF0
ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKKyAg
ICAgICAgQ3VzdG9tVG9KUworICAgIF0gQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkgOiBDYW52YXNB
cnJheSB7CisgICAgfTsKK30KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVu
c2lnbmVkQnl0ZUFycmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICsz
MSw2IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgR2VuZXJhdGVOYXRpdmVDb252ZXJ0ZXIsCiAg
ICAgICAgIEdlbmVyYXRlQ3VzdG9tQ29uc3RydWN0b3IsCiAgICAgICAgIEN1c3RvbVRvSlMKLSAg
ICBdIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IDogQ2FudmFzQXJyYXkgeworICAgIF0gV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSA6IFdlYkdMQXJyYXkgewogICAgIH07CiB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1MDU3
NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNVbnNpZ25lZEludEFycmF5LmNwcDo1
MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKworI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVm
ZmVyLmgiCisjaW5jbHVkZSAiQ2FudmFzVW5zaWduZWRJbnRBcnJheS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBD
YW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZl
cjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxDYW52
YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWdu
ZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgUmVmUHRyPENh
bnZhc1Vuc2lnbmVkSW50QXJyYXk+IGEgPSBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUo
bGVuZ3RoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgYS0+c2V0KGksIGFycmF5W2ldKTsKKyAgICAgICAgcmV0dXJuIGE7CisgICAg
fQorCisgICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNVbnNpZ25l
ZEludEFycmF5OjpjcmVhdGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoKQor
ICAgIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvZmZzZXQgcmVzdWx0cyBpbiB2YWxpZCBh
bGlnbm1lbnQuCisgICAgICAgIGlmICgob2Zmc2V0ICUgc2l6ZW9mKHVuc2lnbmVkIGludCkpICE9
IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGJ1ZmZlcikgeworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGFyZSB0YWxr
aW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCisgICAgICAgICAgICAvLyB0aGUgZ2l2ZW4gQ2Fu
dmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICAgICAgaWYgKChvZmZzZXQgKyAobGVu
Z3RoICogc2l6ZW9mKHVuc2lnbmVkIGludCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDYW52YXNVbnNpZ25lZEludEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgp
KTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6Q2FudmFzVW5zaWdu
ZWRJbnRBcnJheShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCkKKyAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIsIG9mZnNl
dCkKKyAgICAgICAgLCBtX3NpemUobGVuZ3RoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgICAgICBy
ZXR1cm4gbV9zaXplOworICAgIH0KKyAgICAgICAgCisgICAgdW5zaWduZWQgQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBjb25zdCB7CisgICAgICAgIHJldHVybiBsZW5ndGgo
KSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOworICAgIH0KK30KKworI2VuZGlmIC8vIEVOQUJMRSgz
RF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJh
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50
QXJyYXkuY3BwCShyZXZpc2lvbiA1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsMjYgKzI3LDI2IEBACiAK
ICNpZiBFTkFCTEUoM0RfQ0FOVkFTKQogCi0jaW5jbHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIK
LSNpbmNsdWRlICJDYW52YXNVbnNpZ25lZEludEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJh
eUJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMVW5zaWduZWRJbnRBcnJheS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCi0gICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5
PiBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIFBh
c3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlC
dWZmZXI+IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9m
KHVuc2lnbmVkIGludCkpOworICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gV2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQp
KTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIsIDAsIGxlbmd0aCk7CiAgICAgfQogCi0g
ICAgUGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNVbnNpZ25lZEludEFy
cmF5OjpjcmVhdGUodW5zaWduZWQgaW50KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKQorICAgIFBh
c3NSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNy
ZWF0ZSh1bnNpZ25lZCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewotICAgICAg
ICBSZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gYSA9IENhbnZhc1Vuc2lnbmVkSW50QXJy
YXk6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEludEFycmF5
PiBhID0gV2ViR0xVbnNpZ25lZEludEFycmF5OjpjcmVhdGUobGVuZ3RoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgYS0+c2V0KGks
IGFycmF5W2ldKTsKICAgICAgICAgcmV0dXJuIGE7CiAgICAgfQogCi0gICAgUGFzc1JlZlB0cjxD
YW52YXNVbnNpZ25lZEludEFycmF5PiBDYW52YXNVbnNpZ25lZEludEFycmF5OjpjcmVhdGUoUGFz
c1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgIFBhc3NSZWZQdHI8V2ViR0xV
bnNpZ25lZEludEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRy
PFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CkBAIC01NywyNSArNTcsMjUgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGlmIChidWZmZXIpIHsKICAgICAgICAgICAgIC8v
IENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBhYm91dCBhIHZhbGlkIHJlZ2lvbiBv
ZgotICAgICAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0FycmF5QnVmZmVyJ3Mgc3RvcmFnZS4K
KyAgICAgICAgICAgIC8vIHRoZSBnaXZlbiBXZWJHTEFycmF5QnVmZmVyJ3Mgc3RvcmFnZS4KICAg
ICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBpbnQpKSkg
PiBidWZmZXItPmJ5dGVMZW5ndGgoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAg
ICAgICAgfQogCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzVW5zaWduZWRJbnRB
cnJheShidWZmZXIsIG9mZnNldCwgbGVuZ3RoKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV2ViR0xVbnNpZ25lZEludEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKICAgICB9
CiAgICAgCi0gICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheTo6Q2FudmFzVW5zaWduZWRJbnRBcnJh
eShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2ln
bmVkIGxlbmd0aCkKLSAgICAgICAgOiBDYW52YXNBcnJheShidWZmZXIsIG9mZnNldCkKKyAgICBX
ZWJHTFVuc2lnbmVkSW50QXJyYXk6OldlYkdMVW5zaWduZWRJbnRBcnJheShQYXNzUmVmUHRyPFdl
YkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQorICAg
ICAgICA6IFdlYkdMQXJyYXkoYnVmZmVyLCBvZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxlbmd0
aCkKICAgICB7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkSW50QXJy
YXk6Omxlbmd0aCgpIGNvbnN0IHsKKyAgICB1bnNpZ25lZCBXZWJHTFVuc2lnbmVkSW50QXJyYXk6
Omxlbmd0aCgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKICAgICB9CiAgICAgICAg
IAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkSW50QXJyYXk6OnNpemVJbkJ5dGVzKCkgY29u
c3QgeworICAgIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRJbnRBcnJheTo6c2l6ZUluQnl0ZXMoKSBj
b25zdCB7CiAgICAgICAgIHJldHVybiBsZW5ndGgoKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwog
ICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJy
YXkuaAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5z
aWduZWRJbnRBcnJheS5oOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkSW50QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBDYW52YXNVbnNpZ25lZEludEFycmF5X2gKKyNkZWZpbmUgQ2FudmFzVW5zaWduZWRJ
bnRBcnJheV9oCisKKyNpbmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgPGxpbWl0cz4K
KyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAg
IAorICAgIGNsYXNzIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJyYXkg
eworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRJbnRBcnJheSgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52
YXNVbnNpZ25lZEludEFycmF5PiBjcmVhdGUodW5zaWduZWQgbGVuZ3RoKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGlu
dCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENh
bnZhc1Vuc2lnbmVkSW50QXJyYXk+IGNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVy
PiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisKKyAgICAgICAgdW5zaWdu
ZWQgaW50KiBkYXRhKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Kj4oYmFzZUFk
ZHJlc3MoKSk7IH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgc2l6ZUluQnl0ZXMoKSBjb25zdDsKKwor
ICAgICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9zaXplKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIGlmIChpc25hbih2YWx1ZSkpIC8vIENsYW1wIE5hTiB0byAwCisgICAg
ICAgICAgICAgICAgdmFsdWUgPSAwOworICAgICAgICAgICAgaWYgKHZhbHVlIDwgc3RkOjpudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptaW4oKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWluKCk7CisgICAgICAgICAgICBl
bHNlIGlmICh2YWx1ZSA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4KCkp
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGlu
dD46Om1heCgpOworICAgICAgICAgICAgdW5zaWduZWQgaW50KiBzdG9yYWdlID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Kj4obV9iYXNlQWRkcmVzcyk7CisgICAgICAgICAgICBzdG9yYWdlW2lu
ZGV4XSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIGdldCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgaW50JiByZXN1
bHQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmVzdWx0ID0gaXRlbShp
bmRleCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdW5zaWduZWQgaW50IGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQqIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQqPihtX2Jhc2VBZGRyZXNz
KTsKKyAgICAgICAgICAgIHJldHVybiBzdG9yYWdlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgQ2FudmFzVW5zaWduZWRJbnRBcnJheShQYXNzUmVmUHRyPENhbnZh
c0FycmF5QnVmZmVyPiBidWZmZXIsIGludCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAg
ICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB9OworICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gQ2FudmFzVW5zaWduZWRJbnRBcnJheV9oCkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaAkod29ya2luZyBjb3B5
KQpAQCAtMjMsMTAgKzIzLDEwIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIENh
bnZhc1Vuc2lnbmVkSW50QXJyYXlfaAotI2RlZmluZSBDYW52YXNVbnNpZ25lZEludEFycmF5X2gK
KyNpZm5kZWYgV2ViR0xVbnNpZ25lZEludEFycmF5X2gKKyNkZWZpbmUgV2ViR0xVbnNpZ25lZElu
dEFycmF5X2gKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJh
eS5oIgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CkBAIC0zNCwxMyArMzQsMTMgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIAotICAgIGNsYXNzIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkgOiBwdWJs
aWMgQ2FudmFzQXJyYXkgeworICAgIGNsYXNzIFdlYkdMVW5zaWduZWRJbnRBcnJheSA6IHB1Ymxp
YyBXZWJHTEFycmF5IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2ln
bmVkSW50QXJyYXkoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzVW5zaWduZWRJbnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7
Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkSW50QXJyYXk+IGNyZWF0
ZSh1bnNpZ25lZCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDYW52YXNVbnNpZ25lZEludEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52
YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IGNyZWF0ZSh1bnNp
Z25lZCBsZW5ndGgpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50
QXJyYXk+IGNyZWF0ZSh1bnNpZ25lZCBpbnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkSW50QXJyYXk+IGNyZWF0ZShQYXNz
UmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwgaW50IG9mZnNldCwgdW5zaWduZWQgbGVu
Z3RoKTsKIAogICAgICAgICB1bnNpZ25lZCBpbnQqIGRhdGEoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQqPihiYXNlQWRkcmVzcygpKTsgfQogICAgICAgICAKQEAgLTc3LDEwICs3
NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIENhbnZhc1Vuc2lnbmVkSW50QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZl
cj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBXZWJHTFVu
c2lnbmVkSW50QXJyYXkoUGFzc1JlZlB0cjxXZWJHTEFycmF5QnVmZmVyPiBidWZmZXIsIGludCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKICAgICB9
OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ2FudmFzVW5zaWdu
ZWRJbnRBcnJheV9oCisjZW5kaWYgLy8gV2ViR0xVbnNpZ25lZEludEFycmF5X2gKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5pZGwJKHJldmlzaW9u
IDUwNTc1KQkoZnJvbSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Vuc2lnbmVkSW50QXJyYXku
aWRsOjUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXku
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCittb2R1bGUgaHRt
bCB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29uZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAg
ICAgICBIYXNOdW1lcmljSW5kZXhHZXR0ZXIsCisgICAgICAgIEhhc0N1c3RvbUluZGV4U2V0dGVy
LAorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRlciwKKyAgICAgICAgR2VuZXJhdGVDdXN0
b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ3VzdG9tVG9KUworICAgIF0gQ2FudmFzVW5zaWduZWRJ
bnRBcnJheSA6IENhbnZhc0FycmF5IHsKKyAgICB9OworfQpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDYgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBHZW5lcmF0ZU5hdGl2
ZUNvbnZlcnRlciwKICAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKICAgICAgICAg
Q3VzdG9tVG9KUwotICAgIF0gQ2FudmFzVW5zaWduZWRJbnRBcnJheSA6IENhbnZhc0FycmF5IHsK
KyAgICBdIFdlYkdMVW5zaWduZWRJbnRBcnJheSA6IFdlYkdMQXJyYXkgewogICAgIH07CiB9Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNw
cAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5LmNwcDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorCisjaW5j
bHVkZSAiQ2FudmFzQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIFBhc3NSZWZQdHI8Q2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5PiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZSh1
bnNpZ25lZCBsZW5ndGgpCisgICAgeworICAgICAgICBSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+
IGJ1ZmZlciA9IENhbnZhc0FycmF5QnVmZmVyOjpjcmVhdGUobGVuZ3RoICogc2l6ZW9mKHVuc2ln
bmVkIHNob3J0KSk7CisgICAgICAgIHJldHVybiBjcmVhdGUoYnVmZmVyLCAwLCBsZW5ndGgpOwor
ICAgIH0KKworICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBzaG9ydCogYXJyYXksIHVuc2lnbmVk
IGxlbmd0aCkKKyAgICB7CisgICAgICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+
IGEgPSBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBhLT5zZXQo
aSwgYXJyYXlbaV0pOworICAgICAgICByZXR1cm4gYTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRy
PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpjcmVh
dGUoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCisgICAgewor
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9mZnNldCByZXN1bHRzIGluIHZhbGlkIGFsaWdubWVu
dC4KKyAgICAgICAgaWYgKChvZmZzZXQgJSBzaXplb2YodW5zaWduZWQgc2hvcnQpKSAhPSAwKSB7
CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChidWZm
ZXIpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgdGFsa2luZyBh
Ym91dCBhIHZhbGlkIHJlZ2lvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGdpdmVuIENhbnZhc0Fy
cmF5QnVmZmVyJ3Mgc3RvcmFnZS4KKyAgICAgICAgICAgIGlmICgob2Zmc2V0ICsgKGxlbmd0aCAq
IHNpemVvZih1bnNpZ25lZCBzaG9ydCkpKSA+IGJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKSAKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgp
KTsKKyAgICB9CisgICAgCisgICAgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXkoUGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGgpCisgICAg
ICAgIDogQ2FudmFzQXJyYXkoYnVmZmVyLCBvZmZzZXQpCisgICAgICAgICwgbV9zaXplKGxlbmd0
aCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheTo6bGVuZ3RoKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9zaXplOworICAgIH0KKyAg
ICAgICAgCisgICAgdW5zaWduZWQgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpzaXplSW5CeXRl
cygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5jcHAJKHJldmlz
aW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDI2ICsyNywyNiBAQAogCiAjaWYgRU5BQkxFKDNE
X0NBTlZBUykKIAotI2luY2x1ZGUgIkNhbnZhc0FycmF5QnVmZmVyLmgiCi0jaW5jbHVkZSAiQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xBcnJheUJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAKLSAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gQ2FudmFz
VW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgbGVuZ3RoKQorICAgIFBhc3NSZWZQ
dHI8V2ViR0xVbnNpZ25lZFNob3J0QXJyYXk+IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVh
dGUodW5zaWduZWQgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgUmVmUHRyPENhbnZhc0FycmF5QnVm
ZmVyPiBidWZmZXIgPSBDYW52YXNBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1
bnNpZ25lZCBzaG9ydCkpOworICAgICAgICBSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVy
ID0gV2ViR0xBcnJheUJ1ZmZlcjo6Y3JlYXRlKGxlbmd0aCAqIHNpemVvZih1bnNpZ25lZCBzaG9y
dCkpOwogICAgICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKICAgICB9CiAK
LSAgICBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5OjpjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgp
CisgICAgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXk6OmNyZWF0ZSh1bnNpZ25lZCBzaG9ydCogYXJyYXksIHVuc2lnbmVkIGxlbmd0aCkK
ICAgICB7Ci0gICAgICAgIFJlZlB0cjxDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk+IGEgPSBDYW52
YXNVbnNpZ25lZFNob3J0QXJyYXk6OmNyZWF0ZShsZW5ndGgpOworICAgICAgICBSZWZQdHI8V2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXk+IGEgPSBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6Y3JlYXRl
KGxlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkK
ICAgICAgICAgICAgIGEtPnNldChpLCBhcnJheVtpXSk7CiAgICAgICAgIHJldHVybiBhOwogICAg
IH0KIAotICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBDYW52YXNVbnNp
Z25lZFNob3J0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPENhbnZhc0FycmF5QnVmZmVyPiBidWZm
ZXIsCisgICAgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXk6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+IGJ1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKQogICAgIHsKQEAgLTU3LDI3ICs1NywyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgaWYgKGJ1ZmZlcikgewogICAgICAgICAgICAgLy8gQ2hlY2sgdG8gbWFrZSBzdXJl
IHdlIGFyZSB0YWxraW5nIGFib3V0IGEgdmFsaWQgcmVnaW9uIG9mCi0gICAgICAgICAgICAvLyB0
aGUgZ2l2ZW4gQ2FudmFzQXJyYXlCdWZmZXIncyBzdG9yYWdlLgorICAgICAgICAgICAgLy8gdGhl
IGdpdmVuIFdlYkdMQXJyYXlCdWZmZXIncyBzdG9yYWdlLgogICAgICAgICAgICAgaWYgKChvZmZz
ZXQgKyAobGVuZ3RoICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSkpID4gYnVmZmVyLT5ieXRlTGVu
Z3RoKCkpIAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoYnVmZmVyLCBv
ZmZzZXQsIGxlbmd0aCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVW5zaWdu
ZWRTaG9ydEFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgpKTsKICAgICB9CiAgICAgCi0gICAg
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5OjpDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoUGFzc1Jl
ZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLAorICAgIFdlYkdMVW5zaWduZWRTaG9ydEFy
cmF5OjpXZWJHTFVuc2lnbmVkU2hvcnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKQotICAgICAgICA6IENhbnZhc0FycmF5KGJ1ZmZlciwgb2Zmc2V0KQorICAgICAgICA6
IFdlYkdMQXJyYXkoYnVmZmVyLCBvZmZzZXQpCiAgICAgICAgICwgbV9zaXplKGxlbmd0aCkKICAg
ICB7CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheTo6
bGVuZ3RoKCkgY29uc3QgeworICAgIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5Ojps
ZW5ndGgoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtX3NpemU7CiAgICAgfQogICAgICAgICAK
LSAgICB1bnNpZ25lZCBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXk6OnNpemVJbkJ5dGVzKCkgY29u
c3QgeworICAgIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpzaXplSW5CeXRlcygp
IGNvbnN0IHsKICAgICAgICAgcmV0dXJuIGxlbmd0aCgpICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KTsKICAgICB9CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVk
U2hvcnRBcnJheS5oCShyZXZpc2lvbiA1MDU3NSkJKGZyb20gV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNVbnNpZ25lZFNob3J0QXJyYXkuaDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlfaAorI2RlZmluZSBD
YW52YXNVbnNpZ25lZFNob3J0QXJyYXlfaAorCisjaW5jbHVkZSAiQ2FudmFzQXJyYXkuaCIKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKKyAgICBjbGFzcyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkgOiBw
dWJsaWMgQ2FudmFzQXJyYXkgeworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlz
VW5zaWduZWRTaG9ydEFycmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRB
cnJheT4gY3JlYXRlKHVuc2lnbmVkIHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUo
UGFzc1JlZlB0cjxDYW52YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworCisgICAgICAgIHVuc2lnbmVkIHNob3J0KiBkYXRhKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihiYXNlQWRkcmVzcygpKTsgfQorICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB1
bnNpZ25lZCBzaXplSW5CeXRlcygpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0KHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+
PSBtX3NpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGlzbmFu
KHZhbHVlKSkgLy8gQ2xhbXAgTmFOIHRvIDAKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7Cisg
ICAgICAgICAgICBpZiAodmFsdWUgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0
Pjo6bWluKCkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIHNob3J0Pjo6bWluKCk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+OjptYXgoKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hv
cnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHN0b3JhZ2VbaW5kZXhdID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBnZXQodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIHNob3J0JiByZXN1bHQpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBtX3NpemUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQqIHN0b3JhZ2Ug
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KG1fYmFzZUFkZHJlc3MpOworICAgICAgICAg
ICAgcmVzdWx0ID0gc3RvcmFnZVtpbmRleF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgaXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9zaXpl
KTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihtX2Jhc2VBZGRyZXNzKTsKKyAgICAgICAgICAgIHJldHVybiBzdG9yYWdl
W2luZGV4XTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ2FudmFzVW5zaWdu
ZWRTaG9ydEFycmF5KFBhc3NSZWZQdHI8Q2FudmFzQXJyYXlCdWZmZXI+IGJ1ZmZlcixpbnQgb2Zm
c2V0LHVuc2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHVuc2lnbmVkIG1fc2l6ZTsKKyAgICB9Owor
ICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5X2gKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRT
aG9ydEFycmF5LmgJKHJldmlzaW9uIDUwNTc1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkU2hvcnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTAgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
X2gKLSNkZWZpbmUgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5X2gKKyNpZm5kZWYgV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXlfaAorI2RlZmluZSBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheV9oCiAKLSNp
bmNsdWRlICJDYW52YXNBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMQXJyYXkuaCIKICNpbmNsdWRl
IDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgpAQCAtMzQsMTMgKzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAKLSAgICBjbGFzcyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkgOiBwdWJsaWMgQ2FudmFzQXJy
YXkgeworICAgIGNsYXNzIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IDogcHVibGljIFdlYkdMQXJy
YXkgewogICAgIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRTaG9ydEFy
cmF5KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRlKHVuc2lnbmVkIGxlbmd0aCk7Ci0gICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIHNob3J0KiBhcnJheSwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5PiBjcmVhdGUoUGFzc1JlZlB0cjxDYW52
YXNBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gY3JlYXRlKHVu
c2lnbmVkIGxlbmd0aCk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5PiBjcmVhdGUodW5zaWduZWQgc2hvcnQqIGFycmF5LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFVuc2lnbmVkU2hvcnRBcnJheT4gY3Jl
YXRlKFBhc3NSZWZQdHI8V2ViR0xBcnJheUJ1ZmZlcj4gYnVmZmVyLCBpbnQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOwogCiAgICAgICAgIHVuc2lnbmVkIHNob3J0KiBkYXRhKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQqPihiYXNlQWRkcmVzcygpKTsgfQogICAgICAgICAK
QEAgLTc4LDEwICs3OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIH0KIAogICAg
IHByaXZhdGU6Ci0gICAgICAgIENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShQYXNzUmVmUHRyPENh
bnZhc0FycmF5QnVmZmVyPiBidWZmZXIsaW50IG9mZnNldCx1bnNpZ25lZCBsZW5ndGgpOworICAg
ICAgICBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheShQYXNzUmVmUHRyPFdlYkdMQXJyYXlCdWZmZXI+
IGJ1ZmZlcixpbnQgb2Zmc2V0LHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgICAgIHVuc2lnbmVkIG1f
c2l6ZTsKICAgICB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8g
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5X2gKKyNlbmRpZiAvLyBXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheV9oCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5
LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCShmcm9tIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzVW5zaWduZWRTaG9ydEFycmF5LmlkbDo1MDU3NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCittb2R1bGUgaHRtbCB7CisgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQ29u
ZGl0aW9uYWw9M0RfQ0FOVkFTLAorICAgICAgICBIYXNOdW1lcmljSW5kZXhHZXR0ZXIsCisgICAg
ICAgIEhhc0N1c3RvbUluZGV4U2V0dGVyLAorICAgICAgICBHZW5lcmF0ZU5hdGl2ZUNvbnZlcnRl
ciwKKyAgICAgICAgR2VuZXJhdGVDdXN0b21Db25zdHJ1Y3RvciwKKyAgICAgICAgQ3VzdG9tVG9K
UworICAgIF0gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5IDogQ2FudmFzQXJyYXkgeworICAgIH07
Cit9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5Lmlk
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFy
cmF5LmlkbAkocmV2aXNpb24gNTA1NzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5z
aWduZWRTaG9ydEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNiBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgIEdlbmVyYXRlTmF0aXZlQ29udmVydGVyLAogICAgICAgICBHZW5l
cmF0ZUN1c3RvbUNvbnN0cnVjdG9yLAogICAgICAgICBDdXN0b21Ub0pTCi0gICAgXSBDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkgOiBDYW52YXNBcnJheSB7CisgICAgXSBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheSA6IFdlYkdMQXJyYXkgewogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL21hbnVhbC10
ZXN0cy93ZWJnbC9FYXJ0aC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3Rz
L3dlYmdsL0VhcnRoLmh0bWwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9tYW51YWwtdGVz
dHMvd2ViZ2wvRWFydGguaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDE4ICsxMDUsMTggQEAK
ICAgICAgICAgICAgIG12TWF0cml4LnJvdGF0ZShhbmdsZSwgMCwxLDApOwogICAgICAgICAgICAg
bXZNYXRyaXgucm90YXRlKDMwLCAxLDAsMCk7CiAgICAgICAgICAgICBtdk1hdHJpeC50cmFuc2xh
dGUoeCx5LHopOwotICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4LmdldFVuaWZv
cm1Mb2NhdGlvbihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3TWF0cml4IiksIGZhbHNlLCBtdk1h
dHJpeC5nZXRBc0NhbnZhc0Zsb2F0QXJyYXkoKSk7CisgICAgICAgICAgICBjdHgudW5pZm9ybU1h
dHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZpZXdN
YXRyaXgiKSwgZmFsc2UsIG12TWF0cml4LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAgICAg
ICAgICAgICAvLyBjb25zdHJ1Y3QgdGhlIG5vcm1hbCBtYXRyaXggZnJvbSB0aGUgbW9kZWwtdmll
dyBtYXRyaXgKICAgICAgICAgICAgIHZhciBub3JtYWxNYXRyaXggPSBuZXcgQ2FudmFzTWF0cml4
NChtdk1hdHJpeCk7CiAgICAgICAgICAgICBub3JtYWxNYXRyaXguaW52ZXJ0KCk7CiAgICAgICAg
ICAgICBub3JtYWxNYXRyaXgudHJhbnNwb3NlKCk7Ci0gICAgICAgICAgICBjdHgudW5pZm9ybU1h
dHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9ub3JtYWxNYXRy
aXgiKSwgZmFsc2UsIG5vcm1hbE1hdHJpeC5nZXRBc0NhbnZhc0Zsb2F0QXJyYXkoKSk7CisgICAg
ICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5w
cm9ncmFtLCAidV9ub3JtYWxNYXRyaXgiKSwgZmFsc2UsIG5vcm1hbE1hdHJpeC5nZXRBc1dlYkdM
RmxvYXRBcnJheSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gY29uc3RydWN0IHRo
ZSBtb2RlbC12aWV3ICogcHJvamVjdGlvbiBtYXRyaXgKICAgICAgICAgICAgIHZhciBtdnBNYXRy
aXggPSBuZXcgQ2FudmFzTWF0cml4NChtdk1hdHJpeCk7CiAgICAgICAgICAgICBtdnBNYXRyaXgu
bXVsdFJpZ2h0KGN0eC5wZXJzcGVjdGl2ZU1hdHJpeCk7Ci0gICAgICAgICAgICBjdHgudW5pZm9y
bU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZp
ZXdQcm9qTWF0cml4IiksIGZhbHNlLCBtdnBNYXRyaXguZ2V0QXNDYW52YXNGbG9hdEFycmF5KCkp
OworICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4LmdldFVuaWZvcm1Mb2NhdGlv
bihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3UHJvak1hdHJpeCIpLCBmYWxzZSwgbXZwTWF0cml4
LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAgICAgICAgICAgICBjdHguYmluZFRleHR1cmUo
Y3R4LlRFWFRVUkVfMkQsIHRleHR1cmUpOwogICAgICAgICAgICAgY3R4LmRyYXdFbGVtZW50cyhj
dHguVFJJQU5HTEVTLCBjdHguc3BoZXJlLm51bUluZGljZXMsIGN0eC5VTlNJR05FRF9TSE9SVCwg
MCk7CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9NYW55UGxhbmV0c0RlZXAuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9NYW55UGxhbmV0c0Rl
ZXAuaHRtbAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9N
YW55UGxhbmV0c0RlZXAuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDE4ICsxMTMsMTggQEAK
ICAgICAgICAgICAgIG12TWF0cml4LnJvdGF0ZShhbmdsZSwgMCwxLDApOwogICAgICAgICAgICAg
bXZNYXRyaXgucm90YXRlKDMwLCAxLDAsMCk7CiAgICAgICAgICAgICBtdk1hdHJpeC50cmFuc2xh
dGUoeCx5LHopOwotICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4LmdldFVuaWZv
cm1Mb2NhdGlvbihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3TWF0cml4IiksIGZhbHNlLCBtdk1h
dHJpeC5nZXRBc0NhbnZhc0Zsb2F0QXJyYXkoKSk7CisgICAgICAgICAgICBjdHgudW5pZm9ybU1h
dHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZpZXdN
YXRyaXgiKSwgZmFsc2UsIG12TWF0cml4LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAgICAg
ICAgICAgICAvLyBjb25zdHJ1Y3QgdGhlIG5vcm1hbCBtYXRyaXggZnJvbSB0aGUgbW9kZWwtdmll
dyBtYXRyaXgKICAgICAgICAgICAgIHZhciBub3JtYWxNYXRyaXggPSBuZXcgQ2FudmFzTWF0cml4
NChtdk1hdHJpeCk7CiAgICAgICAgICAgICBub3JtYWxNYXRyaXguaW52ZXJ0KCk7CiAgICAgICAg
ICAgICBub3JtYWxNYXRyaXgudHJhbnNwb3NlKCk7Ci0gICAgICAgICAgICBjdHgudW5pZm9ybU1h
dHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9ub3JtYWxNYXRy
aXgiKSwgZmFsc2UsIG5vcm1hbE1hdHJpeC5nZXRBc0NhbnZhc0Zsb2F0QXJyYXkoKSk7CisgICAg
ICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5w
cm9ncmFtLCAidV9ub3JtYWxNYXRyaXgiKSwgZmFsc2UsIG5vcm1hbE1hdHJpeC5nZXRBc1dlYkdM
RmxvYXRBcnJheSgpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gY29uc3RydWN0IHRo
ZSBtb2RlbC12aWV3ICogcHJvamVjdGlvbiBtYXRyaXgKICAgICAgICAgICAgIHZhciBtdnBNYXRy
aXggPSBuZXcgQ2FudmFzTWF0cml4NChtdk1hdHJpeCk7CiAgICAgICAgICAgICBtdnBNYXRyaXgu
bXVsdFJpZ2h0KGN0eC5wZXJzcGVjdGl2ZU1hdHJpeCk7Ci0gICAgICAgICAgICBjdHgudW5pZm9y
bU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZp
ZXdQcm9qTWF0cml4IiksIGZhbHNlLCBtdnBNYXRyaXguZ2V0QXNDYW52YXNGbG9hdEFycmF5KCkp
OworICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4LmdldFVuaWZvcm1Mb2NhdGlv
bihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3UHJvak1hdHJpeCIpLCBmYWxzZSwgbXZwTWF0cml4
LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAgICAgICAgICAgICBjdHguYmluZFRleHR1cmUo
Y3R4LlRFWFRVUkVfMkQsIHRleHR1cmUpOwogICAgICAgICAgICAgY3R4LmRyYXdFbGVtZW50cyhj
dHguVFJJQU5HTEVTLCBjdHguc3BoZXJlLm51bUluZGljZXMsIGN0eC5VTlNJR05FRF9TSE9SVCwg
MCk7CkluZGV4OiBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9TcGlubmluZ0JveC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvbWFudWFsLXRlc3RzL3dlYmdsL1NwaW5uaW5nQm94Lmh0bWwJ
KHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9tYW51YWwtdGVzdHMvd2ViZ2wvU3Bpbm5pbmdC
b3guaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQAogICAgICAgICAgICAgZ2wu
Ym94ID0gbWFrZUJveChnbCk7CiAKICAgICAgICAgICAgIC8vIGNvbG9yIGFycmF5Ci0gICAgICAg
ICAgICB2YXIgY29sb3JzID0gbmV3IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5KAorICAgICAgICAg
ICAgdmFyIGNvbG9ycyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KAogICAgICAgICAgICAg
ICAgIFsgIDAsIDAsIDEsIDEsICAgMCwgMCwgMSwgMSwgICAwLCAwLCAxLCAxLCAgIDAsIDAsIDEs
IDEsICAgICAvLyB2MC12MS12Mi12MyBmcm9udAogICAgICAgICAgICAgICAgICAgIDEsIDAsIDAs
IDEsICAgMSwgMCwgMCwgMSwgICAxLCAwLCAwLCAxLCAgIDEsIDAsIDAsIDEsICAgICAvLyB2MC12
My12NC12NSByaWdodAogICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDEsICAgMCwgMSwgMCwg
MSwgICAwLCAxLCAwLCAxLCAgIDAsIDEsIDAsIDEsICAgICAvLyB2MC12NS12Ni12MSB0b3AKQEAg
LTc3LDcgKzc3LDcgQEAKICAgICAgICAgICAgIHZhciBwTWF0cml4ID0gbmV3IENhbnZhc01hdHJp
eDQoKTsKICAgICAgICAgICAgIHBNYXRyaXgubG9va2F0KDAsMCwxMCwgMCwgMCwgMCwgMCwgMSwg
MCk7CiAgICAgICAgICAgICBwTWF0cml4LnBlcnNwZWN0aXZlKDMwLCB3aWR0aC9oZWlnaHQsIDEs
IDEwMDAwKTsKLSAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoZ2wuZ2V0VW5pZm9ybUxv
Y2F0aW9uKGdsLnByb2dyYW0sICJwTWF0cml4IiksIGZhbHNlLCBwTWF0cml4LmdldEFzQ2FudmFz
RmxvYXRBcnJheSgpKTsKKyAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoZ2wuZ2V0VW5p
Zm9ybUxvY2F0aW9uKGdsLnByb2dyYW0sICJwTWF0cml4IiksIGZhbHNlLCBwTWF0cml4LmdldEFz
V2ViR0xGbG9hdEFycmF5KCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmdW5jdGlv
biBkcmF3UGljdHVyZShnbCkKQEAgLTg4LDcgKzg4LDcgQEAKICAgICAgICAgICAgIHZhciBtdk1h
dHJpeCA9IG5ldyBDYW52YXNNYXRyaXg0KCk7CiAgICAgICAgICAgICBtdk1hdHJpeC5yb3RhdGUo
Y3VycmVudEFuZ2xlLCAwLDEsMCk7CiAgICAgICAgICAgICBtdk1hdHJpeC5yb3RhdGUoMjAsIDEs
MCwwKTsKLSAgICAgICAgICAgIGdsLnVuaWZvcm1NYXRyaXg0ZnYoZ2wuZ2V0VW5pZm9ybUxvY2F0
aW9uKGdsLnByb2dyYW0sICJtdk1hdHJpeCIpLCBmYWxzZSwgbXZNYXRyaXguZ2V0QXNDYW52YXNG
bG9hdEFycmF5KCkpOworICAgICAgICAgICAgZ2wudW5pZm9ybU1hdHJpeDRmdihnbC5nZXRVbmlm
b3JtTG9jYXRpb24oZ2wucHJvZ3JhbSwgIm12TWF0cml4IiksIGZhbHNlLCBtdk1hdHJpeC5nZXRB
c1dlYkdMRmxvYXRBcnJheSgpKTsKIAogICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoMCk7CiAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKSW5k
ZXg6IFdlYkNvcmUvbWFudWFsLXRlc3RzL3dlYmdsL1RlYXBvdFBlclBpeGVsLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvd2ViZ2wvVGVhcG90UGVyUGl4ZWwuaHRtbAko
cmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9UZWFwb3RQZXJQ
aXhlbC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTYgKzI4MywxNiBAQAogICAgICAgICAg
ICAgbXZNYXRyaXgubWFrZUlkZW50aXR5KCk7CiAgICAgICAgICAgICBtdk1hdHJpeC5yb3RhdGUo
Y3VycmVudEFuZ2xlLCAwLCAxLCAwKTsKICAgICAgICAgICAgIG12TWF0cml4LnJvdGF0ZSgxMCwg
MSwwLDApOwotICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4LmdldFVuaWZvcm1M
b2NhdGlvbihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3TWF0cml4IiksIGZhbHNlLCBtdk1hdHJp
eC5nZXRBc0NhbnZhc0Zsb2F0QXJyYXkoKSk7CisgICAgICAgICAgICBjdHgudW5pZm9ybU1hdHJp
eDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZpZXdNYXRy
aXgiKSwgZmFsc2UsIG12TWF0cml4LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAgICAgICAg
ICAgICAvLyBjb25zdHJ1Y3QgdGhlIG5vcm1hbCBtYXRyaXggZnJvbSB0aGUgbW9kZWwtdmlldyBt
YXRyaXgKICAgICAgICAgICAgIG5vcm1hbE1hdHJpeC5sb2FkKG12TWF0cml4KTsKICAgICAgICAg
ICAgIG5vcm1hbE1hdHJpeC5pbnZlcnQoKTsKICAgICAgICAgICAgIG5vcm1hbE1hdHJpeC50cmFu
c3Bvc2UoKTsKLSAgICAgICAgICAgIGN0eC51bmlmb3JtTWF0cml4NGZ2KGN0eC5nZXRVbmlmb3Jt
TG9jYXRpb24oY3R4LnByb2dyYW0sICJ1X25vcm1hbE1hdHJpeCIpLCBmYWxzZSwgbm9ybWFsTWF0
cml4LmdldEFzQ2FudmFzRmxvYXRBcnJheSgpKTsKKyAgICAgICAgICAgIGN0eC51bmlmb3JtTWF0
cml4NGZ2KGN0eC5nZXRVbmlmb3JtTG9jYXRpb24oY3R4LnByb2dyYW0sICJ1X25vcm1hbE1hdHJp
eCIpLCBmYWxzZSwgbm9ybWFsTWF0cml4LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBtdk1hdHJpeC5tdWx0UmlnaHQoY3R4LnBlcnNwZWN0aXZlTWF0
cml4KTsKLSAgICAgICAgICAgIGN0eC51bmlmb3JtTWF0cml4NGZ2KGN0eC5nZXRVbmlmb3JtTG9j
YXRpb24oY3R4LnByb2dyYW0sICJ1X21vZGVsVmlld1Byb2pNYXRyaXgiKSwgZmFsc2UsIG12TWF0
cml4LmdldEFzQ2FudmFzRmxvYXRBcnJheSgpKTsKKyAgICAgICAgICAgIGN0eC51bmlmb3JtTWF0
cml4NGZ2KGN0eC5nZXRVbmlmb3JtTG9jYXRpb24oY3R4LnByb2dyYW0sICJ1X21vZGVsVmlld1By
b2pNYXRyaXgiKSwgZmFsc2UsIG12TWF0cml4LmdldEFzV2ViR0xGbG9hdEFycmF5KCkpOwogCiAg
ICAgICAgICAgICBjdHguZHJhd0VsZW1lbnRzKGN0eC5UUklBTkdMRVMsIG9iai5udW1JbmRpY2Vz
LCBjdHguVU5TSUdORURfU0hPUlQsIDApOwogICAgICAgICAgICAgCkluZGV4OiBXZWJDb3JlL21h
bnVhbC10ZXN0cy93ZWJnbC9UZWFwb3RQZXJWZXJ0ZXguaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL21hbnVhbC10ZXN0cy93ZWJnbC9UZWFwb3RQZXJWZXJ0ZXguaHRtbAkocmV2aXNpb24gNTA2
MzQpCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9UZWFwb3RQZXJWZXJ0ZXguaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMjU2LDE2ICsyNTYsMTYgQEAKICAgICAgICAgICAgIG12TWF0cml4
Lm1ha2VJZGVudGl0eSgpOwogICAgICAgICAgICAgbXZNYXRyaXgucm90YXRlKGN1cnJlbnRBbmds
ZSwgMCwgMSwgMCk7CiAgICAgICAgICAgICBtdk1hdHJpeC5yb3RhdGUoMTAsIDEsMCwwKTsKLSAg
ICAgICAgICAgIGN0eC51bmlmb3JtTWF0cml4NGZ2KGN0eC5nZXRVbmlmb3JtTG9jYXRpb24oY3R4
LnByb2dyYW0sICJ1X21vZGVsVmlld01hdHJpeCIpLCBmYWxzZSwgbXZNYXRyaXguZ2V0QXNDYW52
YXNGbG9hdEFycmF5KCkpOworICAgICAgICAgICAgY3R4LnVuaWZvcm1NYXRyaXg0ZnYoY3R4Lmdl
dFVuaWZvcm1Mb2NhdGlvbihjdHgucHJvZ3JhbSwgInVfbW9kZWxWaWV3TWF0cml4IiksIGZhbHNl
LCBtdk1hdHJpeC5nZXRBc1dlYkdMRmxvYXRBcnJheSgpKTsKIAogICAgICAgICAgICAgLy8gY29u
c3RydWN0IHRoZSBub3JtYWwgbWF0cml4IGZyb20gdGhlIG1vZGVsLXZpZXcgbWF0cml4CiAgICAg
ICAgICAgICBub3JtYWxNYXRyaXgubG9hZChtdk1hdHJpeCk7CiAgICAgICAgICAgICBub3JtYWxN
YXRyaXguaW52ZXJ0KCk7CiAgICAgICAgICAgICBub3JtYWxNYXRyaXgudHJhbnNwb3NlKCk7Ci0g
ICAgICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0
eC5wcm9ncmFtLCAidV9ub3JtYWxNYXRyaXgiKSwgZmFsc2UsIG5vcm1hbE1hdHJpeC5nZXRBc0Nh
bnZhc0Zsb2F0QXJyYXkoKSk7CisgICAgICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHgu
Z2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9ub3JtYWxNYXRyaXgiKSwgZmFsc2Us
IG5vcm1hbE1hdHJpeC5nZXRBc1dlYkdMRmxvYXRBcnJheSgpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbXZNYXRyaXgubXVsdFJpZ2h0KGN0eC5wZXJzcGVjdGl2ZU1hdHJpeCk7Ci0gICAg
ICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHguZ2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5w
cm9ncmFtLCAidV9tb2RlbFZpZXdQcm9qTWF0cml4IiksIGZhbHNlLCBtdk1hdHJpeC5nZXRBc0Nh
bnZhc0Zsb2F0QXJyYXkoKSk7CisgICAgICAgICAgICBjdHgudW5pZm9ybU1hdHJpeDRmdihjdHgu
Z2V0VW5pZm9ybUxvY2F0aW9uKGN0eC5wcm9ncmFtLCAidV9tb2RlbFZpZXdQcm9qTWF0cml4Iiks
IGZhbHNlLCBtdk1hdHJpeC5nZXRBc1dlYkdMRmxvYXRBcnJheSgpKTsKIAogICAgICAgICAgICAg
Y3R4LmRyYXdFbGVtZW50cyhjdHguVFJJQU5HTEVTLCBvYmoubnVtSW5kaWNlcywgY3R4LlVOU0lH
TkVEX1NIT1JULCAwKTsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMv
d2ViZ2wvcmVzb3VyY2VzL0NhbnZhc01hdHJpeC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL21h
bnVhbC10ZXN0cy93ZWJnbC9yZXNvdXJjZXMvQ2FudmFzTWF0cml4LmpzCShyZXZpc2lvbiA1MDYz
NCkKKysrIFdlYkNvcmUvbWFudWFsLXRlc3RzL3dlYmdsL3Jlc291cmNlcy9DYW52YXNNYXRyaXgu
anMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgdm9pZCBsb2FkKGlu
IENhbnZhc01hdHJpeDQgbWF0cml4KTsgICAgICAgICAgICAgICAgIC8vIGNvcHkgdGhlIHZhbHVl
cyBmcm9tIHRoZSBwYXNzZWQgbWF0cml4CiAgICAgICAgIHZvaWQgbG9hZChpbiBzZXF1ZW5jZTxm
bG9hdD4gYXJyYXkpOyAgICAgICAgICAgICAgICAvLyBjb3B5IDE2IGZsb2F0cyBpbnRvIHRoZSBt
YXRyaXgKICAgICAgICAgc2VxdWVuY2U8ZmxvYXQ+IGdldEFzQXJyYXkoKTsgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHJldHVybiB0aGUgbWF0cml4IGFzIGFuIGFycmF5IG9mIDE2IGZsb2F0cwot
ICAgICAgICBDYW52YXNGbG9hdEFycmF5IGdldEFzQ2FudmFzRmxvYXRBcnJheSgpOyAgICAgICAg
ICAgLy8gcmV0dXJuIHRoZSBtYXRyaXggYXMgYSBDYW52YXNGbG9hdEFycmF5IHdpdGggMTYgdmFs
dWVzCisgICAgICAgIENhbnZhc0Zsb2F0QXJyYXkgZ2V0QXNXZWJHTEZsb2F0QXJyYXkoKTsgICAg
ICAgICAgICAvLyByZXR1cm4gdGhlIG1hdHJpeCBhcyBhIFdlYkdMRmxvYXRBcnJheSB3aXRoIDE2
IHZhbHVlcwogICAgICAgICB2b2lkIG1ha2VJZGVudGl0eSgpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgbWF0cml4IHdpdGggaWRlbnRpdHkKICAgICAgICAg
dm9pZCB0cmFuc3Bvc2UoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJl
cGxhY2UgdGhlIG1hdHJpeCB3aXRoIGl0cyB0cmFuc3Bvc2UKICAgICAgICAgdm9pZCBpbnZlcnQo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlcGxhY2UgdGhlIG1h
dHJpeCB3aXRoIGl0cyBpbnZlcnNlCkBAIC0xMzksOSArMTM5LDkgQEAgQ2FudmFzTWF0cml4NC5w
cm90b3R5cGUuZ2V0QXNBcnJheSA9IGZ1bgogICAgIF07CiB9CiAKLUNhbnZhc01hdHJpeDQucHJv
dG90eXBlLmdldEFzQ2FudmFzRmxvYXRBcnJheSA9IGZ1bmN0aW9uKCkKK0NhbnZhc01hdHJpeDQu
cHJvdG90eXBlLmdldEFzV2ViR0xGbG9hdEFycmF5ID0gZnVuY3Rpb24oKQogewotICAgIHJldHVy
biBuZXcgQ2FudmFzRmxvYXRBcnJheSh0aGlzLmdldEFzQXJyYXkoKSk7CisgICAgcmV0dXJuIG5l
dyBXZWJHTEZsb2F0QXJyYXkodGhpcy5nZXRBc0FycmF5KCkpOwogfQogCiBDYW52YXNNYXRyaXg0
LnByb3RvdHlwZS5tYWtlSWRlbnRpdHkgPSBmdW5jdGlvbigpCkluZGV4OiBXZWJDb3JlL21hbnVh
bC10ZXN0cy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L21hbnVhbC10ZXN0cy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwkocmV2aXNpb24gNTA2MzQp
CisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKIC8vIGluaXRXZWJHTAogLy8KIC8vIEluaXRpYWxp
emUgdGhlIENhbnZhcyBlbGVtZW50IHdpdGggdGhlIHBhc3NlZCBuYW1lIGFzIGEgV2ViR0wgb2Jq
ZWN0IGFuZCByZXR1cm4gdGhlCi0vLyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuIAorLy8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LiAKIC8vCiAvLyBMb2FkIHNoYWRlcnMgd2l0aCB0aGUgcGFzc2Vk
IG5hbWVzIGFuZCBjcmVhdGUgYSBwcm9ncmFtIHdpdGggdGhlbS4gUmV0dXJuIHRoaXMgcHJvZ3Jh
bSAKIC8vIGluIHRoZSAncHJvZ3JhbScgcHJvcGVydHkgb2YgdGhlIHJldHVybmVkIGNvbnRleHQu
CkBAIC03Miw3ICs3Miw3IEBAIGZ1bmN0aW9uIGluaXRXZWJHTChjYW52YXNOYW1lLCB2c2hhZGVy
LCAKIC8vIGxvYWRTaGFkZXIKIC8vCiAvLyAnc2hhZGVySWQnIGlzIHRoZSBpZCBvZiBhIDxzY3Jp
cHQ+IGVsZW1lbnQgY29udGFpbmluZyB0aGUgc2hhZGVyIHNvdXJjZSBzdHJpbmcuCi0vLyBMb2Fk
IHRoaXMgc2hhZGVyIGFuZCByZXR1cm4gdGhlIENhbnZhc1NoYWRlciBvYmplY3QgY29ycmVzcG9u
ZGluZyB0byBpdC4KKy8vIExvYWQgdGhpcyBzaGFkZXIgYW5kIHJldHVybiB0aGUgV2ViR0xTaGFk
ZXIgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gaXQuCiAvLwogZnVuY3Rpb24gbG9hZFNoYWRlcihj
dHgsIHNoYWRlcklkKQogewpAQCAtMTIzLDEwICsxMjMsMTAgQEAgZnVuY3Rpb24gbG9hZFNoYWRl
cihjdHgsIHNoYWRlcklkKQogLy8gQ3JlYXRlIGEgYm94IHdpdGggdmVydGljZXMsIG5vcm1hbHMg
YW5kIHRleENvb3Jkcy4gQ3JlYXRlIFZCT3MgZm9yIGVhY2ggYXMgd2VsbCBhcyB0aGUgaW5kZXgg
YXJyYXkuCiAvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVz
OgogLy8KLS8vICBub3JtYWxPYmplY3QgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIG5v
cm1hbHMKLS8vICB0ZXhDb29yZE9iamVjdCAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHRl
eENvb3JkcwotLy8gIHZlcnRleE9iamVjdCAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3Ig
dmVydGljZXMKLS8vICBpbmRleE9iamVjdCAgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9y
IGluZGljZXMKKy8vICBub3JtYWxPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3Ig
bm9ybWFscworLy8gIHRleENvb3JkT2JqZWN0ICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0IGZvciB0
ZXhDb29yZHMKKy8vICB2ZXJ0ZXhPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3Ig
dmVydGljZXMKKy8vICBpbmRleE9iamVjdCAgICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3Ig
aW5kaWNlcwogLy8gIG51bUluZGljZXMgICAgICAgICAgVGhlIG51bWJlciBvZiBpbmRpY2VzIGlu
IHRoZSBpbmRleE9iamVjdAogLy8gCiBmdW5jdGlvbiBtYWtlQm94KGN0eCkKQEAgLTE0MSw3ICsx
NDEsNyBAQCBmdW5jdGlvbiBtYWtlQm94KGN0eCkKICAgICAvLyAgdjItLS0tLS12MwogICAgIC8v
CiAgICAgLy8gdmVydGV4IGNvb3JkcyBhcnJheQotICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBDYW52
YXNGbG9hdEFycmF5KAorICAgIHZhciB2ZXJ0aWNlcyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoCiAg
ICAgICAgIFsgIDEsIDEsIDEsICAtMSwgMSwgMSwgIC0xLC0xLCAxLCAgIDEsLTEsIDEsICAgIC8v
IHYwLXYxLXYyLXYzIGZyb250CiAgICAgICAgICAgIDEsIDEsIDEsICAgMSwtMSwgMSwgICAxLC0x
LC0xLCAgIDEsIDEsLTEsICAgIC8vIHYwLXYzLXY0LXY1IHJpZ2h0CiAgICAgICAgICAgIDEsIDEs
IDEsICAgMSwgMSwtMSwgIC0xLCAxLC0xLCAgLTEsIDEsIDEsICAgIC8vIHYwLXY1LXY2LXYxIHRv
cApAQCAtMTUxLDcgKzE1MSw3IEBAIGZ1bmN0aW9uIG1ha2VCb3goY3R4KQogICAgICk7CiAKICAg
ICAvLyBub3JtYWwgYXJyYXkKLSAgICB2YXIgbm9ybWFscyA9IG5ldyBDYW52YXNGbG9hdEFycmF5
KAorICAgIHZhciBub3JtYWxzID0gbmV3IFdlYkdMRmxvYXRBcnJheSgKICAgICAgICAgWyAgMCwg
MCwgMSwgICAwLCAwLCAxLCAgIDAsIDAsIDEsICAgMCwgMCwgMSwgICAgIC8vIHYwLXYxLXYyLXYz
IGZyb250CiAgICAgICAgICAgIDEsIDAsIDAsICAgMSwgMCwgMCwgICAxLCAwLCAwLCAgIDEsIDAs
IDAsICAgICAvLyB2MC12My12NC12NSByaWdodAogICAgICAgICAgICAwLCAxLCAwLCAgIDAsIDEs
IDAsICAgMCwgMSwgMCwgICAwLCAxLCAwLCAgICAgLy8gdjAtdjUtdjYtdjEgdG9wCkBAIC0xNjIs
NyArMTYyLDcgQEAgZnVuY3Rpb24gbWFrZUJveChjdHgpCiAKIAogICAgIC8vIHRleENvb3JkIGFy
cmF5Ci0gICAgdmFyIHRleENvb3JkcyA9IG5ldyBDYW52YXNGbG9hdEFycmF5KAorICAgIHZhciB0
ZXhDb29yZHMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KAogICAgICAgICBbICAxLCAxLCAgIDAsIDEs
ICAgMCwgMCwgICAxLCAwLCAgICAvLyB2MC12MS12Mi12MyBmcm9udAogICAgICAgICAgICAwLCAx
LCAgIDAsIDAsICAgMSwgMCwgICAxLCAxLCAgICAvLyB2MC12My12NC12NSByaWdodAogICAgICAg
ICAgICAxLCAwLCAgIDEsIDEsICAgMCwgMSwgICAwLCAwLCAgICAvLyB2MC12NS12Ni12MSB0b3AK
QEAgLTE3Miw3ICsxNzIsNyBAQCBmdW5jdGlvbiBtYWtlQm94KGN0eCkKICAgICAgICApOwogCiAg
ICAgLy8gaW5kZXggYXJyYXkKLSAgICB2YXIgaW5kaWNlcyA9IG5ldyBDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheSgKKyAgICB2YXIgaW5kaWNlcyA9IG5ldyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KAog
ICAgICAgICBbICAwLCAxLCAyLCAgIDAsIDIsIDMsICAgIC8vIGZyb250CiAgICAgICAgICAgIDQs
IDUsIDYsICAgNCwgNiwgNywgICAgLy8gcmlnaHQKICAgICAgICAgICAgOCwgOSwxMCwgICA4LDEw
LDExLCAgICAvLyB0b3AKQEAgLTIxNCwxMCArMjE0LDEwIEBAIGZ1bmN0aW9uIG1ha2VCb3goY3R4
KQogLy8gU3BoZXJlIGhhcyB2ZXJ0aWNlcywgbm9ybWFscyBhbmQgdGV4Q29vcmRzLiBDcmVhdGUg
VkJPcyBmb3IgZWFjaCBhcyB3ZWxsIGFzIHRoZSBpbmRleCBhcnJheS4KIC8vIFJldHVybiBhbiBv
YmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAvLwotLy8gIG5vcm1hbE9iamVj
dCAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3Igbm9ybWFscwotLy8gIHRleENvb3JkT2Jq
ZWN0ICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29vcmRzCi0vLyAgdmVydGV4T2Jq
ZWN0ICAgICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcwotLy8gIGluZGV4T2Jq
ZWN0ICAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgaW5kaWNlcworLy8gIG5vcm1hbE9i
amVjdCAgICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0IGZvciBub3JtYWxzCisvLyAgdGV4Q29vcmRP
YmplY3QgICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIHRleENvb3JkcworLy8gIHZlcnRleE9i
amVjdCAgICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcworLy8gIGluZGV4T2Jq
ZWN0ICAgICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0IGZvciBpbmRpY2VzCiAvLyAgbnVtSW5kaWNl
cyAgICAgICAgICBUaGUgbnVtYmVyIG9mIGluZGljZXMgaW4gdGhlIGluZGV4T2JqZWN0CiAvLyAK
IGZ1bmN0aW9uIG1ha2VTcGhlcmUoY3R4LCByYWRpdXMsIGxhdHMsIGxvbmdzKQpAQCAtMjcyLDIw
ICsyNzIsMjAgQEAgZnVuY3Rpb24gbWFrZVNwaGVyZShjdHgsIHJhZGl1cywgbGF0cywgbAogICAg
IAogICAgIHJldHZhbC5ub3JtYWxPYmplY3QgPSBjdHguY3JlYXRlQnVmZmVyKCk7CiAgICAgY3R4
LmJpbmRCdWZmZXIoY3R4LkFSUkFZX0JVRkZFUiwgcmV0dmFsLm5vcm1hbE9iamVjdCk7Ci0gICAg
Y3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwgbmV3IENhbnZhc0Zsb2F0QXJyYXkobm9y
bWFsRGF0YSksIGN0eC5TVEFUSUNfRFJBVyk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZ
X0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheShub3JtYWxEYXRhKSwgY3R4LlNUQVRJQ19EUkFX
KTsKIAogICAgIHJldHZhbC50ZXhDb29yZE9iamVjdCA9IGN0eC5jcmVhdGVCdWZmZXIoKTsKICAg
ICBjdHguYmluZEJ1ZmZlcihjdHguQVJSQVlfQlVGRkVSLCByZXR2YWwudGV4Q29vcmRPYmplY3Qp
OwotICAgIGN0eC5idWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNGbG9hdEFy
cmF5KHRleENvb3JkRGF0YSksIGN0eC5TVEFUSUNfRFJBVyk7CisgICAgY3R4LmJ1ZmZlckRhdGEo
Y3R4LkFSUkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheSh0ZXhDb29yZERhdGEpLCBjdHgu
U1RBVElDX0RSQVcpOwogCiAgICAgcmV0dmFsLnZlcnRleE9iamVjdCA9IGN0eC5jcmVhdGVCdWZm
ZXIoKTsKICAgICBjdHguYmluZEJ1ZmZlcihjdHguQVJSQVlfQlVGRkVSLCByZXR2YWwudmVydGV4
T2JqZWN0KTsKLSAgICBjdHguYnVmZmVyRGF0YShjdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFz
RmxvYXRBcnJheShnZW9tZXRyeURhdGEpLCBjdHguU1RBVElDX0RSQVcpOworICAgIGN0eC5idWZm
ZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIsIG5ldyBXZWJHTEZsb2F0QXJyYXkoZ2VvbWV0cnlEYXRh
KSwgY3R4LlNUQVRJQ19EUkFXKTsKICAgICAKICAgICByZXR2YWwubnVtSW5kaWNlcyA9IGluZGV4
RGF0YS5sZW5ndGg7CiAgICAgcmV0dmFsLmluZGV4T2JqZWN0ID0gY3R4LmNyZWF0ZUJ1ZmZlcigp
OwogICAgIGN0eC5iaW5kQnVmZmVyKGN0eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgcmV0dmFsLmlu
ZGV4T2JqZWN0KTsKLSAgICBjdHguYnVmZmVyRGF0YShjdHguRUxFTUVOVF9BUlJBWV9CVUZGRVIs
IG5ldyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoaW5kZXhEYXRhKSwgY3R4LlNUUkVBTV9EUkFX
KTsKKyAgICBjdHguYnVmZmVyRGF0YShjdHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBXZWJH
TFVuc2lnbmVkU2hvcnRBcnJheShpbmRleERhdGEpLCBjdHguU1RSRUFNX0RSQVcpOwogICAgIAog
ICAgIHJldHVybiByZXR2YWw7CiB9CkBAIC0yOTcsMTAgKzI5NywxMCBAQCBmdW5jdGlvbiBtYWtl
U3BoZXJlKGN0eCwgcmFkaXVzLCBsYXRzLCBsCiAvLyBXaGVuIHRoZSBvYmplY3QgbG9hZCBpcyBj
b21wbGV0ZSwgdGhlICdsb2FkZWQnIHByb3BlcnR5IGJlY29tZXMgdHJ1ZSBhbmQgdGhlIGZvbGxv
d2luZyAKIC8vIHByb3BlcnRpZXMgYXJlIHNldDoKIC8vCi0vLyAgbm9ybWFsT2JqZWN0ICAgICAg
ICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBub3JtYWxzCi0vLyAgdGV4Q29vcmRPYmplY3QgICAg
ICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciB0ZXhDb29yZHMKLS8vICB2ZXJ0ZXhPYmplY3QgICAg
ICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHZlcnRpY2VzCi0vLyAgaW5kZXhPYmplY3QgICAg
ICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBpbmRpY2VzCisvLyAgbm9ybWFsT2JqZWN0ICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIG5vcm1hbHMKKy8vICB0ZXhDb29yZE9iamVjdCAg
ICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29vcmRzCisvLyAgdmVydGV4T2JqZWN0ICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIHZlcnRpY2VzCisvLyAgaW5kZXhPYmplY3QgICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIGluZGljZXMKIC8vICBudW1JbmRpY2VzICAgICAg
ICAgIFRoZSBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGUgaW5kZXhPYmplY3QKIC8vICAKIGZ1bmN0
aW9uIGxvYWRPYmooY3R4LCB1cmwpCkBAIC00MzgsMjAgKzQzOCwyMCBAQCBmdW5jdGlvbiBkb0xv
YWRPYmoob2JqLCB0ZXh0KQogICAgIC8vIHNldCB0aGUgVkJPcwogICAgIG9iai5ub3JtYWxPYmpl
Y3QgPSBvYmouY3R4LmNyZWF0ZUJ1ZmZlcigpOwogICAgIG9iai5jdHguYmluZEJ1ZmZlcihvYmou
Y3R4LkFSUkFZX0JVRkZFUiwgb2JqLm5vcm1hbE9iamVjdCk7Ci0gICAgb2JqLmN0eC5idWZmZXJE
YXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheShub3JtYWxBcnJh
eSksIG9iai5jdHguU1RBVElDX0RSQVcpOworICAgIG9iai5jdHguYnVmZmVyRGF0YShvYmouY3R4
LkFSUkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheShub3JtYWxBcnJheSksIG9iai5jdHgu
U1RBVElDX0RSQVcpOwogCiAgICAgb2JqLnRleENvb3JkT2JqZWN0ID0gb2JqLmN0eC5jcmVhdGVC
dWZmZXIoKTsKICAgICBvYmouY3R4LmJpbmRCdWZmZXIob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG9i
ai50ZXhDb29yZE9iamVjdCk7Ci0gICAgb2JqLmN0eC5idWZmZXJEYXRhKG9iai5jdHguQVJSQVlf
QlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheSh0ZXh0dXJlQXJyYXkpLCBvYmouY3R4LlNUQVRJ
Q19EUkFXKTsKKyAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG5l
dyBXZWJHTEZsb2F0QXJyYXkodGV4dHVyZUFycmF5KSwgb2JqLmN0eC5TVEFUSUNfRFJBVyk7CiAK
ICAgICBvYmoudmVydGV4T2JqZWN0ID0gb2JqLmN0eC5jcmVhdGVCdWZmZXIoKTsKICAgICBvYmou
Y3R4LmJpbmRCdWZmZXIob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG9iai52ZXJ0ZXhPYmplY3QpOwot
ICAgIG9iai5jdHguYnVmZmVyRGF0YShvYmouY3R4LkFSUkFZX0JVRkZFUiwgbmV3IENhbnZhc0Zs
b2F0QXJyYXkodmVydGV4QXJyYXkpLCBvYmouY3R4LlNUQVRJQ19EUkFXKTsKKyAgICBvYmouY3R4
LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG5ldyBXZWJHTEZsb2F0QXJyYXkodmVy
dGV4QXJyYXkpLCBvYmouY3R4LlNUQVRJQ19EUkFXKTsKICAgICAKICAgICBvYmoubnVtSW5kaWNl
cyA9IGluZGV4QXJyYXkubGVuZ3RoOwogICAgIG9iai5pbmRleE9iamVjdCA9IG9iai5jdHguY3Jl
YXRlQnVmZmVyKCk7CiAgICAgb2JqLmN0eC5iaW5kQnVmZmVyKG9iai5jdHguRUxFTUVOVF9BUlJB
WV9CVUZGRVIsIG9iai5pbmRleE9iamVjdCk7Ci0gICAgb2JqLmN0eC5idWZmZXJEYXRhKG9iai5j
dHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkoaW5k
ZXhBcnJheSksIG9iai5jdHguU1RSRUFNX0RSQVcpOworICAgIG9iai5jdHguYnVmZmVyRGF0YShv
YmouY3R4LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBuZXcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXko
aW5kZXhBcnJheSksIG9iai5jdHguU1RSRUFNX0RSQVcpOwogICAgIAogICAgIG9iai5sb2FkZWQg
PSB0cnVlOwogfQpAQCAtNDU5LDcgKzQ1OSw3IEBAIGZ1bmN0aW9uIGRvTG9hZE9iaihvYmosIHRl
eHQpCiAvLwogLy8gbG9hZEltYWdlVGV4dHVyZQogLy8KLS8vIExvYWQgdGhlIGltYWdlIGF0IHRo
ZSBwYXNzZWQgdXJsLCBwbGFjZSBpdCBpbiBhIG5ldyBDYW52YXNUZXh0dXJlIG9iamVjdCBhbmQg
cmV0dXJuIHRoZSBDYW52YXNUZXh0dXJlLgorLy8gTG9hZCB0aGUgaW1hZ2UgYXQgdGhlIHBhc3Nl
ZCB1cmwsIHBsYWNlIGl0IGluIGEgbmV3IFdlYkdMVGV4dHVyZSBvYmplY3QgYW5kIHJldHVybiB0
aGUgV2ViR0xUZXh0dXJlLgogLy8KIGZ1bmN0aW9uIGxvYWRJbWFnZVRleHR1cmUoY3R4LCB1cmwp
CiB7CkBAIC01MjgsNCArNTI4LDMgQEAgRnJhbWVyYXRlLnByb3RvdHlwZS5zbmFwc2hvdCA9IGZ1
bmN0aW9uKAogICAgICAgICB0aGlzLnJlbmRlclRpbWUgPSBuZXdUaW1lOwogICAgIH0KIH0KLQpJ
bmRleDogV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5pZGwJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9wYWdlL0RPTVdp
bmRvdy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTQzMiwxNyArNDMyLDE3IEBAIG1vZHVsZSB3aW5k
b3cgewogICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbUdldHRlcl0gSFRNTE9wdGlvbkVsZW1lbnRD
b25zdHJ1Y3RvciBPcHRpb247IC8vIFVzYWJsZSB3aXRoIG5ldyBvcGVyYXRvcgogCiAgICAgICAg
IGF0dHJpYnV0ZSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDb25zdHJ1Y3RvciBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ7Ci0gICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFT
XSBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDb25zdHJ1Y3RvciBDYW52YXNSZW5kZXJpbmdDb250
ZXh0M0Q7CisgICAgICAgIGF0dHJpYnV0ZSBbQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBXZWJHTFJl
bmRlcmluZ0NvbnRleHRDb25zdHJ1Y3RvciBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CiAgICAgICAg
IGF0dHJpYnV0ZSBUZXh0TWV0cmljc0NvbnN0cnVjdG9yIFRleHRNZXRyaWNzOwogCi0gICAgICAg
IGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLENvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFz
QXJyYXlCdWZmZXJDb25zdHJ1Y3RvciBDYW52YXNBcnJheUJ1ZmZlcjsgLy8gVXNhYmxlIHdpdGgg
bmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLENvbmRpdGlv
bmFsPTNEX0NBTlZBU10gQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3IgQ2FudmFzQnl0ZUFycmF5
OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0
b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNv
bnN0cnVjdG9yIENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3Bl
cmF0b3IKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0Rf
Q0FOVkFTXSBDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IgQ2FudmFzU2hvcnRBcnJheTsgLy8g
VXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCi0gICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0
dGVyLENvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0
b3IKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FO
VkFTXSBDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yIENhbnZhc0ludEFycmF5OyAvLyBVc2FibGUg
d2l0aCBuZXcgb3BlcmF0b3IKLSAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29u
ZGl0aW9uYWw9M0RfQ0FOVkFTXSBDYW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IgQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheTsgLy8gVXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCi0gICAgICAg
IGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLENvbmRpdGlvbmFsPTNEX0NBTlZBU10gQ2FudmFz
RmxvYXRBcnJheUNvbnN0cnVjdG9yIENhbnZhc0Zsb2F0QXJyYXk7IC8vIFVzYWJsZSB3aXRoIG5l
dyBvcGVyYXRvcgorICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcixDb25kaXRpb25h
bD0zRF9DQU5WQVNdIFdlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciBXZWJHTEFycmF5QnVmZmVy
OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0
b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9y
IFdlYkdMQnl0ZUFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0
cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5Q29uc3RydWN0b3IgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheTsgLy8gVXNhYmxl
IHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLENv
bmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IgV2ViR0xTaG9y
dEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtK
U0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheUNvbnN0cnVjdG9yIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OyAvLyBVc2FibGUgd2l0aCBu
ZXcgb3BlcmF0b3IKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9u
YWw9M0RfQ0FOVkFTXSBXZWJHTEludEFycmF5Q29uc3RydWN0b3IgV2ViR0xJbnRBcnJheTsgLy8g
VXNhYmxlIHdpdGggbmV3IG9wZXJhdG9yCisgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0
dGVyLENvbmRpdGlvbmFsPTNEX0NBTlZBU10gV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0
b3IgV2ViR0xVbnNpZ25lZEludEFycmF5OyAvLyBVc2FibGUgd2l0aCBuZXcgb3BlcmF0b3IKKyAg
ICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsQ29uZGl0aW9uYWw9M0RfQ0FOVkFTXSBX
ZWJHTEZsb2F0QXJyYXlDb25zdHJ1Y3RvciBXZWJHTEZsb2F0QXJyYXk7IC8vIFVzYWJsZSB3aXRo
IG5ldyBvcGVyYXRvcgogCiAgICAgICAgIGF0dHJpYnV0ZSBFdmVudENvbnN0cnVjdG9yIEV2ZW50
OwogICAgICAgICBhdHRyaWJ1dGUgQmVmb3JlTG9hZEV2ZW50Q29uc3RydWN0b3IgQmVmb3JlTG9h
ZEV2ZW50OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0M0QuaAkocmV2aXNpb24gNTA2MzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE4ICs0NiwxOCBAQCBjb25z
dCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqCiAjZW5kaWYKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIENhbnZhc0FjdGl2ZUluZm87Ci0gICAgY2xhc3MgQ2FudmFz
QXJyYXk7Ci0gICAgY2xhc3MgQ2FudmFzQnVmZmVyOwotICAgIGNsYXNzIENhbnZhc1Vuc2lnbmVk
Qnl0ZUFycmF5OwotICAgIGNsYXNzIENhbnZhc0Zsb2F0QXJyYXk7Ci0gICAgY2xhc3MgQ2FudmFz
RnJhbWVidWZmZXI7Ci0gICAgY2xhc3MgQ2FudmFzSW50QXJyYXk7Ci0gICAgY2xhc3MgQ2FudmFz
UHJvZ3JhbTsKLSAgICBjbGFzcyBDYW52YXNSZW5kZXJidWZmZXI7Ci0gICAgY2xhc3MgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDNEOwotICAgIGNsYXNzIENhbnZhc1NoYWRlcjsKLSAgICBjbGFzcyBD
YW52YXNUZXh0dXJlOworICAgIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKKyAgICBjbGFzcyBXZWJH
TEFycmF5OworICAgIGNsYXNzIFdlYkdMQnVmZmVyOworICAgIGNsYXNzIFdlYkdMVW5zaWduZWRC
eXRlQXJyYXk7CisgICAgY2xhc3MgV2ViR0xGbG9hdEFycmF5OworICAgIGNsYXNzIFdlYkdMRnJh
bWVidWZmZXI7CisgICAgY2xhc3MgV2ViR0xJbnRBcnJheTsKKyAgICBjbGFzcyBXZWJHTFByb2dy
YW07CisgICAgY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7CisgICAgY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OworICAgIGNsYXNzIFdlYkdMU2hhZGVyOworICAgIGNsYXNzIFdlYkdMVGV4dHVy
ZTsKICAgICBjbGFzcyBJbWFnZTsKICAgICBjbGFzcyBIVE1MVmlkZW9FbGVtZW50OwogICAgIGNs
YXNzIEltYWdlRGF0YTsKQEAgLTk5LDEyICs5OSwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIGludCBzaXplSW5CeXRlcyhpbnQgdHlwZSk7CiAKICAgICAgICAgdm9pZCBhY3RpdmVU
ZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGV4dHVyZSk7Ci0gICAgICAgIHZvaWQgYXR0YWNoU2hhZGVy
KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIENhbnZhc1NoYWRlciogc2hhZGVyKTsKLSAgICAgICAg
dm9pZCBiaW5kQXR0cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSosIHVuc2lnbmVkIGxvbmcgaW5k
ZXgsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgICAgIHZvaWQgYmluZEJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgQ2FudmFzQnVmZmVyKik7Ci0gICAgICAgIHZvaWQgYmluZEZyYW1lYnVm
ZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBDYW52YXNGcmFtZWJ1ZmZlciopOwotICAgICAgICB2
b2lkIGJpbmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1
ZmZlciopOwotICAgICAgICB2b2lkIGJpbmRUZXh0dXJlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBD
YW52YXNUZXh0dXJlKiB0ZXh0dXJlKTsKKyAgICAgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKTsKKyAgICAgICAgdm9pZCBiaW5k
QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBpbmRleCwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKyAgICAgICAgdm9pZCBiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCBXZWJHTEJ1ZmZlciopOworICAgICAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciopOworICAgICAgICB2b2lkIGJpbmRSZW5k
ZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CisgICAg
ICAgIHZvaWQgYmluZFRleHR1cmUodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSk7CiAgICAgICAgIHZvaWQgYmxlbmRDb2xvcihkb3VibGUgcmVkLCBkb3VibGUgZ3Jl
ZW4sIGRvdWJsZSBibHVlLCBkb3VibGUgYWxwaGEpOwogICAgICAgICB2b2lkIGJsZW5kRXF1YXRp
b24odW5zaWduZWQgbG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJh
dGUodW5zaWduZWQgbG9uZyBtb2RlUkdCLCB1bnNpZ25lZCBsb25nIG1vZGVBbHBoYSk7CkBAIC0x
MTIsOCArMTEyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGJsZW5kRnVu
Y1NlcGFyYXRlKHVuc2lnbmVkIGxvbmcgc3JjUkdCLCB1bnNpZ25lZCBsb25nIGRzdFJHQiwgdW5z
aWduZWQgbG9uZyBzcmNBbHBoYSwgdW5zaWduZWQgbG9uZyBkc3RBbHBoYSk7CiAKICAgICAgICAg
dm9pZCBidWZmZXJEYXRhKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBpbnQgc2l6ZSwgdW5zaWduZWQg
bG9uZyB1c2FnZSk7Ci0gICAgICAgIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgQ2FudmFzQXJyYXkqIGRhdGEsIHVuc2lnbmVkIGxvbmcgdXNhZ2UpOwotICAgICAgICB2b2lk
IGJ1ZmZlclN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNB
cnJheSogZGF0YSk7CisgICAgICAgIHZvaWQgYnVmZmVyRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdl
dCwgV2ViR0xBcnJheSogZGF0YSwgdW5zaWduZWQgbG9uZyB1c2FnZSk7CisgICAgICAgIHZvaWQg
YnVmZmVyU3ViRGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBvZmZzZXQsIFdlYkdMQXJy
YXkqIGRhdGEpOwogCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyh1bnNpZ25lZCBsb25nIHRhcmdldCk7CiAgICAgICAgIHZvaWQgY2xlYXIodW5zaWduZWQgbG9u
ZyBtYXNrKTsKQEAgLTEyMSw3ICsxMjEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgY2xlYXJEZXB0aChkb3VibGUgZGVwdGgpOwogICAgICAgICB2b2lkIGNsZWFyU3RlbmNp
bChsb25nIHMpOwogICAgICAgICB2b2lkIGNvbG9yTWFzayhib29sIHJlZCwgYm9vbCBncmVlbiwg
Ym9vbCBibHVlLCBib29sIGFscGhhKTsKLSAgICAgICAgdm9pZCBjb21waWxlU2hhZGVyKENhbnZh
c1NoYWRlciopOworICAgICAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKICAg
ICAgICAgCiAgICAgICAgIC8vdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRCh1bnNpZ25lZCBsb25n
IHRhcmdldCwgbG9uZyBsZXZlbCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWdu
ZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIGxvbmcgYm9yZGVyLCB1bnNpZ25l
ZCBsb25nIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCogZGF0YSk7CiAgICAgICAgIC8vdm9pZCBjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgbG9uZyBsZXZlbCwgbG9u
ZyB4b2Zmc2V0LCBsb25nIHlvZmZzZXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxv
bmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5zaWduZWQgbG9uZyBpbWFnZVNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBkZXB0aEZ1bmModW5zaWduZWQgbG9uZyBmdW5jKTsKICAgICAgICAg
dm9pZCBkZXB0aE1hc2soYm9vbCBmbGFnKTsKICAgICAgICAgdm9pZCBkZXB0aFJhbmdlKGRvdWJs
ZSB6TmVhciwgZG91YmxlIHpGYXIpOwotICAgICAgICB2b2lkIGRldGFjaFNoYWRlcihDYW52YXNQ
cm9ncmFtKiwgQ2FudmFzU2hhZGVyKik7CisgICAgICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSosIFdlYkdMU2hhZGVyKik7CiAgICAgICAgIHZvaWQgZGlzYWJsZSh1bnNpZ25lZCBs
b25nIGNhcCk7CiAgICAgICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHVuc2lnbmVk
IGxvbmcgaW5kZXgpOwogICAgICAgICB2b2lkIGRyYXdBcnJheXModW5zaWduZWQgbG9uZyBtb2Rl
LCBsb25nIGZpcnN0LCBsb25nIGNvdW50KTsKQEAgLTE0Miw4NCArMTQyLDg0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25l
ZCBsb25nIGluZGV4KTsKICAgICAgICAgdm9pZCBmaW5pc2goKTsKICAgICAgICAgdm9pZCBmbHVz
aCgpOwotICAgICAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBDYW52YXNSZW5kZXJidWZmZXIqKTsKLSAgICAgICAgdm9pZCBmcmFtZWJ1ZmZl
clRleHR1cmUyRCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50
LCB1bnNpZ25lZCBsb25nIHRleHRhcmdldCwgQ2FudmFzVGV4dHVyZSosIGxvbmcgbGV2ZWwpOwor
ICAgICAgICB2b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0
LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcmVuZGVyYnVmZmVydGFy
Z2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgICAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVy
ZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2ln
bmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBsb25nIGxldmVsKTsKICAgICAgICAg
dm9pZCBmcm9udEZhY2UodW5zaWduZWQgbG9uZyBtb2RlKTsKICAgICAgICAgdm9pZCBnZW5lcmF0
ZU1pcG1hcCh1bnNpZ25lZCBsb25nIHRhcmdldCk7CiAKLSAgICAgICAgYm9vbCBnZXRBY3RpdmVB
dHRyaWIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZl
SW5mbyYpOwotICAgICAgICBib29sIGdldEFjdGl2ZVVuaWZvcm0oQ2FudmFzUHJvZ3JhbSogcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOworICAgICAgICBib29sIGdl
dEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgs
IEFjdGl2ZUluZm8mKTsKKyAgICAgICAgYm9vbCBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgdW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYpOwogCi0gICAgICAg
IGludCAgZ2V0QXR0cmliTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgICAgIGludCAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3Qg
U3RyaW5nJiBuYW1lKTsKIAogICAgICAgICBib29sIGdldEJvb2xlYW4odW5zaWduZWQgbG9uZyBw
bmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzVW5zaWduZWRCeXRlQXJyYXk+IGdldEJv
b2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMVW5z
aWduZWRCeXRlQXJyYXk+IGdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUpOwogICAgICAg
ICBpbnQgZ2V0QnVmZmVyUGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldEJ1ZmZl
clBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsK
KyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRCdWZmZXJQYXJhbWV0ZXJpdih1
bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAKICAgICAgICAgdW5z
aWduZWQgbG9uZyBnZXRFcnJvcigpOwogCiAgICAgICAgIGZsb2F0IGdldEZsb2F0KHVuc2lnbmVk
IGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGdldEZs
b2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEZsb2F0
QXJyYXk+IGdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKTsKICAgICAgICAgaW50IGdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2
KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVk
IGxvbmcgcG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IGdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25l
ZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwogICAgICAgICBpbnQgZ2V0
SW50ZWdlcih1bnNpZ25lZCBsb25nIHBuYW1lKTsKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNJ
bnRBcnJheT4gZ2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIGludCBn
ZXRQcm9ncmFtaShDYW52YXNQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAg
IFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiwg
dW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhD
YW52YXNQcm9ncmFtKik7CisgICAgICAgIFBhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gZ2V0SW50
ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRQcm9ncmFtaShXZWJH
TFByb2dyYW0qLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJH
TEludEFycmF5PiBnZXRQcm9ncmFtaXYoV2ViR0xQcm9ncmFtKiwgdW5zaWduZWQgbG9uZyBwbmFt
ZSk7CisgICAgICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qKTsKICAg
ICAgICAgaW50IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcmkodW5zaWduZWQgbG9uZyB0YXJnZXQs
IHVuc2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5
PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIGludCBnZXRTaGFkZXJpKENhbnZhc1NoYWRlciosIHVu
c2lnbmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBn
ZXRTaGFkZXJpdihDYW52YXNTaGFkZXIqLCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNp
Z25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIGludCBnZXRT
aGFkZXJpKFdlYkdMU2hhZGVyKiwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CisgICAgICAgIFBhc3NS
ZWZQdHI8V2ViR0xJbnRBcnJheT4gZ2V0U2hhZGVyaXYoV2ViR0xTaGFkZXIqLCB1bnNpZ25lZCBs
b25nIHBuYW1lKTsKIAotICAgICAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhDYW52YXNTaGFk
ZXIqKTsKKyAgICAgICAgU3RyaW5nIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqKTsKIAog
ICAgICAgICAvLyBUQkQKICAgICAgICAgLy8gdm9pZCBnbEdldFNoYWRlclByZWNpc2lvbkZvcm1h
dCAoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlLCBHTGludCogcmFuZ2Us
IEdMaW50KiBwcmVjaXNpb24pOwogCi0gICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoQ2Fu
dmFzU2hhZGVyKik7CisgICAgICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIq
KTsKICAgICAgICAgU3RyaW5nIGdldFN0cmluZyh1bnNpZ25lZCBsb25nIG5hbWUpOwogICAgICAg
ICAKICAgICAgICAgZmxvYXQgZ2V0VGV4UGFyYW1ldGVyZih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gZ2V0VGV4UGFyYW1ldGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcg
cG5hbWUpOworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gZ2V0VGV4UGFyYW1l
dGVyZnYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwogICAgICAg
ICBpbnQgZ2V0VGV4UGFyYW1ldGVyaSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9u
ZyBwbmFtZSk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGdldFRleFBhcmFt
ZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRUZXhQYXJhbWV0ZXJpdih1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAKLSAgICAgICAgZmxvYXQgZ2V0VW5p
Zm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7Ci0gICAgICAgIFBh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gZ2V0VW5pZm9ybWZ2KENhbnZhc1Byb2dyYW0qIHBy
b2dyYW0sIGxvbmcgbG9jYXRpb24pOwotICAgICAgICBpbnQgZ2V0VW5pZm9ybWkoQ2FudmFzUHJv
Z3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbik7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q2FudmFz
SW50QXJyYXk+IGdldFVuaWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0
aW9uKTsKKyAgICAgICAgZmxvYXQgZ2V0VW5pZm9ybWYoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBs
b25nIGxvY2F0aW9uKTsKKyAgICAgICAgUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGdldFVu
aWZvcm1mdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pOworICAgICAgICBp
bnQgZ2V0VW5pZm9ybWkoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKKyAg
ICAgICAgUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBnZXRVbmlmb3JtaXYoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKTsKIAotICAgICAgICBsb25nIGdldFVuaWZvcm1Mb2Nh
dGlvbihDYW52YXNQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICAgICAgbG9uZyBn
ZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKIAog
ICAgICAgICBmbG9hdCBnZXRWZXJ0ZXhBdHRyaWJmKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2ln
bmVkIGxvbmcgcG5hbWUpOwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGdl
dFZlcnRleEF0dHJpYmZ2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OworICAgICAgICBQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gZ2V0VmVydGV4QXR0cmliZnYo
dW5zaWduZWQgbG9uZyBpbmRleCwgdW5zaWduZWQgbG9uZyBwbmFtZSk7CiAgICAgICAgIGludCBn
ZXRWZXJ0ZXhBdHRyaWJpKHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
OwotICAgICAgICBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBnZXRWZXJ0ZXhBdHRyaWJpdih1
bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKKyAgICAgICAgUGFzc1Jl
ZlB0cjxXZWJHTEludEFycmF5PiBnZXRWZXJ0ZXhBdHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4
LCB1bnNpZ25lZCBsb25nIHBuYW1lKTsKICAgICAgICAgCiAgICAgICAgIGxvbmcgZ2V0VmVydGV4
QXR0cmliT2Zmc2V0KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUpOwog
CiAgICAgICAgIHZvaWQgaGludCh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBt
b2RlKTsKLSAgICAgICAgYm9vbCBpc0J1ZmZlcihDYW52YXNCdWZmZXIqKTsKKyAgICAgICAgYm9v
bCBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwogICAgICAgICBib29sIGlzRW5hYmxlZCh1bnNpZ25l
ZCBsb25nIGNhcCk7Ci0gICAgICAgIGJvb2wgaXNGcmFtZWJ1ZmZlcihDYW52YXNGcmFtZWJ1ZmZl
ciopOwotICAgICAgICBib29sIGlzUHJvZ3JhbShDYW52YXNQcm9ncmFtKik7Ci0gICAgICAgIGJv
b2wgaXNSZW5kZXJidWZmZXIoQ2FudmFzUmVuZGVyYnVmZmVyKik7Ci0gICAgICAgIGJvb2wgaXNT
aGFkZXIoQ2FudmFzU2hhZGVyKik7Ci0gICAgICAgIGJvb2wgaXNUZXh0dXJlKENhbnZhc1RleHR1
cmUqKTsKKyAgICAgICAgYm9vbCBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAg
ICAgICAgYm9vbCBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgICAgIGJvb2wgaXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICAgICAgYm9vbCBpc1NoYWRlcihXZWJH
TFNoYWRlciopOworICAgICAgICBib29sIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKICAgICAg
ICAgdm9pZCBsaW5lV2lkdGgoZG91YmxlKTsKLSAgICAgICAgdm9pZCBsaW5rUHJvZ3JhbShDYW52
YXNQcm9ncmFtKik7CisgICAgICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CiAg
ICAgICAgIHZvaWQgcGl4ZWxTdG9yZWkodW5zaWduZWQgbG9uZyBwbmFtZSwgbG9uZyBwYXJhbSk7
CiAgICAgICAgIHZvaWQgcG9seWdvbk9mZnNldChkb3VibGUgZmFjdG9yLCBkb3VibGUgdW5pdHMp
OwogICAgICAgICAKLSAgICAgICAgUGFzc1JlZlB0cjxDYW52YXNBcnJheT4gcmVhZFBpeGVscyhs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQs
IHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBsb25nIHR5cGUpOworICAgICAgICBQYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IHJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZvcm1hdCwgdW5z
aWduZWQgbG9uZyB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIHZvaWQgcmVsZWFzZVNoYWRlckNv
bXBpbGVyKCk7CiAgICAgICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogICAgICAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKGRv
dWJsZSB2YWx1ZSwgYm9vbCBpbnZlcnQpOwogICAgICAgICB2b2lkIHNjaXNzb3IobG9uZyB4LCBs
b25nIHksIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKLSAgICAg
ICAgdm9pZCBzaGFkZXJTb3VyY2UoQ2FudmFzU2hhZGVyKiwgY29uc3QgU3RyaW5nJiBzdHJpbmcp
OworICAgICAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYg
c3RyaW5nKTsKICAgICAgICAgdm9pZCBzdGVuY2lsRnVuYyh1bnNpZ25lZCBsb25nIGZ1bmMsIGxv
bmcgcmVmLCB1bnNpZ25lZCBsb25nIG1hc2spOwogICAgICAgICB2b2lkIHN0ZW5jaWxGdW5jU2Vw
YXJhdGUodW5zaWduZWQgbG9uZyBmYWNlLCB1bnNpZ25lZCBsb25nIGZ1bmMsIGxvbmcgcmVmLCB1
bnNpZ25lZCBsb25nIG1hc2spOwogICAgICAgICB2b2lkIHN0ZW5jaWxNYXNrKHVuc2lnbmVkIGxv
bmcgbWFzayk7CkBAIC0yMzEsNyArMjMxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAvLyBDdXJyZW50bHkgdGhleSByZXR1cm4gLTEgb24gYW55IGVycm9yLgogICAgICAgICBpbnQg
dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCBpbnRl
cm5hbGZvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgd2lkdGgsIHVuc2ln
bmVkIGhlaWdodCwgdW5zaWduZWQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBwaXhlbHMpOworICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIFdlYkdMQXJy
YXkqIHBpeGVscyk7CiAgICAgICAgIGludCB0ZXhJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5z
aWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSW1h
Z2VEYXRhKiBwaXhlbHMpOwpAQCAtMjQ1LDcgKzI0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICBpbnQgdGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5
KiBwaXhlbHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVu
c2lnbmVkIHR5cGUsIFdlYkdMQXJyYXkqIHBpeGVscyk7CiAgICAgICAgIGludCB0ZXhTdWJJbWFn
ZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVu
c2lnbmVkIHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGZv
cm1hdCwgdW5zaWduZWQgdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMpOwpAQCAtMjc2LDggKzI3Niw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGxv
bmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3NlLCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKICAg
ICAgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGxvbmcgbG9jYXRpb24sIGJvb2wgdHJhbnNwb3Nl
LCBmbG9hdCogdmFsdWUsIGludCBzaXplKTsKIAotICAgICAgICB2b2lkIHVzZVByb2dyYW0oQ2Fu
dmFzUHJvZ3JhbSopOwotICAgICAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShDYW52YXNQcm9ncmFt
Kik7CisgICAgICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICAgICAgdm9p
ZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7CiAKICAgICAgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0IHgpOwogICAgICAgICB2b2lkIHZlcnRl
eEF0dHJpYjFmdih1bnNpZ25lZCBsb25nIGluZHgsIGZsb2F0KiB2YWx1ZXMpOwpAQCAtMjk1LDcg
KzI5NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCk7CiAgICAgICAgIAogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3Rp
ZmljYXRpb24gYWJvdXQgcGFpbnQgZXZlbnRzCi0gICAgICAgIHZvaWQgYmVnaW5QYWludChDYW52
YXNSZW5kZXJpbmdDb250ZXh0M0QqIGNvbnRleHQpOworICAgICAgICB2b2lkIGJlZ2luUGFpbnQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICAgICAgdm9pZCBlbmRQYWludCgp
OwogCiAgICAgICAgIC8vIFN1cHBvcnQgZm9yIGJ1ZmZlciBjcmVhdGlvbiBhbmQgZGVsZXRpb24K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGlj
c0NvbnRleHQzRE1hYy5jcHAJKHJldmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCwxOCArMzAsMTggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaW5jbHVk
ZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYW52YXNBY3RpdmVJbmZvLmgiCi0jaW5jbHVk
ZSAiQ2FudmFzQXJyYXkuaCIKLSNpbmNsdWRlICJDYW52YXNCdWZmZXIuaCIKLSNpbmNsdWRlICJD
YW52YXNGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIkNhbnZhc0Zsb2F0QXJyYXkuaCIKLSNpbmNs
dWRlICJDYW52YXNJbnRBcnJheS5oIgotI2luY2x1ZGUgIkNhbnZhc09iamVjdC5oIgotI2luY2x1
ZGUgIkNhbnZhc1Byb2dyYW0uaCIKLSNpbmNsdWRlICJDYW52YXNSZW5kZXJidWZmZXIuaCIKLSNp
bmNsdWRlICJDYW52YXNTaGFkZXIuaCIKLSNpbmNsdWRlICJDYW52YXNUZXh0dXJlLmgiCi0jaW5j
bHVkZSAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2ZUlu
Zm8uaCIKKyNpbmNsdWRlICJXZWJHTEFycmF5LmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIK
KyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xGbG9hdEFycmF5
LmgiCisjaW5jbHVkZSAiV2ViR0xJbnRBcnJheS5oIgorI2luY2x1ZGUgIldlYkdMT2JqZWN0Lmgi
CisjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIu
aCIKKyNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgor
I2luY2x1ZGUgIldlYkdMVW5zaWduZWRCeXRlQXJyYXkuaCIKICNpbmNsdWRlICJDU3RyaW5nLmgi
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNv
bnRleHRDdXJyZQogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEKiBjb250ZXh0KQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwog
fQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1
cmUodW4KICAgICA6OmdsQWN0aXZlVGV4dHVyZSh0ZXh0dXJlKTsKIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIENhbnZhc1No
YWRlciogc2hhZGVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKICAgICBBU1NFUlQocHJv
Z3JhbSk7CiAgICAgQVNTRVJUKHNoYWRlcik7CkBAIC0yNTQsMzQgKzI1NCwzNCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoQ2FuCiAgICAgOjpnbEF0dGFjaFNoYWRlcigo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSwgKEdMdWludCkgc2hhZGVyLT5vYmplY3QoKSk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihDYW52YXNQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCB1bnNpZ25lZCBsb25nIGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAg
QVNTRVJUKHByb2dyYW0pOwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6
OmdsQmluZEF0dHJpYkxvY2F0aW9uKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpLCBpbmRleCwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1
ZmZlcih1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQnVmZmVyKiBidWZmZXIpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCBXZWJHTEJ1
ZmZlciogYnVmZmVyKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6
OmdsQmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1ZmZlci0+b2JqZWN0KCkg
OiAwKTsKIH0KIAogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5z
aWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc0ZyYW1lYnVmZmVyKiBidWZmZXIpCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIFdlYkdM
RnJhbWVidWZmZXIqIGJ1ZmZlcikKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
CiAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVCh0YXJnZXQsIGJ1ZmZlciA/IChHTHVpbnQpIGJ1
ZmZlci0+b2JqZWN0KCkgOiBtX2Zibyk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJp
bmRSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIENhbnZhc1JlbmRlcmJ1ZmZlciog
cmVuZGVyYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFJlbmRlcmJ1ZmZlcih1
bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKIHsK
ICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7CiAgICAgOjpnbEJpbmRCdWZmZXIodGFy
Z2V0LCByZW5kZXJidWZmZXIgPyAoR0x1aW50KSByZW5kZXJidWZmZXItPm9iamVjdCgpIDogMCk7
CiB9CiAKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIENhbnZhc1RleHR1cmUqIHRleHR1cmUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpiaW5kVGV4dHVyZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJl
KQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICA6OmdsQmluZFRleHR1
cmUodGFyZ2V0LCB0ZXh0dXJlID8gKEdMdWludCkgdGV4dHVyZS0+b2JqZWN0KCkgOiAwKTsKQEAg
LTMyMyw3ICszMjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKHVuc2ln
CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6Z2xCdWZmZXJEYXRhKHRh
cmdldCwgc2l6ZSwgMCwgdXNhZ2UpOwogfQotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVy
RGF0YSh1bnNpZ25lZCBsb25nIHRhcmdldCwgQ2FudmFzQXJyYXkqIGFycmF5LCB1bnNpZ25lZCBs
b25nIHVzYWdlKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZ25lZCBs
b25nIHRhcmdldCwgV2ViR0xBcnJheSogYXJyYXksIHVuc2lnbmVkIGxvbmcgdXNhZ2UpCiB7CiAg
ICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CkBAIC0z
MzIsNyArMzMyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YSh1bnNpZwog
ICAgIDo6Z2xCdWZmZXJEYXRhKHRhcmdldCwgYXJyYXktPnNpemVJbkJ5dGVzKCksIGFycmF5LT5i
YXNlQWRkcmVzcygpLCB1c2FnZSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZl
clN1YkRhdGEodW5zaWduZWQgbG9uZyB0YXJnZXQsIGxvbmcgb2Zmc2V0LCBDYW52YXNBcnJheSog
YXJyYXkpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKHVuc2lnbmVkIGxv
bmcgdGFyZ2V0LCBsb25nIG9mZnNldCwgV2ViR0xBcnJheSogYXJyYXkpCiB7CiAgICAgaWYgKCFh
cnJheSB8fCAhYXJyYXktPmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CkBAIC0zNzcsNyArMzc3
LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKGJvb2wgcgogICAgIDo6Z2xD
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKENhbnZhc1NoYWRlciogc2hhZGVyKQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIEFT
U0VSVChzaGFkZXIpOwogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKQEAgLTQyMCw3
ICs0MjAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKGRvdWJsCiAgICAg
OjpnbERlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpkZXRhY2hTaGFkZXIoQ2FudmFzUHJvZ3JhbSogcHJvZ3JhbSwgQ2FudmFzU2hhZGVyKiBzaGFk
ZXIpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAg
ICBBU1NFUlQoc2hhZGVyKTsKQEAgLTQ3NiwxMyArNDc2LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZsdXNoKCkKICAgICA6OmdsRmx1c2goKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2ln
bmVkIGxvbmcgYXR0YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIENh
bnZhc1JlbmRlcmJ1ZmZlciogYnVmZmVyKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0
YWNobWVudCwgdW5zaWduZWQgbG9uZyByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVm
ZmVyKiBidWZmZXIpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIDo6
Z2xGcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlckVYVCh0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1
ZmZlcnRhcmdldCwgYnVmZmVyID8gKEdMdWludCkgYnVmZmVyLT5vYmplY3QoKSA6IDApOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRCh1bnNpZ25lZCBs
b25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHRleHRh
cmdldCwgQ2FudmFzVGV4dHVyZSogdGV4dHVyZSwgbG9uZyBsZXZlbCkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIGF0dGFjaG1lbnQsIHVuc2lnbmVkIGxvbmcgdGV4dGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIGxvbmcgbGV2ZWwpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRP
YmopOwogICAgIDo6Z2xGcmFtZWJ1ZmZlclRleHR1cmUyREVYVCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZSA/IChHTHVpbnQpIHRleHR1cmUtPm9iamVjdCgpIDogMCwgbGV2
ZWwpOwpAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRl
TWlwbWFwKHUKICAgICA6OmdsR2VuZXJhdGVNaXBtYXBFWFQodGFyZ2V0KTsKIH0KIAotYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlQXR0cmliKENhbnZhc1Byb2dyYW0qIHByb2dyYW0s
IHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBs
b25nIGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQogewogICAgIGlmICghcHJvZ3JhbS0+b2JqZWN0
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTUyMCw3ICs1MjAsNyBAQCBib29sIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAgICAg
Ci1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKENhbnZhc1Byb2dyYW0q
IHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgaW5kZXgsIEFjdGl2ZUluZm8mIGluZm8pCitib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
dW5zaWduZWQgbG9uZyBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKIHsKICAgICBpZiAoIXByb2dy
YW0tPm9iamVjdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC01NDAsNyArNTQwLDcgQEAg
Ym9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybQogICAgIHJldHVybiB0cnVl
OwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKENhbnZhc1By
b2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK2ludCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7CiAgICAgaWYgKCFwcm9ncmFtKQogICAgICAgICByZXR1cm4gLTE7CkBAIC01Njcs
NyArNTY3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludCh1bnNpZ25lZCBsbwogICAg
IDo6Z2xIaW50KHRhcmdldCwgbW9kZSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6Omlz
QnVmZmVyKENhbnZhc0J1ZmZlciogYnVmZmVyKQorYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNC
dWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKIHsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtNTgyLDcgKzU4Miw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzRW5hYmxlZCh1bnNpZ24KICAgICByZXR1cm4gOjpnbElzRW5hYmxlZChjYXApOwogfQogCi1i
b29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKENhbnZhc0ZyYW1lYnVmZmVyKiBm
cmFtZWJ1ZmZlcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCiB7CiAgICAgaWYgKCFmcmFtZWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNTkxLDcgKzU5MSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0
M0Q6OmlzRnJhbWVidWZmZXIoQ2EKICAgICByZXR1cm4gOjpnbElzRnJhbWVidWZmZXJFWFQoKEdM
dWludCkgZnJhbWVidWZmZXItPm9iamVjdCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQz
RDo6aXNQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0pCitib29sIEdyYXBoaWNzQ29udGV4
dDNEOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQogewogICAgIGlmICghcHJvZ3Jh
bSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjAwLDcgKzYwMCw3IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShDYW52YXMKICAgICByZXR1cm4gOjpnbElzUHJvZ3JhbSgo
R0x1aW50KSBwcm9ncmFtLT5vYmplY3QoKSk7CiB9CiAKLWJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmlzUmVuZGVyYnVmZmVyKENhbnZhc1JlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQorYm9vbCBH
cmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRl
cmJ1ZmZlcikKIHsKICAgICBpZiAoIXJlbmRlcmJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKEMKICAgICByZXR1cm4gOjpnbElzUmVuZGVyYnVmZmVyRVhUKChHTHVpbnQpIHJlbmRlcmJ1
ZmZlci0+b2JqZWN0KCkpOwogfQogCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihD
YW52YXNTaGFkZXIqIHNoYWRlcikKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFdl
YkdMU2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgaWYgKCFzaGFkZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKQEAgLTYxOCw3ICs2MTgsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRl
cihDYW52YXNTCiAgICAgcmV0dXJuIDo6Z2xJc1NoYWRlcigoR0x1aW50KSBzaGFkZXItPm9iamVj
dCgpKTsKIH0KIAotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKENhbnZhc1RleHR1
cmUqIHRleHR1cmUpCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc1RleHR1cmUoV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlKQogewogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNjMzLDcgKzYzMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChk
b3VibGUKICAgICA6OmdsTGluZVdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCkpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShDYW52YXNQcm9ncmFtKiBwcm9n
cmFtKQordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICBlbnN1cmVDb250ZXh0KG1fY29u
dGV4dE9iaik7CkBAIC02NTIsNyArNjUyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cG9s
eWdvbk9mZnNldChkbwogICAgIDo6Z2xQb2x5Z29uT2Zmc2V0KHN0YXRpY19jYXN0PGZsb2F0Pihm
YWN0b3IpLCBzdGF0aWNfY2FzdDxmbG9hdD4odW5pdHMpKTsKIH0KIAotUGFzc1JlZlB0cjxDYW52
YXNBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMobG9uZyB4LCBsb25nIHksIHVu
c2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LCB1bnNpZ25lZCBsb25nIGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB0eXBlKQorUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBHcmFwaGlj
c0NvbnRleHQzRDo6cmVhZFBpeGVscyhsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0
aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQsIHVuc2lnbmVkIGxvbmcgZm9ybWF0LCB1bnNpZ25lZCBs
b25nIHR5cGUpCiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIApAQCAt
NjYzLDcgKzY2Myw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzQXJyYXk+IEdyYXBoaWNzQ29udGV4dDMK
ICAgICBpZiAodHlwZSAhPSBHTF9VTlNJR05FRF9CWVRFIHx8IGZvcm1hdCAhPSBHTF9SR0JBKQog
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5PiBhcnJheSA9IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBo
ZWlnaHQgKiA0KTsKKyAgICBSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUod2lkdGggKiBoZWlnaHQgKiA0KTsKICAgICA6
OmdsUmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIChHTHZvaWQq
KSBhcnJheS0+ZGF0YSgpKTsKICAgICByZXR1cm4gYXJyYXk7ICAgIAogfQpAQCAtNjkzLDcgKzY5
Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IobG9uZyB4LCAKICAgICA6Omds
U2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c2hhZGVyU291cmNlKENhbnZhc1NoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hh
ZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZykKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICAK
QEAgLTg3Niw3ICs4NzYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4
NGZ2CiAgICAgOjpnbFVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwg
YXJyYXkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKENhbnZhc1By
b2dyYW0qIHByb2dyYW0pCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSkKIHsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAgICAgCkBAIC04ODQs
NyArODg0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShDYW52YQogICAg
IDo6Z2xVc2VQcm9ncmFtKChHTHVpbnQpIHByb2dyYW0tPm9iamVjdCgpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKENhbnZhc1Byb2dyYW0qIHByb2dyYW0p
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtKQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICAKQEAgLTk1OSw3ICs5NTksNyBA
QCBzdGF0aWMgaW50IHNpemVGb3JHZXRQYXJhbSh1bnNpZ25lZCBsb25nCiAgICAgICAgIGNhc2Ug
R0xfQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOiAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgIGNh
c2UgR0xfQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOiAgICAgICAgcmV0dXJuIDI7CiAgICAgICAg
IGNhc2UgR0xfQUxQSEFfQklUUzogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAg
ICAgIGNhc2UgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgcmV0dXJuIDE7IC8v
ICgqIGFjdHVhbGx5IGEgQ2FudmFzQnVmZmVyKikKKyAgICAgICAgY2FzZSBHTF9BUlJBWV9CVUZG
RVJfQklORElORzogICAgICAgICAgICByZXR1cm4gMTsgLy8gKCogYWN0dWFsbHkgYSBXZWJHTEJ1
ZmZlciopCiAgICAgICAgIGNhc2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDE7CiAgICAgICAgIGNhc2UgR0xfQkxFTkRfQ09MT1I6ICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDQ7CiAgICAgICAgIGNhc2UgR0xfQkxFTkRfRFNUX0FMUEhBOiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDE7CkBAIC05NzQsNyArOTc0LDcgQEAgc3RhdGljIGludCBzaXplRm9yR2V0
UGFyYW0odW5zaWduZWQgbG9uZwogICAgICAgICBjYXNlIEdMX0NPTVBSRVNTRURfVEVYVFVSRV9G
T1JNQVRTOiAgICAgIHJldHVybiBHTF9OVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM7CiAg
ICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7
CiAgICAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFX01PREU6ICAgICAgICAgICAgICAgICAgcmV0dXJu
IDE7Ci0gICAgICAgIGNhc2UgR0xfQ1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgcmV0
dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgQ2FudmFzUHJvZ3JhbSopCisgICAgICAgIGNhc2UgR0xf
Q1VSUkVOVF9QUk9HUkFNOiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5
IGEgV2ViR0xQcm9ncmFtKikKICAgICAgICAgY2FzZSBHTF9ERVBUSF9CSVRTOiAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBHTF9ERVBUSF9DTEVBUl9WQUxVRTog
ICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgY2FzZSBHTF9ERVBUSF9GVU5DOiAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTk4Miw4ICs5ODIsOCBAQCBzdGF0aWMgaW50
IHNpemVGb3JHZXRQYXJhbSh1bnNpZ25lZCBsb25nCiAgICAgICAgIGNhc2UgR0xfREVQVEhfVEVT
VDogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgR0xfREVQVEhf
V1JJVEVNQVNLOiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgR0xfRElU
SEVSOiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGNhc2UgR0xf
RUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgcmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5
IGEgQ2FudmFzQnVmZmVyKikKLSAgICAgICAgY2FzZSBHTF9GUkFNRUJVRkZFUl9CSU5ESU5HX0VY
VDogICAgICAgICByZXR1cm4gMTsgLy8gKCogYWN0dWFsbHkgYSBDYW52YXNGcmFtZWJ1ZmZlciop
CisgICAgICAgIGNhc2UgR0xfRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgcmV0dXJu
IDE7IC8vICgqIGFjdHVhbGx5IGEgV2ViR0xCdWZmZXIqKQorICAgICAgICBjYXNlIEdMX0ZSQU1F
QlVGRkVSX0JJTkRJTkdfRVhUOiAgICAgICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIFdl
YkdMRnJhbWVidWZmZXIqKQogICAgICAgICBjYXNlIEdMX0ZST05UX0ZBQ0U6ICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5U
OiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX0dSRUVOX0JJVFM6ICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAgc3RhdGljIGlu
dCBzaXplRm9yR2V0UGFyYW0odW5zaWduZWQgbG9uZwogICAgICAgICBjYXNlIEdMX1BPTFlHT05f
T0ZGU0VUX0ZJTEw6ICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1BPTFlH
T05fT0ZGU0VUX1VOSVRTOiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1JF
RF9CSVRTOiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIEdM
X1JFTkRFUkJVRkZFUl9CSU5ESU5HX0VYVDogICAgICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxs
eSBhIENhbnZhc1JlbmRlcmJ1ZmZlciopCisgICAgICAgIGNhc2UgR0xfUkVOREVSQlVGRkVSX0JJ
TkRJTkdfRVhUOiAgICAgICAgcmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgV2ViR0xSZW5kZXJi
dWZmZXIqKQogICAgICAgICBjYXNlIEdMX1NBTVBMRV9CVUZGRVJTOiAgICAgICAgICAgICAgICAg
IHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6ICAgICAg
ICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRV9WQUxVRTogICAg
ICAgICAgIHJldHVybiAxOwpAQCAtMTAzNSw4ICsxMDM1LDggQEAgc3RhdGljIGludCBzaXplRm9y
R2V0UGFyYW0odW5zaWduZWQgbG9uZwogICAgICAgICBjYXNlIEdMX1NURU5DSUxfVkFMVUVfTUFT
SzogICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1NURU5DSUxfV1JJVEVN
QVNLOiAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIEdMX1NVQlBJWEVMX0JJ
VFM6ICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
QklORElOR18yRDogICAgICAgICAgICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZh
c1RleHR1cmUqKQotICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQklORElOR19DVUJFX01BUDogICAg
ICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc1RleHR1cmUqKQorICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQklORElOR18yRDogICAgICAgICAgICAgIHJldHVybiAxOyAvLyAoKiBh
Y3R1YWxseSBhIFdlYkdMVGV4dHVyZSopCisgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9CSU5ESU5H
X0NVQkVfTUFQOiAgICAgICAgcmV0dXJuIDE7IC8vICgqIGFjdHVhbGx5IGEgV2ViR0xUZXh0dXJl
KikKICAgICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICByZXR1
cm4gMTsKICAgICAgICAgY2FzZSBHTF9WSUVXUE9SVDogICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gNDsKICAgICB9CkBAIC0xMDcxLDcgKzEwNzEsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRCb29sZWFuKHVuc2lnCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1QYXNzUmVmUHRy
PENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYo
dW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xVbnNpZ25lZEJ5dGVBcnJheT4g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJvb2xlYW52KHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAg
ICAgaW50IHNpemUgPSBzaXplRm9yR2V0UGFyYW0ocG5hbWUpOwogICAgIGlmIChzaXplIDwgMSkg
CkBAIC0xMDc5LDcgKzEwNzksNyBAQCBQYXNzUmVmUHRyPENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5
PiBHcmFwCiAgICAgCiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIAotICAg
IFJlZlB0cjxDYW52YXNVbnNpZ25lZEJ5dGVBcnJheT4gYXJyYXkgPSBDYW52YXNVbnNpZ25lZEJ5
dGVBcnJheTo6Y3JlYXRlKHNpemUpOworICAgIFJlZlB0cjxXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
PiBhcnJheSA9IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmNyZWF0ZShzaXplKTsKICAgICBib29s
IGlzQWxsb2NlZCA9IGZhbHNlOwogICAgIEdMYm9vbGVhbiBidWZbNF07CiAgICAgR0xib29sZWFu
KiBwYnVmID0gYnVmOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAgZmxvYXQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEZsb2F0KHVuc2lnbgogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUGFzc1JlZlB0cjxD
YW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RmxvYXR2KHVuc2lnbmVkIGxv
bmcgcG5hbWUpCitQYXNzUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEZsb2F0dih1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGludCBzaXplID0gc2l6ZUZv
ckdldFBhcmFtKHBuYW1lKTsKICAgICBpZiAoc2l6ZSA8IDEpIApAQCAtMTEzNSw3ICsxMTM1LDcg
QEAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbgogICAgIAogICAgIGVu
c3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKLSAgICBSZWZQdHI8Q2FudmFzRmxvYXRB
cnJheT4gYXJyYXkgPSBDYW52YXNGbG9hdEFycmF5OjpjcmVhdGUoc2l6ZSk7CisgICAgUmVmUHRy
PFdlYkdMRmxvYXRBcnJheT4gYXJyYXkgPSBXZWJHTEZsb2F0QXJyYXk6OmNyZWF0ZShzaXplKTsK
ICAgICBib29sIGlzQWxsb2NlZCA9IGZhbHNlOwogICAgIEdMZmxvYXQgYnVmWzRdOwogICAgIEdM
ZmxvYXQqIHBidWYgPSBidWY7CkBAIC0xMTgzLDcgKzExODMsNyBAQCBpbnQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEludGVnZXIodW5zaWduCiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi1QYXNzUmVm
UHRyPENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWdu
ZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgaW50IHNpemUgPSBz
aXplRm9yR2V0UGFyYW0ocG5hbWUpOwogICAgIGlmIChzaXplIDwgMSkgCkBAIC0xMTkxLDcgKzEx
OTEsNyBAQCBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRlCiAgICAgCiAg
ICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIAotICAgIFJlZlB0cjxDYW52YXNJ
bnRBcnJheT4gYXJyYXkgPSBDYW52YXNJbnRBcnJheTo6Y3JlYXRlKHNpemUpOworICAgIFJlZlB0
cjxXZWJHTEludEFycmF5PiBhcnJheSA9IFdlYkdMSW50QXJyYXk6OmNyZWF0ZShzaXplKTsKICAg
ICBib29sIGlzQWxsb2NlZCA9IGZhbHNlOwogICAgIEdMaW50IGJ1Zls0XTsKICAgICBHTGludCog
cGJ1ZiA9IGJ1ZjsKQEAgLTEyMjAsMTAgKzEyMjAsMTAgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRCdWZmZXJQYXJhbWV0ZQogICAgIHJldHVybiBkYXRhOwogfQogCi1QYXNzUmVmUHRyPENh
bnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYodW5z
aWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgcG5hbWUpCitQYXNzUmVmUHRyPFdlYkdM
SW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0
KG1fY29udGV4dE9iaik7Ci0gICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZh
c0ludEFycmF5OjpjcmVhdGUoMSk7CisgICAgUmVmUHRyPFdlYkdMSW50QXJyYXk+IGFycmF5ID0g
V2ViR0xJbnRBcnJheTo6Y3JlYXRlKDEpOwogICAgIEdMaW50IGRhdGE7CiAgICAgOjpnbEdldEJ1
ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZkYXRhKTsKICAgICBhcnJheS0+c2V0KDAs
IHN0YXRpY19jYXN0PGludD4oZGF0YSkpOwpAQCAtMTIzOSwxMCArMTIzOSwxMCBAQCBpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXR0CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAK
LVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBhdHRhY2htZW50LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTElu
dEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyaXYodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgYXR0YWNobWVudCwgdW5z
aWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0g
ICAgUmVmUHRyPENhbnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFycmF5OjpjcmVhdGUo
MSk7CisgICAgUmVmUHRyPFdlYkdMSW50QXJyYXk+IGFycmF5ID0gV2ViR0xJbnRBcnJheTo6Y3Jl
YXRlKDEpOwogICAgIEdMaW50IGRhdGE7CiAgICAgOjpnbEdldEZyYW1lYnVmZmVyQXR0YWNobWVu
dFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZkYXRhKTsKICAgICBh
cnJheS0+c2V0KDAsIHN0YXRpY19jYXN0PGludD4oZGF0YSkpOwpAQCAtMTI1MCw3ICsxMjUwLDcg
QEAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZQogICAgIHJldHVybiBh
cnJheTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaShDYW52YXNQcm9n
cmFtKiBwcm9ncmFtLCB1bnNpZ25lZCBsb25nIHBuYW1lKQoraW50IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRQcm9ncmFtaShXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CiB7CiAgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmopOwogICAgIEdMaW50IGRhdGE7CkBA
IC0xMjU4LDEwICsxMjU4LDEwIEBAIGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWko
Q2FudmEKICAgICByZXR1cm4gZGF0YTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4g
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCB1
bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEludEFycmF5PiBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgdW5zaWduZWQgbG9u
ZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgUmVmUHRy
PENhbnZhc0ludEFycmF5PiBhcnJheSA9IENhbnZhc0ludEFycmF5OjpjcmVhdGUoMSk7CisgICAg
UmVmUHRyPFdlYkdMSW50QXJyYXk+IGFycmF5ID0gV2ViR0xJbnRBcnJheTo6Y3JlYXRlKDEpOwog
ICAgIEdMaW50IGRhdGE7CiAgICAgOjpnbEdldFByb2dyYW1pdigoR0x1aW50KSBwcm9ncmFtLT5v
YmplY3QoKSwgcG5hbWUsICZkYXRhKTsKICAgICBhcnJheS0+c2V0KDAsIHN0YXRpY19jYXN0PGlu
dD4oZGF0YSkpOwpAQCAtMTI2OSw3ICsxMjY5LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJh
eT4gR3JhcGhpY3NDb250ZQogICAgIHJldHVybiBhcnJheTsKIH0KIAotU3RyaW5nIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhDYW52YXNQcm9ncmFtKiBwcm9ncmFtKQorU3Ry
aW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHBy
b2dyYW0pCiB7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogICAgIApAQCAtMTI5MywxMCArMTI5Mywx
MCBAQCBpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhCiAgICAgcmV0dXJu
IGRhdGE7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWdu
ZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNp
Z25lZCBsb25nIHBuYW1lKQogewogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKLSAg
ICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gQ2FudmFzSW50QXJyYXk6OmNyZWF0ZSgx
KTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBXZWJHTEludEFycmF5OjpjcmVh
dGUoMSk7CiAgICAgR0xpbnQgZGF0YTsKICAgICA6OmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFy
Z2V0LCBwbmFtZSwgJmRhdGEpOwogICAgIGFycmF5LT5zZXQoMCwgc3RhdGljX2Nhc3Q8aW50Pihk
YXRhKSk7CkBAIC0xMzA0LDcgKzEzMDQsNyBAQCBQYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBH
cmFwaGljc0NvbnRlCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1pbnQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldFNoYWRlcmkoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlcmkoV2ViR0xTaGFkZXIqIHNoYWRlciwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKICAgICAKQEAgLTEz
MTQsMTIgKzEzMTQsMTIgQEAgaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpKENhbnZh
cwogICAgIHJldHVybiBkYXRhOwogfQogCi1QYXNzUmVmUHRyPENhbnZhc0ludEFycmF5PiBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYoQ2FudmFzU2hhZGVyKiBzaGFkZXIsIHVuc2lnbmVk
IGxvbmcgcG5hbWUpCitQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJpdihXZWJHTFNoYWRlciogc2hhZGVyLCB1bnNpZ25lZCBsb25nIHBuYW1lKQog
ewogICAgIEFTU0VSVChzaGFkZXIpOwogICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0
T2JqKTsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gQ2FudmFzSW50QXJyYXk6
OmNyZWF0ZSgxKTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBXZWJHTEludEFy
cmF5OjpjcmVhdGUoMSk7CiAgICAgR0xpbnQgZGF0YTsKICAgICA6OmdsR2V0U2hhZGVyaXYoKEdM
dWludCkgc2hhZGVyLT5vYmplY3QoKSwgcG5hbWUsICZkYXRhKTsKICAgICBhcnJheS0+c2V0KDAs
IHN0YXRpY19jYXN0PGludD4oZGF0YSkpOwpAQCAtMTMyNyw3ICsxMzI3LDcgQEAgUGFzc1JlZlB0
cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZQogICAgIHJldHVybiBhcnJheTsKIH0KIAot
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKENhbnZhc1NoYWRlciog
c2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyKiBzaGFkZXIpCiB7CiAgICAgQVNTRVJUKHNoYWRlcik7CiAgICAgCkBAIC0xMzQzLDcg
KzEzNDMsNyBAQCBTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9MCiAgICAg
cmV0dXJuIHM7CiB9CiAKLVN0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNl
KENhbnZhc1NoYWRlciogc2hhZGVyKQorU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlcikKIHsKICAgICBBU1NFUlQoc2hhZGVyKTsKIApA
QCAtMTM2OCwxMCArMTM2OCwxMCBAQCBmbG9hdCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFy
YW1ldGVyCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVBhc3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJh
eT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2KHVuc2lnbmVkIGxvbmcgdGFy
Z2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdih1bnNpZ25lZCBsb25nIHRhcmdldCwg
dW5zaWduZWQgbG9uZyBwbmFtZSkKIHsKICAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7
Ci0gICAgUmVmUHRyPENhbnZhc0Zsb2F0QXJyYXk+IGFycmF5ID0gQ2FudmFzRmxvYXRBcnJheTo6
Y3JlYXRlKDEpOworICAgIFJlZlB0cjxXZWJHTEZsb2F0QXJyYXk+IGFycmF5ID0gV2ViR0xGbG9h
dEFycmF5OjpjcmVhdGUoMSk7CiAgICAgR0xmbG9hdCBkYXRhOwogICAgIDo6Z2xHZXRUZXhQYXJh
bWV0ZXJmdih0YXJnZXQsIHBuYW1lLCAmZGF0YSk7CiAgICAgYXJyYXktPnNldCgwLCBzdGF0aWNf
Y2FzdDxmbG9hdD4oZGF0YSkpOwpAQCAtMTM4NywxMCArMTM4NywxMCBAQCBpbnQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmkoCiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLVBhc3NS
ZWZQdHI8Q2FudmFzSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJp
dih1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBwbmFtZSkKK1Bhc3NSZWZQdHI8
V2ViR0xJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGVuc3VyZUNvbnRl
eHQobV9jb250ZXh0T2JqKTsKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gQ2Fu
dmFzSW50QXJyYXk6OmNyZWF0ZSgxKTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkg
PSBXZWJHTEludEFycmF5OjpjcmVhdGUoMSk7CiAgICAgR0xpbnQgZGF0YTsKICAgICA6OmdsR2V0
VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJmRhdGEpOwogICAgIGFycmF5LT5zZXQoMCwg
c3RhdGljX2Nhc3Q8aW50PihkYXRhKSk7CkBAIC0xMzk4LDcgKzEzOTgsNyBAQCBQYXNzUmVmUHRy
PENhbnZhc0ludEFycmF5PiBHcmFwaGljc0NvbnRlCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1m
bG9hdCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWYoQ2FudmFzUHJvZ3JhbSogcHJvZ3Jh
bSwgbG9uZyBsb2NhdGlvbikKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZihX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gcXVlcnkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzaXpl
IG5lZWRlZAogICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKQEAgLTE0MDcsNyArMTQwNyw3IEBA
IGZsb2F0IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZihDYW4KICAgICByZXR1cm4gMDsK
IH0KIAotUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybWZ2KENhbnZhc1Byb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCitQYXNzUmVm
UHRyPFdlYkdMRmxvYXRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdihXZWJH
TFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFdlIG5l
ZWQgdG8gcXVlcnkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzaXplIG5l
ZWRlZAogICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKQEAgLTE0MTYsNyArMTQxNiw3IEBAIFBh
c3NSZWZQdHI8Q2FudmFzRmxvYXRBcnJheT4gR3JhcGhpY3NDb24KICAgICByZXR1cm4gMDsKIH0K
IAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaShDYW52YXNQcm9ncmFtKiBwcm9n
cmFtLCBsb25nIGxvY2F0aW9uKQoraW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIGxvbmcgbG9jYXRpb24pCiB7CiAgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gcXVlcnkgZ2xHZXRVbmlmb3JtTG9jYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBzaXpl
IG5lZWRlZAogICAgIFVOVVNFRF9QQVJBTShwcm9ncmFtKTsKQEAgLTE0MjUsNyArMTQyNSw3IEBA
IGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWkoQ2FudmEKICAgICByZXR1cm4gMDsK
IH0KIAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVu
aWZvcm1pdihDYW52YXNQcm9ncmFtKiBwcm9ncmFtLCBsb25nIGxvY2F0aW9uKQorUGFzc1JlZlB0
cjxXZWJHTEludEFycmF5PiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgbG9uZyBsb2NhdGlvbikKIHsKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0
byBxdWVyeSBnbEdldFVuaWZvcm1Mb2NhdGlvbiB0byBkZXRlcm1pbmUgdGhlIHNpemUgbmVlZGVk
CiAgICAgVU5VU0VEX1BBUkFNKHByb2dyYW0pOwpAQCAtMTQzNCw3ICsxNDM0LDcgQEAgUGFzc1Jl
ZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZQogICAgIHJldHVybiAwOwogfQogCi1s
b25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24oQ2FudmFzUHJvZ3JhbSog
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1l
KQogewogICAgIEFTU0VSVChwcm9ncmFtKTsKICAgICAKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIGxv
bmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1Mb2NhdGkKIHN0YXRpYyBpbnQgc2l6ZUZv
ckdldFZlcnRleEF0dHJpYlBhcmFtKHVuc2lnbmVkIGxvbmcgcG5hbWUpCiB7CiAgICAgc3dpdGNo
KHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklO
RElORzogICAgIHJldHVybiAxOyAvLyAoKiBhY3R1YWxseSBhIENhbnZhc0J1ZmZlciopCisgICAg
ICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzogICAgIHJldHVy
biAxOyAvLyAoKiBhY3R1YWxseSBhIFdlYkdMQnVmZmVyKikKICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6ICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNh
c2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOiAgICAgICAgICAgICAgIHJldHVybiAxOwog
ICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOiAgICAgICAgICAgICBy
ZXR1cm4gMTsKQEAgLTE0NjUsNyArMTQ2NSw3IEBAIGZsb2F0IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRWZXJ0ZXhBdHRyaWIKICAgICByZXR1cm4gYnVmWzBdOwogfQogCi1QYXNzUmVmUHRyPENhbnZh
c0Zsb2F0QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25l
ZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQorUGFzc1JlZlB0cjxXZWJHTEZsb2F0
QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJmdih1bnNpZ25lZCBsb25n
IGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAgIGludCBzaXplID0gc2l6ZUZvckdl
dFZlcnRleEF0dHJpYlBhcmFtKHBuYW1lKTsKICAgICBpZiAoc2l6ZSA8IDEpIApAQCAtMTQ3Myw3
ICsxNDczLDcgQEAgUGFzc1JlZlB0cjxDYW52YXNGbG9hdEFycmF5PiBHcmFwaGljc0NvbgogICAg
IAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsKICAgICAKLSAgICBSZWZQdHI8Q2Fu
dmFzRmxvYXRBcnJheT4gYXJyYXkgPSBDYW52YXNGbG9hdEFycmF5OjpjcmVhdGUoc2l6ZSk7Cisg
ICAgUmVmUHRyPFdlYkdMRmxvYXRBcnJheT4gYXJyYXkgPSBXZWJHTEZsb2F0QXJyYXk6OmNyZWF0
ZShzaXplKTsKICAgICBHTGZsb2F0IGJ1Zls0XTsKICAgICA6OmdsR2V0VmVydGV4QXR0cmliZnYo
aW5kZXgsIHBuYW1lLCBidWYpOwogICAgICAgICAgICAgCkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBp
bnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmkoCiAgICAgcmV0dXJuIGJ1Zlsw
XTsKIH0KIAotUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJheT4gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFZlcnRleEF0dHJpYml2KHVuc2lnbmVkIGxvbmcgaW5kZXgsIHVuc2lnbmVkIGxvbmcgcG5hbWUp
CitQYXNzUmVmUHRyPFdlYkdMSW50QXJyYXk+IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhB
dHRyaWJpdih1bnNpZ25lZCBsb25nIGluZGV4LCB1bnNpZ25lZCBsb25nIHBuYW1lKQogewogICAg
IGludCBzaXplID0gc2l6ZUZvckdldFZlcnRleEF0dHJpYlBhcmFtKHBuYW1lKTsKICAgICBpZiAo
c2l6ZSA8IDEpIApAQCAtMTQ5OSw3ICsxNDk5LDcgQEAgUGFzc1JlZlB0cjxDYW52YXNJbnRBcnJh
eT4gR3JhcGhpY3NDb250ZQogICAgIAogICAgIGVuc3VyZUNvbnRleHQobV9jb250ZXh0T2JqKTsK
ICAgICAKLSAgICBSZWZQdHI8Q2FudmFzSW50QXJyYXk+IGFycmF5ID0gQ2FudmFzSW50QXJyYXk6
OmNyZWF0ZShzaXplKTsKKyAgICBSZWZQdHI8V2ViR0xJbnRBcnJheT4gYXJyYXkgPSBXZWJHTElu
dEFycmF5OjpjcmVhdGUoc2l6ZSk7CiAgICAgR0xpbnQgYnVmWzRdOwogICAgIDo6Z2xHZXRWZXJ0
ZXhBdHRyaWJpdihpbmRleCwgcG5hbWUsIGJ1Zik7CiAgICAgICAgICAgICAKQEAgLTE1NDIsNyAr
MTU0Miw3IEBAIHN0YXRpYyB2b2lkIGltYWdlVG9UZXh0dXJlKEltYWdlKiBpbWFnZSwKICAgICBm
cmVlKHRleHR1cmVEYXRhKTsKIH0KIAotaW50IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJE
KHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFsZm9ybWF0
LCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LCB1bnNpZ25lZCBib3JkZXIsIHVuc2ln
bmVkIGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgQ2FudmFzQXJyYXkqIHBpeGVscykKK2ludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZ25lZCBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCwgdW5zaWduZWQgYm9yZGVyLCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIFdlYkdM
QXJyYXkqIHBpeGVscykKIHsKICAgICAvLyBGSVhNRTogTmVlZCB0byBkbyBib3VuZHMgY2hlY2tp
bmcgb24gdGhlIGJ1ZmZlciBoZXJlLgogICAgIDo6Z2xUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzLT5iYXNlQWRkcmVzcygpKTsKQEAgLTE1ODksNyArMTU4OSw3IEBAIGludCBHcmFwaGljc0Nv
bnRleHQzRDo6dGV4SW1hZ2UyRCh1bnNpZ24KICAgICByZXR1cm4gLTE7CiB9CiAKLWludCBHcmFw
aGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxl
dmVsLCB1bnNpZ25lZCB4b2ZmLCB1bnNpZ25lZCB5b2ZmLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0LCB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIENhbnZhc0FycmF5KiBw
aXhlbHMpCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFy
Z2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZiwgdW5zaWduZWQgeW9mZiwgdW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQgZm9ybWF0LCB1bnNpZ25lZCB0eXBl
LCBXZWJHTEFycmF5KiBwaXhlbHMpCiB7CiAgICAgLy8gRklYTUU6IHdlIHdpbGwgbmVlZCB0byBk
ZWFsIHdpdGggUGl4ZWxTdG9yZSBwYXJhbXMgd2hlbiBkZWFsaW5nIHdpdGggaW1hZ2UgYnVmZmVy
cyB0aGF0IGRpZmZlciBmcm9tIHRoZSBzdWJpbWFnZSBzaXplCiAgICAgVU5VU0VEX1BBUkFNKHRh
cmdldCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJl
dmlzaW9uIDUwNjM0KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKIAogI2luY2x1ZGUgIkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRl
ICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTkyLDcgKzE5Miw3IEBA
IGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHcmFwaGljc0wKICAgICAgICAgZWxzZSBp
ZiAocmVuZGVyZXIoKS0+aXNDYW52YXMoKSkgewogICAgICAgICAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhUTUxDYW52YXNFbGVtZW50Kj4ocmVuZGVyZXIoKS0+
bm9kZSgpKTsKICAgICAgICAgICAgIGlmIChjYW52YXMtPmlzM0QoKSkgewotICAgICAgICAgICAg
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCogY29udGV4dCA9IHN0YXRpY19jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQzRCo+KGNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAg
ICAgICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihjYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSkKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaGljc0xheWVyLT5z
ZXRDb250ZW50c1RvR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0Qo
KSk7CiAgICAgICAgICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MDYzNCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDA5LTExLTA4
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgM0QgQ2FudmFzIHJlbGF0ZWQgY2xh
c3NlcyB0byB1c2UgV2ViR0wgcHJlZml4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yOTA5NQorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgdXBkYXRlZCBh
bmQgcmFuIGV4aXN0aW5nIFdlYkdMIHRlc3RzLgorCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmds
L2dsLWdldC1jYWxscy5odG1sOgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNl
cy91dGlsczNkLmpzOgorICAgICAgICAobWFrZUJveCk6CisgICAgICAgIChtYWtlU3BoZXJlKToK
KyAgICAgICAgKGRvTG9hZE9iaik6CisgICAgICAgIChGcmFtZXJhdGUucHJvdG90eXBlLnNuYXBz
aG90KToKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90cmlhbmdsZS5odG1sOgorCiAyMDA5
LTExLTA4ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBZGFtIEJhcnRoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
YXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9u
IDUwNjM0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0
cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIsMjcgKzIsMjcgQEAgVmVyaWZpZXMg
dGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIG5ldyBhcgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCiAKLVBBU1MgdGVzdCBDYW52YXNCeXRlQXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCi1Q
QVNTIHRlc3QgQ2FudmFzQnl0ZUFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVz
Ci1QQVNTIHRlc3QgQ2FudmFzQnl0ZUFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygtMTI4LCAtMTI4
LCAxMjcsIDEyNykKLVBBU1MgdGVzdCBDYW52YXNGbG9hdEFycmF5IFNldEFuZEdldFBvczEwVG9O
ZWcxMAotUEFTUyB0ZXN0IENhbnZhc0Zsb2F0QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZTaWdu
ZWRWYWx1ZXMKLVBBU1MgdGVzdCBDYW52YXNGbG9hdEFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygt
NTAwLCAtNTAwLCA1MDAsIDUwMCkKLVBBU1MgdGVzdCBDYW52YXNJbnRBcnJheSBTZXRBbmRHZXRQ
b3MxMFRvTmVnMTAKLVBBU1MgdGVzdCBDYW52YXNJbnRBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlP
ZlNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0IENhbnZhc0ludEFycmF5IEJvdW5kYXJ5Q29uZGl0aW9u
cygtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcsIDIxNDc0ODM2NDcpCi1QQVNT
IHRlc3QgQ2FudmFzU2hvcnRBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKLVBBU1MgdGVzdCBD
YW52YXNTaG9ydEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCi1QQVNTIHRl
c3QgQ2FudmFzU2hvcnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoLTMyNzY4LCAtMzI3NjgsIDMy
NzY3LCAzMjc2NykKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSBTZXRBbmRHZXQx
MFRvMQotUEFTUyB0ZXN0IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IENvbnN0cnVjdFdpdGhBcnJh
eU9mVW5zaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSBCb3Vu
ZGFyeUNvbmRpdGlvbnMoMCwgMCwgMjU1LCAyNTUpCi1QQVNTIHRlc3QgQ2FudmFzVW5zaWduZWRJ
bnRBcnJheSBTZXRBbmRHZXQxMFRvMQotUEFTUyB0ZXN0IENhbnZhc1Vuc2lnbmVkSW50QXJyYXkg
Q29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0IENhbnZhc1Vuc2ln
bmVkSW50QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKDAsIDAsIDQyOTQ5NjcyOTUsIDQyOTQ5Njcy
OTUpCi1QQVNTIHRlc3QgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5IFNldEFuZEdldDEwVG8xCi1Q
QVNTIHRlc3QgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5z
aWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25lZFNob3J0QXJyYXkgQm91bmRhcnlD
b25kaXRpb25zKDAsIDAsIDY1NTM1LCA2NTUzNSkKK1BBU1MgdGVzdCBXZWJHTEJ5dGVBcnJheSBT
ZXRBbmRHZXRQb3MxMFRvTmVnMTAKK1BBU1MgdGVzdCBXZWJHTEJ5dGVBcnJheSBDb25zdHJ1Y3RX
aXRoQXJyYXlPZlNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5IEJvdW5kYXJ5
Q29uZGl0aW9ucygtMTI4LCAtMTI4LCAxMjcsIDEyNykKK1BBU1MgdGVzdCBXZWJHTEZsb2F0QXJy
YXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCitQQVNTIHRlc3QgV2ViR0xGbG9hdEFycmF5IENvbnN0
cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xGbG9hdEFycmF5IEJv
dW5kYXJ5Q29uZGl0aW9ucygtNTAwLCAtNTAwLCA1MDAsIDUwMCkKK1BBU1MgdGVzdCBXZWJHTElu
dEFycmF5IFNldEFuZEdldFBvczEwVG9OZWcxMAorUEFTUyB0ZXN0IFdlYkdMSW50QXJyYXkgQ29u
c3RydWN0V2l0aEFycmF5T2ZTaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBXZWJHTEludEFycmF5IEJv
dW5kYXJ5Q29uZGl0aW9ucygtMjE0NzQ4MzY0OCwgLTIxNDc0ODM2NDgsIDIxNDc0ODM2NDcsIDIx
NDc0ODM2NDcpCitQQVNTIHRlc3QgV2ViR0xTaG9ydEFycmF5IFNldEFuZEdldFBvczEwVG9OZWcx
MAorUEFTUyB0ZXN0IFdlYkdMU2hvcnRBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZh
bHVlcworUEFTUyB0ZXN0IFdlYkdMU2hvcnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoLTMyNzY4
LCAtMzI3NjgsIDMyNzY3LCAzMjc2NykKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
IFNldEFuZEdldDEwVG8xCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBDb25zdHJ1
Y3RXaXRoQXJyYXlPZlVuc2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZEJ5dGVB
cnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoMCwgMCwgMjU1LCAyNTUpCitQQVNTIHRlc3QgV2ViR0xV
bnNpZ25lZEludEFycmF5IFNldEFuZEdldDEwVG8xCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZElu
dEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBXZWJH
TFVuc2lnbmVkSW50QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKDAsIDAsIDQyOTQ5NjcyOTUsIDQy
OTQ5NjcyOTUpCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgU2V0QW5kR2V0MTBU
bzEKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlP
ZlVuc2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgQm91bmRh
cnlDb25kaXRpb25zKDAsIDAsIDY1NTM1LCA2NTUzNSkKIFRlc3QgcGFzc2VkLgogUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCShyZXZpc2lvbiA1MDYzNCkKKysr
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMTQ0LDQzICsxNDQsNDMgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiAg
IC8vIFRoZSAibmFtZSIgYXR0cmlidXRlIGlzIGEgY29uY2Vzc2lvbiB0byBicm93c2VycyB3aGlj
aCBkb24ndAogICAvLyBpbXBsZW1lbnQgdGhlICJuYW1lIiBwcm9wZXJ0eSBvbiBmdW5jdGlvbiBv
YmplY3RzCiAgIHZhciB0ZXN0Q2FzZXMgPQotICAgIFsge25hbWU6ICJDYW52YXNCeXRlQXJyYXki
LAorICAgIFsge25hbWU6ICJXZWJHTEJ5dGVBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IGZhbHNl
LAogICAgICAgIGxvdzogLTEyOCwKICAgICAgICBleHBlY3RlZExvdzogLTEyOCwKICAgICAgICBo
aWdoOiAxMjcsCiAgICAgICAgZXhwZWN0ZWRIaWdoOiAxMjd9LAotICAgICAge25hbWU6ICJDYW52
YXNGbG9hdEFycmF5IiwKKyAgICAgIHtuYW1lOiAiV2ViR0xGbG9hdEFycmF5IiwKICAgICAgICB1
bnNpZ25lZDogZmFsc2UsCiAgICAgICAgbG93OiAtNTAwLAogICAgICAgIGV4cGVjdGVkTG93OiAt
NTAwLAogICAgICAgIGhpZ2g6IDUwMCwKICAgICAgICBleHBlY3RlZEhpZ2g6IDUwMH0sCi0gICAg
ICB7bmFtZTogIkNhbnZhc0ludEFycmF5IiwKKyAgICAgIHtuYW1lOiAiV2ViR0xJbnRBcnJheSIs
CiAgICAgICAgdW5zaWduZWQ6IGZhbHNlLAogICAgICAgIGxvdzogLTIxNDc0ODM2NDgsCiAgICAg
ICAgZXhwZWN0ZWRMb3c6IC0yMTQ3NDgzNjQ4LAogICAgICAgIGhpZ2g6IDIxNDc0ODM2NDcsCiAg
ICAgICAgZXhwZWN0ZWRIaWdoOiAyMTQ3NDgzNjQ3fSwKLSAgICAgIHtuYW1lOiAiQ2FudmFzU2hv
cnRBcnJheSIsCisgICAgICB7bmFtZTogIldlYkdMU2hvcnRBcnJheSIsCiAgICAgICAgdW5zaWdu
ZWQ6IGZhbHNlLAogICAgICAgIGxvdzogLTMyNzY4LAogICAgICAgIGV4cGVjdGVkTG93OiAtMzI3
NjgsCiAgICAgICAgaGlnaDogMzI3NjcsCiAgICAgICAgZXhwZWN0ZWRIaWdoOiAzMjc2N30sCi0g
ICAgICB7bmFtZTogIkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IiwKKyAgICAgIHtuYW1lOiAiV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheSIsCiAgICAgICAgdW5zaWduZWQ6IHRydWUsCiAgICAgICAgbG93
OiAwLAogICAgICAgIGV4cGVjdGVkTG93OiAwLAogICAgICAgIGhpZ2g6IDI1NSwKICAgICAgICBl
eHBlY3RlZEhpZ2g6IDI1NX0sCi0gICAgICB7bmFtZTogIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXki
LAorICAgICAge25hbWU6ICJXZWJHTFVuc2lnbmVkSW50QXJyYXkiLAogICAgICAgIHVuc2lnbmVk
OiB0cnVlLAogICAgICAgIGxvdzogMCwKICAgICAgICBleHBlY3RlZExvdzogMCwKICAgICAgICBo
aWdoOiA0Mjk0OTY3Mjk1LAogICAgICAgIGV4cGVjdGVkSGlnaDogNDI5NDk2NzI5NX0sCi0gICAg
ICB7bmFtZTogIkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSIsCisgICAgICB7bmFtZTogIldlYkdM
VW5zaWduZWRTaG9ydEFycmF5IiwKICAgICAgICB1bnNpZ25lZDogdHJ1ZSwKICAgICAgICBsb3c6
IDAsCiAgICAgICAgZXhwZWN0ZWRMb3c6IDAsCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAkocmV2aXNpb24gNTA2MzQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1nZXQtY2FsbHMuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNyArMjQsNyBAQCBlbHNlIHsKIAogICAgIGRlYnVnKCIiKTsKICAgICBkZWJ1Zygi
Q29udGV4dCBpcyBjb3JyZWN0IHR5cGUiKTsKLSAgICBpZiAoY29udGV4dCBpbnN0YW5jZW9mIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQzRCkKKyAgICBpZiAoY29udGV4dCBpbnN0YW5jZW9mIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCkKICAgICAgIHRlc3RQYXNzZWQoImNvbnRleHQgaXMgY29ycmVjdCB0
eXBlIik7CiAgICAgZWxzZQogICAgICAgdGVzdEZhaWxlZCgiY29udGV4dCBpcyBub3QgY29ycmVj
dCB0eXBlIik7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90cmlhbmdsZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xl
Lmh0bWwJKHJldmlzaW9uIDUwNjM0KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dHJpYW5nbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAg
ICAgCiAgICAgICAgICAgICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CiAg
ICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsK
LSAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxv
YXRBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNf
RFJBVyk7CisgICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IFdl
YkdMRmxvYXRBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5T
VEFUSUNfRFJBVyk7CiAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsK
ICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNl
LCAwLCAwKTsKICAgICAgICAgICAgIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvcmVzb3VyY2VzL3V0aWxzM2QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVzb3VyY2VzL3V0aWxzM2QuanMJKHJldmlzaW9uIDUwNjM0KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3V0aWxzM2QuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTIsNyArMiw3IEBACiAvLyBpbml0V2ViR0wKIC8vCiAvLyBJbml0aWFsaXplIHRo
ZSBDYW52YXMgZWxlbWVudCB3aXRoIHRoZSBwYXNzZWQgbmFtZSBhcyBhIFdlYkdMIG9iamVjdCBh
bmQgcmV0dXJuIHRoZQotLy8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNELiAKKy8vIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC4gCiAvLwogLy8gTG9hZCBzaGFkZXJzIHdpdGggdGhlIHBhc3NlZCBuYW1l
cyBhbmQgY3JlYXRlIGEgcHJvZ3JhbSB3aXRoIHRoZW0uIFJldHVybiB0aGlzIHByb2dyYW0gCiAv
LyBpbiB0aGUgJ3Byb2dyYW0nIHByb3BlcnR5IG9mIHRoZSByZXR1cm5lZCBjb250ZXh0LgpAQCAt
ODAsNyArODAsNyBAQCBmdW5jdGlvbiBpbml0V2ViR0woY2FudmFzTmFtZSwgdnNoYWRlciwgCiAv
LyBsb2FkU2hhZGVyCiAvLwogLy8gJ3NoYWRlcklkJyBpcyB0aGUgaWQgb2YgYSA8c2NyaXB0PiBl
bGVtZW50IGNvbnRhaW5pbmcgdGhlIHNoYWRlciBzb3VyY2Ugc3RyaW5nLgotLy8gTG9hZCB0aGlz
IHNoYWRlciBhbmQgcmV0dXJuIHRoZSBDYW52YXNTaGFkZXIgb2JqZWN0IGNvcnJlc3BvbmRpbmcg
dG8gaXQuCisvLyBMb2FkIHRoaXMgc2hhZGVyIGFuZCByZXR1cm4gdGhlIFdlYkdMU2hhZGVyIG9i
amVjdCBjb3JyZXNwb25kaW5nIHRvIGl0LgogLy8KIGZ1bmN0aW9uIGxvYWRTaGFkZXIoY3R4LCBz
aGFkZXJJZCkKIHsKQEAgLTEzMSwxMCArMTMxLDEwIEBAIGZ1bmN0aW9uIGxvYWRTaGFkZXIoY3R4
LCBzaGFkZXJJZCkKIC8vIENyZWF0ZSBhIGJveCB3aXRoIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB0
ZXhDb29yZHMuIENyZWF0ZSBWQk9zIGZvciBlYWNoIGFzIHdlbGwgYXMgdGhlIGluZGV4IGFycmF5
LgogLy8gUmV0dXJuIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKIC8v
Ci0vLyAgbm9ybWFsT2JqZWN0ICAgICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBub3JtYWxz
Ci0vLyAgdGV4Q29vcmRPYmplY3QgICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciB0ZXhDb29y
ZHMKLS8vICB2ZXJ0ZXhPYmplY3QgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHZlcnRp
Y2VzCi0vLyAgaW5kZXhPYmplY3QgICAgICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBpbmRp
Y2VzCisvLyAgbm9ybWFsT2JqZWN0ICAgICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIG5vcm1h
bHMKKy8vICB0ZXhDb29yZE9iamVjdCAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29v
cmRzCisvLyAgdmVydGV4T2JqZWN0ICAgICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIHZlcnRp
Y2VzCisvLyAgaW5kZXhPYmplY3QgICAgICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIGluZGlj
ZXMKIC8vICBudW1JbmRpY2VzICAgICAgICAgIFRoZSBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGUg
aW5kZXhPYmplY3QKIC8vIAogZnVuY3Rpb24gbWFrZUJveChjdHgpCkBAIC0xNDksNyArMTQ5LDcg
QEAgZnVuY3Rpb24gbWFrZUJveChjdHgpCiAgICAgLy8gIHYyLS0tLS0tdjMKICAgICAvLwogICAg
IC8vIHZlcnRleCBjb29yZHMgYXJyYXkKLSAgICB2YXIgdmVydGljZXMgPSBuZXcgQ2FudmFzRmxv
YXRBcnJheSgKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KAogICAgICAg
ICBbICAxLCAxLCAxLCAgLTEsIDEsIDEsICAtMSwtMSwgMSwgICAxLC0xLCAxLCAgICAvLyB2MC12
MS12Mi12MyBmcm9udAogICAgICAgICAgICAxLCAxLCAxLCAgIDEsLTEsIDEsICAgMSwtMSwtMSwg
ICAxLCAxLC0xLCAgICAvLyB2MC12My12NC12NSByaWdodAogICAgICAgICAgICAxLCAxLCAxLCAg
IDEsIDEsLTEsICAtMSwgMSwtMSwgIC0xLCAxLCAxLCAgICAvLyB2MC12NS12Ni12MSB0b3AKQEAg
LTE1OSw3ICsxNTksNyBAQCBmdW5jdGlvbiBtYWtlQm94KGN0eCkKICAgICApOwogCiAgICAgLy8g
bm9ybWFsIGFycmF5Ci0gICAgdmFyIG5vcm1hbHMgPSBuZXcgQ2FudmFzRmxvYXRBcnJheSgKKyAg
ICB2YXIgbm9ybWFscyA9IG5ldyBXZWJHTEZsb2F0QXJyYXkoCiAgICAgICAgIFsgIDAsIDAsIDEs
ICAgMCwgMCwgMSwgICAwLCAwLCAxLCAgIDAsIDAsIDEsICAgICAvLyB2MC12MS12Mi12MyBmcm9u
dAogICAgICAgICAgICAxLCAwLCAwLCAgIDEsIDAsIDAsICAgMSwgMCwgMCwgICAxLCAwLCAwLCAg
ICAgLy8gdjAtdjMtdjQtdjUgcmlnaHQKICAgICAgICAgICAgMCwgMSwgMCwgICAwLCAxLCAwLCAg
IDAsIDEsIDAsICAgMCwgMSwgMCwgICAgIC8vIHYwLXY1LXY2LXYxIHRvcApAQCAtMTcwLDcgKzE3
MCw3IEBAIGZ1bmN0aW9uIG1ha2VCb3goY3R4KQogCiAKICAgICAvLyB0ZXhDb29yZCBhcnJheQot
ICAgIHZhciB0ZXhDb29yZHMgPSBuZXcgQ2FudmFzRmxvYXRBcnJheSgKKyAgICB2YXIgdGV4Q29v
cmRzID0gbmV3IFdlYkdMRmxvYXRBcnJheSgKICAgICAgICAgWyAgMSwgMSwgICAwLCAxLCAgIDAs
IDAsICAgMSwgMCwgICAgLy8gdjAtdjEtdjItdjMgZnJvbnQKICAgICAgICAgICAgMCwgMSwgICAw
LCAwLCAgIDEsIDAsICAgMSwgMSwgICAgLy8gdjAtdjMtdjQtdjUgcmlnaHQKICAgICAgICAgICAg
MSwgMCwgICAxLCAxLCAgIDAsIDEsICAgMCwgMCwgICAgLy8gdjAtdjUtdjYtdjEgdG9wCkBAIC0x
ODAsNyArMTgwLDcgQEAgZnVuY3Rpb24gbWFrZUJveChjdHgpCiAgICAgICAgKTsKIAogICAgIC8v
IGluZGV4IGFycmF5Ci0gICAgdmFyIGluZGljZXMgPSBuZXcgQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkoCisgICAgdmFyIGluZGljZXMgPSBuZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgKICAgICAg
ICAgWyAgMCwgMSwgMiwgICAwLCAyLCAzLCAgICAvLyBmcm9udAogICAgICAgICAgICA0LCA1LCA2
LCAgIDQsIDYsIDcsICAgIC8vIHJpZ2h0CiAgICAgICAgICAgIDgsIDksMTAsICAgOCwxMCwxMSwg
ICAgLy8gdG9wCkBAIC0yMjIsMTAgKzIyMiwxMCBAQCBmdW5jdGlvbiBtYWtlQm94KGN0eCkKIC8v
IFNwaGVyZSBoYXMgdmVydGljZXMsIG5vcm1hbHMgYW5kIHRleENvb3Jkcy4gQ3JlYXRlIFZCT3Mg
Zm9yIGVhY2ggYXMgd2VsbCBhcyB0aGUgaW5kZXggYXJyYXkuCiAvLyBSZXR1cm4gYW4gb2JqZWN0
IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgogLy8KLS8vICBub3JtYWxPYmplY3QgICAg
ICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIG5vcm1hbHMKLS8vICB0ZXhDb29yZE9iamVjdCAg
ICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHRleENvb3JkcwotLy8gIHZlcnRleE9iamVjdCAg
ICAgICAgQ2FudmFzQnVmZmVyIG9iamVjdCBmb3IgdmVydGljZXMKLS8vICBpbmRleE9iamVjdCAg
ICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIGluZGljZXMKKy8vICBub3JtYWxPYmplY3Qg
ICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3Igbm9ybWFscworLy8gIHRleENvb3JkT2JqZWN0
ICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0IGZvciB0ZXhDb29yZHMKKy8vICB2ZXJ0ZXhPYmplY3Qg
ICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3IgdmVydGljZXMKKy8vICBpbmRleE9iamVjdCAg
ICAgICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3IgaW5kaWNlcwogLy8gIG51bUluZGljZXMgICAg
ICAgICAgVGhlIG51bWJlciBvZiBpbmRpY2VzIGluIHRoZSBpbmRleE9iamVjdAogLy8gCiBmdW5j
dGlvbiBtYWtlU3BoZXJlKGN0eCwgcmFkaXVzLCBsYXRzLCBsb25ncykKQEAgLTI4MCwyMCArMjgw
LDIwIEBAIGZ1bmN0aW9uIG1ha2VTcGhlcmUoY3R4LCByYWRpdXMsIGxhdHMsIGwKICAgICAKICAg
ICByZXR2YWwubm9ybWFsT2JqZWN0ID0gY3R4LmNyZWF0ZUJ1ZmZlcigpOwogICAgIGN0eC5iaW5k
QnVmZmVyKGN0eC5BUlJBWV9CVUZGRVIsIHJldHZhbC5ub3JtYWxPYmplY3QpOwotICAgIGN0eC5i
dWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNGbG9hdEFycmF5KG5vcm1hbERh
dGEpLCBjdHguU1RBVElDX0RSQVcpOworICAgIGN0eC5idWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZG
RVIsIG5ldyBXZWJHTEZsb2F0QXJyYXkobm9ybWFsRGF0YSksIGN0eC5TVEFUSUNfRFJBVyk7CiAK
ICAgICByZXR2YWwudGV4Q29vcmRPYmplY3QgPSBjdHguY3JlYXRlQnVmZmVyKCk7CiAgICAgY3R4
LmJpbmRCdWZmZXIoY3R4LkFSUkFZX0JVRkZFUiwgcmV0dmFsLnRleENvb3JkT2JqZWN0KTsKLSAg
ICBjdHguYnVmZmVyRGF0YShjdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheSh0
ZXhDb29yZERhdGEpLCBjdHguU1RBVElDX0RSQVcpOworICAgIGN0eC5idWZmZXJEYXRhKGN0eC5B
UlJBWV9CVUZGRVIsIG5ldyBXZWJHTEZsb2F0QXJyYXkodGV4Q29vcmREYXRhKSwgY3R4LlNUQVRJ
Q19EUkFXKTsKIAogICAgIHJldHZhbC52ZXJ0ZXhPYmplY3QgPSBjdHguY3JlYXRlQnVmZmVyKCk7
CiAgICAgY3R4LmJpbmRCdWZmZXIoY3R4LkFSUkFZX0JVRkZFUiwgcmV0dmFsLnZlcnRleE9iamVj
dCk7Ci0gICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwgbmV3IENhbnZhc0Zsb2F0
QXJyYXkoZ2VvbWV0cnlEYXRhKSwgY3R4LlNUQVRJQ19EUkFXKTsKKyAgICBjdHguYnVmZmVyRGF0
YShjdHguQVJSQVlfQlVGRkVSLCBuZXcgV2ViR0xGbG9hdEFycmF5KGdlb21ldHJ5RGF0YSksIGN0
eC5TVEFUSUNfRFJBVyk7CiAgICAgCiAgICAgcmV0dmFsLm51bUluZGljZXMgPSBpbmRleERhdGEu
bGVuZ3RoOwogICAgIHJldHZhbC5pbmRleE9iamVjdCA9IGN0eC5jcmVhdGVCdWZmZXIoKTsKICAg
ICBjdHguYmluZEJ1ZmZlcihjdHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIHJldHZhbC5pbmRleE9i
amVjdCk7Ci0gICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBuZXcg
Q2FudmFzVW5zaWduZWRTaG9ydEFycmF5KGluZGV4RGF0YSksIGN0eC5TVFJFQU1fRFJBVyk7Cisg
ICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBuZXcgV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkoaW5kZXhEYXRhKSwgY3R4LlNUUkVBTV9EUkFXKTsKICAgICAKICAgICBy
ZXR1cm4gcmV0dmFsOwogfQpAQCAtMzA1LDEwICszMDUsMTAgQEAgZnVuY3Rpb24gbWFrZVNwaGVy
ZShjdHgsIHJhZGl1cywgbGF0cywgbAogLy8gV2hlbiB0aGUgb2JqZWN0IGxvYWQgaXMgY29tcGxl
dGUsIHRoZSAnbG9hZGVkJyBwcm9wZXJ0eSBiZWNvbWVzIHRydWUgYW5kIHRoZSBmb2xsb3dpbmcg
CiAvLyBwcm9wZXJ0aWVzIGFyZSBzZXQ6CiAvLwotLy8gIG5vcm1hbE9iamVjdCAgICAgICAgQ2Fu
dmFzQnVmZmVyIG9iamVjdCBmb3Igbm9ybWFscwotLy8gIHRleENvb3JkT2JqZWN0ICAgICAgQ2Fu
dmFzQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29vcmRzCi0vLyAgdmVydGV4T2JqZWN0ICAgICAgICBD
YW52YXNCdWZmZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcwotLy8gIGluZGV4T2JqZWN0ICAgICAgICAg
Q2FudmFzQnVmZmVyIG9iamVjdCBmb3IgaW5kaWNlcworLy8gIG5vcm1hbE9iamVjdCAgICAgICAg
V2ViR0xCdWZmZXIgb2JqZWN0IGZvciBub3JtYWxzCisvLyAgdGV4Q29vcmRPYmplY3QgICAgICBX
ZWJHTEJ1ZmZlciBvYmplY3QgZm9yIHRleENvb3JkcworLy8gIHZlcnRleE9iamVjdCAgICAgICAg
V2ViR0xCdWZmZXIgb2JqZWN0IGZvciB2ZXJ0aWNlcworLy8gIGluZGV4T2JqZWN0ICAgICAgICAg
V2ViR0xCdWZmZXIgb2JqZWN0IGZvciBpbmRpY2VzCiAvLyAgbnVtSW5kaWNlcyAgICAgICAgICBU
aGUgbnVtYmVyIG9mIGluZGljZXMgaW4gdGhlIGluZGV4T2JqZWN0CiAvLyAgCiBmdW5jdGlvbiBs
b2FkT2JqKGN0eCwgdXJsKQpAQCAtNDQ2LDIwICs0NDYsMjAgQEAgZnVuY3Rpb24gZG9Mb2FkT2Jq
KG9iaiwgdGV4dCkKICAgICAvLyBzZXQgdGhlIFZCT3MKICAgICBvYmoubm9ybWFsT2JqZWN0ID0g
b2JqLmN0eC5jcmVhdGVCdWZmZXIoKTsKICAgICBvYmouY3R4LmJpbmRCdWZmZXIob2JqLmN0eC5B
UlJBWV9CVUZGRVIsIG9iai5ub3JtYWxPYmplY3QpOwotICAgIG9iai5jdHguYnVmZmVyRGF0YShv
YmouY3R4LkFSUkFZX0JVRkZFUiwgbmV3IENhbnZhc0Zsb2F0QXJyYXkobm9ybWFsQXJyYXkpLCBv
YmouY3R4LlNUQVRJQ19EUkFXKTsKKyAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJB
WV9CVUZGRVIsIG5ldyBXZWJHTEZsb2F0QXJyYXkobm9ybWFsQXJyYXkpLCBvYmouY3R4LlNUQVRJ
Q19EUkFXKTsKIAogICAgIG9iai50ZXhDb29yZE9iamVjdCA9IG9iai5jdHguY3JlYXRlQnVmZmVy
KCk7CiAgICAgb2JqLmN0eC5iaW5kQnVmZmVyKG9iai5jdHguQVJSQVlfQlVGRkVSLCBvYmoudGV4
Q29vcmRPYmplY3QpOwotICAgIG9iai5jdHguYnVmZmVyRGF0YShvYmouY3R4LkFSUkFZX0JVRkZF
UiwgbmV3IENhbnZhc0Zsb2F0QXJyYXkodGV4dHVyZUFycmF5KSwgb2JqLmN0eC5TVEFUSUNfRFJB
Vyk7CisgICAgb2JqLmN0eC5idWZmZXJEYXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgV2Vi
R0xGbG9hdEFycmF5KHRleHR1cmVBcnJheSksIG9iai5jdHguU1RBVElDX0RSQVcpOwogCiAgICAg
b2JqLnZlcnRleE9iamVjdCA9IG9iai5jdHguY3JlYXRlQnVmZmVyKCk7CiAgICAgb2JqLmN0eC5i
aW5kQnVmZmVyKG9iai5jdHguQVJSQVlfQlVGRkVSLCBvYmoudmVydGV4T2JqZWN0KTsKLSAgICBv
YmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNGbG9hdEFy
cmF5KHZlcnRleEFycmF5KSwgb2JqLmN0eC5TVEFUSUNfRFJBVyk7CisgICAgb2JqLmN0eC5idWZm
ZXJEYXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgV2ViR0xGbG9hdEFycmF5KHZlcnRleEFy
cmF5KSwgb2JqLmN0eC5TVEFUSUNfRFJBVyk7CiAgICAgCiAgICAgb2JqLm51bUluZGljZXMgPSBp
bmRleEFycmF5Lmxlbmd0aDsKICAgICBvYmouaW5kZXhPYmplY3QgPSBvYmouY3R4LmNyZWF0ZUJ1
ZmZlcigpOwogICAgIG9iai5jdHguYmluZEJ1ZmZlcihvYmouY3R4LkVMRU1FTlRfQVJSQVlfQlVG
RkVSLCBvYmouaW5kZXhPYmplY3QpOwotICAgIG9iai5jdHguYnVmZmVyRGF0YShvYmouY3R4LkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5KGluZGV4QXJy
YXkpLCBvYmouY3R4LlNUUkVBTV9EUkFXKTsKKyAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0
eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgbmV3IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5KGluZGV4
QXJyYXkpLCBvYmouY3R4LlNUUkVBTV9EUkFXKTsKICAgICAKICAgICBvYmoubG9hZGVkID0gdHJ1
ZTsKIH0KQEAgLTQ2Nyw3ICs0NjcsNyBAQCBmdW5jdGlvbiBkb0xvYWRPYmoob2JqLCB0ZXh0KQog
Ly8KIC8vIGxvYWRJbWFnZVRleHR1cmUKIC8vCi0vLyBMb2FkIHRoZSBpbWFnZSBhdCB0aGUgcGFz
c2VkIHVybCwgcGxhY2UgaXQgaW4gYSBuZXcgQ2FudmFzVGV4dHVyZSBvYmplY3QgYW5kIHJldHVy
biB0aGUgQ2FudmFzVGV4dHVyZS4KKy8vIExvYWQgdGhlIGltYWdlIGF0IHRoZSBwYXNzZWQgdXJs
LCBwbGFjZSBpdCBpbiBhIG5ldyBXZWJHTFRleHR1cmUgb2JqZWN0IGFuZCByZXR1cm4gdGhlIFdl
YkdMVGV4dHVyZS4KIC8vCiBmdW5jdGlvbiBsb2FkSW1hZ2VUZXh0dXJlKGN0eCwgdXJsKQogewpA
QCAtNTM2LDQgKzUzNiwzIEBAIEZyYW1lcmF0ZS5wcm90b3R5cGUuc25hcHNob3QgPSBmdW5jdGlv
bigKICAgICAgICAgdGhpcy5yZW5kZXJUaW1lID0gbmV3VGltZTsKICAgICB9CiB9Ci0KCg==
</data>
<flag name="review"
          id="24290"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42852</attachid>
            <date>2009-11-10 01:08:59 -0800</date>
            <delta_ts>2009-11-10 01:12:33 -0800</delta_ts>
            <desc>Automatic rename patch</desc>
            <filename>webgl-rename.patch</filename>
            <type>text/plain</type>
            <size>38052</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5OWIxNjk5Li41NjU4N2M2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMDktMTEt
MTAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgM0QgQ2FudmFzIHJlbGF0ZWQgY2xh
c3NlcyB0byB1c2UgV2ViR0wgcHJlZml4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yOTA5NQorCisgICAgICAgIFVwZGF0ZSB0ZXN0cyB0byB1c2UgbmV3
IFdlYkdMIHByZWZpeGVkIG5hbWVzCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJh
eS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9h
cnJheS11bml0LXRlc3RzLmh0bWw6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0
LWNhbGxzLmh0bWw6CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3V0aWxz
M2QuanM6CisgICAgICAgIChtYWtlQm94KToKKyAgICAgICAgKG1ha2VTcGhlcmUpOgorICAgICAg
ICAoZG9Mb2FkT2JqKToKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90cmlhbmdsZS5odG1s
OgorICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy5odG1sOgorICAg
ICAgICAqIGZhc3QvZG9tL3NjcmlwdC10ZXN0cy9jb25zdHJ1Y3RlZC1vYmplY3RzLXByb3RvdHlw
ZXMuanM6CisgICAgICAgIChjb25zdHJ1Y3RvclByb3BlcnRpZXNPbldpbmRvdyk6CisgICAgICAg
ICogZmFzdC9kb20vc2NyaXB0LXRlc3RzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLmpzOgorICAg
ICAgICAoY29uc3RydWN0b3JOYW1lc0ZvcldpbmRvdyk6CisgICAgICAgICogZmFzdC9kb20vc2Ny
aXB0LXRlc3RzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS5qczoKKyAgICAgICAgKiBmYXN0L2pzL3Nj
cmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3JzLmpzOgorCiAyMDA5LTExLTAzICBTaGluaWNo
aXJvIEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9h
cnJheS11bml0LXRlc3RzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CmluZGV4IGJiYjkxOTIuLmMyMTAwZDcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVz
dHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5
LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CkBAIC0yLDI3ICsyLDI3IEBAIFZlcmlmaWVzIHRoZSBm
dW5jdGlvbmFsaXR5IG9mIHRoZSBuZXcgYXJyYXktbGlrZSBvYmplY3RzIGluIHRoZSBXZWJHTCBz
cGVjCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIAotUEFTUyB0ZXN0IENhbnZhc0J5dGVB
cnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKLVBBU1MgdGVzdCBDYW52YXNCeXRlQXJyYXkgQ29u
c3RydWN0V2l0aEFycmF5T2ZTaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBDYW52YXNCeXRlQXJyYXkg
Qm91bmRhcnlDb25kaXRpb25zKC0xMjgsIC0xMjgsIDEyNywgMTI3KQotUEFTUyB0ZXN0IENhbnZh
c0Zsb2F0QXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCi1QQVNTIHRlc3QgQ2FudmFzRmxvYXRB
cnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0IENhbnZhc0Zs
b2F0QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC01MDAsIC01MDAsIDUwMCwgNTAwKQotUEFTUyB0
ZXN0IENhbnZhc0ludEFycmF5IFNldEFuZEdldFBvczEwVG9OZWcxMAotUEFTUyB0ZXN0IENhbnZh
c0ludEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCi1QQVNTIHRlc3QgQ2Fu
dmFzSW50QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC0yMTQ3NDgzNjQ4LCAtMjE0NzQ4MzY0OCwg
MjE0NzQ4MzY0NywgMjE0NzQ4MzY0NykKLVBBU1MgdGVzdCBDYW52YXNTaG9ydEFycmF5IFNldEFu
ZEdldFBvczEwVG9OZWcxMAotUEFTUyB0ZXN0IENhbnZhc1Nob3J0QXJyYXkgQ29uc3RydWN0V2l0
aEFycmF5T2ZTaWduZWRWYWx1ZXMKLVBBU1MgdGVzdCBDYW52YXNTaG9ydEFycmF5IEJvdW5kYXJ5
Q29uZGl0aW9ucygtMzI3NjgsIC0zMjc2OCwgMzI3NjcsIDMyNzY3KQotUEFTUyB0ZXN0IENhbnZh
c1Vuc2lnbmVkQnl0ZUFycmF5IFNldEFuZEdldDEwVG8xCi1QQVNTIHRlc3QgQ2FudmFzVW5zaWdu
ZWRCeXRlQXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0
IENhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygwLCAwLCAyNTUsIDI1
NSkKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25lZEludEFycmF5IFNldEFuZEdldDEwVG8xCi1QQVNT
IHRlc3QgQ2FudmFzVW5zaWduZWRJbnRBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlVuc2lnbmVk
VmFsdWVzCi1QQVNTIHRlc3QgQ2FudmFzVW5zaWduZWRJbnRBcnJheSBCb3VuZGFyeUNvbmRpdGlv
bnMoMCwgMCwgNDI5NDk2NzI5NSwgNDI5NDk2NzI5NSkKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25l
ZFNob3J0QXJyYXkgU2V0QW5kR2V0MTBUbzEKLVBBU1MgdGVzdCBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZVbnNpZ25lZFZhbHVlcwotUEFTUyB0ZXN0IENhbnZh
c1Vuc2lnbmVkU2hvcnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoMCwgMCwgNjU1MzUsIDY1NTM1
KQorUEFTUyB0ZXN0IFdlYkdMQnl0ZUFycmF5IFNldEFuZEdldFBvczEwVG9OZWcxMAorUEFTUyB0
ZXN0IFdlYkdMQnl0ZUFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNT
IHRlc3QgV2ViR0xCeXRlQXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC0xMjgsIC0xMjgsIDEyNywg
MTI3KQorUEFTUyB0ZXN0IFdlYkdMRmxvYXRBcnJheSBTZXRBbmRHZXRQb3MxMFRvTmVnMTAKK1BB
U1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZTaWduZWRWYWx1ZXMK
K1BBU1MgdGVzdCBXZWJHTEZsb2F0QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC01MDAsIC01MDAs
IDUwMCwgNTAwKQorUEFTUyB0ZXN0IFdlYkdMSW50QXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEw
CitQQVNTIHRlc3QgV2ViR0xJbnRBcnJheSBDb25zdHJ1Y3RXaXRoQXJyYXlPZlNpZ25lZFZhbHVl
cworUEFTUyB0ZXN0IFdlYkdMSW50QXJyYXkgQm91bmRhcnlDb25kaXRpb25zKC0yMTQ3NDgzNjQ4
LCAtMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0NywgMjE0NzQ4MzY0NykKK1BBU1MgdGVzdCBXZWJHTFNo
b3J0QXJyYXkgU2V0QW5kR2V0UG9zMTBUb05lZzEwCitQQVNTIHRlc3QgV2ViR0xTaG9ydEFycmF5
IENvbnN0cnVjdFdpdGhBcnJheU9mU2lnbmVkVmFsdWVzCitQQVNTIHRlc3QgV2ViR0xTaG9ydEFy
cmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygtMzI3NjgsIC0zMjc2OCwgMzI3NjcsIDMyNzY3KQorUEFT
UyB0ZXN0IFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgU2V0QW5kR2V0MTBUbzEKK1BBU1MgdGVzdCBX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5zaWduZWRWYWx1ZXMK
K1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IEJvdW5kYXJ5Q29uZGl0aW9ucygwLCAw
LCAyNTUsIDI1NSkKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkSW50QXJyYXkgU2V0QW5kR2V0MTBU
bzEKK1BBU1MgdGVzdCBXZWJHTFVuc2lnbmVkSW50QXJyYXkgQ29uc3RydWN0V2l0aEFycmF5T2ZV
bnNpZ25lZFZhbHVlcworUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRJbnRBcnJheSBCb3VuZGFyeUNv
bmRpdGlvbnMoMCwgMCwgNDI5NDk2NzI5NSwgNDI5NDk2NzI5NSkKK1BBU1MgdGVzdCBXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheSBTZXRBbmRHZXQxMFRvMQorUEFTUyB0ZXN0IFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5IENvbnN0cnVjdFdpdGhBcnJheU9mVW5zaWduZWRWYWx1ZXMKK1BBU1MgdGVzdCBX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBCb3VuZGFyeUNvbmRpdGlvbnMoMCwgMCwgNjU1MzUsIDY1
NTM1KQogVGVzdCBwYXNzZWQuCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRt
bAppbmRleCA1MGFmMDI1Li4xZDAyOGQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCkBAIC0xNDQsNDMgKzE0NCw0MyBAQCBm
dW5jdGlvbiBydW5UZXN0cygpIHsKICAgLy8gVGhlICJuYW1lIiBhdHRyaWJ1dGUgaXMgYSBjb25j
ZXNzaW9uIHRvIGJyb3dzZXJzIHdoaWNoIGRvbid0CiAgIC8vIGltcGxlbWVudCB0aGUgIm5hbWUi
IHByb3BlcnR5IG9uIGZ1bmN0aW9uIG9iamVjdHMKICAgdmFyIHRlc3RDYXNlcyA9Ci0gICAgWyB7
bmFtZTogIkNhbnZhc0J5dGVBcnJheSIsCisgICAgWyB7bmFtZTogIldlYkdMQnl0ZUFycmF5IiwK
ICAgICAgICB1bnNpZ25lZDogZmFsc2UsCiAgICAgICAgbG93OiAtMTI4LAogICAgICAgIGV4cGVj
dGVkTG93OiAtMTI4LAogICAgICAgIGhpZ2g6IDEyNywKICAgICAgICBleHBlY3RlZEhpZ2g6IDEy
N30sCi0gICAgICB7bmFtZTogIkNhbnZhc0Zsb2F0QXJyYXkiLAorICAgICAge25hbWU6ICJXZWJH
TEZsb2F0QXJyYXkiLAogICAgICAgIHVuc2lnbmVkOiBmYWxzZSwKICAgICAgICBsb3c6IC01MDAs
CiAgICAgICAgZXhwZWN0ZWRMb3c6IC01MDAsCiAgICAgICAgaGlnaDogNTAwLAogICAgICAgIGV4
cGVjdGVkSGlnaDogNTAwfSwKLSAgICAgIHtuYW1lOiAiQ2FudmFzSW50QXJyYXkiLAorICAgICAg
e25hbWU6ICJXZWJHTEludEFycmF5IiwKICAgICAgICB1bnNpZ25lZDogZmFsc2UsCiAgICAgICAg
bG93OiAtMjE0NzQ4MzY0OCwKICAgICAgICBleHBlY3RlZExvdzogLTIxNDc0ODM2NDgsCiAgICAg
ICAgaGlnaDogMjE0NzQ4MzY0NywKICAgICAgICBleHBlY3RlZEhpZ2g6IDIxNDc0ODM2NDd9LAot
ICAgICAge25hbWU6ICJDYW52YXNTaG9ydEFycmF5IiwKKyAgICAgIHtuYW1lOiAiV2ViR0xTaG9y
dEFycmF5IiwKICAgICAgICB1bnNpZ25lZDogZmFsc2UsCiAgICAgICAgbG93OiAtMzI3NjgsCiAg
ICAgICAgZXhwZWN0ZWRMb3c6IC0zMjc2OCwKICAgICAgICBoaWdoOiAzMjc2NywKICAgICAgICBl
eHBlY3RlZEhpZ2g6IDMyNzY3fSwKLSAgICAgIHtuYW1lOiAiQ2FudmFzVW5zaWduZWRCeXRlQXJy
YXkiLAorICAgICAge25hbWU6ICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IiwKICAgICAgICB1bnNp
Z25lZDogdHJ1ZSwKICAgICAgICBsb3c6IDAsCiAgICAgICAgZXhwZWN0ZWRMb3c6IDAsCiAgICAg
ICAgaGlnaDogMjU1LAogICAgICAgIGV4cGVjdGVkSGlnaDogMjU1fSwKLSAgICAgIHtuYW1lOiAi
Q2FudmFzVW5zaWduZWRJbnRBcnJheSIsCisgICAgICB7bmFtZTogIldlYkdMVW5zaWduZWRJbnRB
cnJheSIsCiAgICAgICAgdW5zaWduZWQ6IHRydWUsCiAgICAgICAgbG93OiAwLAogICAgICAgIGV4
cGVjdGVkTG93OiAwLAogICAgICAgIGhpZ2g6IDQyOTQ5NjcyOTUsCiAgICAgICAgZXhwZWN0ZWRI
aWdoOiA0Mjk0OTY3Mjk1fSwKLSAgICAgIHtuYW1lOiAiQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
IiwKKyAgICAgIHtuYW1lOiAiV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkiLAogICAgICAgIHVuc2ln
bmVkOiB0cnVlLAogICAgICAgIGxvdzogMCwKICAgICAgICBleHBlY3RlZExvdzogMCwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLWdldC1jYWxscy5odG1sIGIv
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtZ2V0LWNhbGxzLmh0bWwKaW5kZXggN2Qy
YjhiMy4uYzU0OWMzZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtZ2V0LWNhbGxzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
Z2V0LWNhbGxzLmh0bWwKQEAgLTI0LDcgKzI0LDcgQEAgZWxzZSB7CiAKICAgICBkZWJ1ZygiIik7
CiAgICAgZGVidWcoIkNvbnRleHQgaXMgY29ycmVjdCB0eXBlIik7Ci0gICAgaWYgKGNvbnRleHQg
aW5zdGFuY2VvZiBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QpCisgICAgaWYgKGNvbnRleHQgaW5z
dGFuY2VvZiBXZWJHTFJlbmRlcmluZ0NvbnRleHQpCiAgICAgICB0ZXN0UGFzc2VkKCJjb250ZXh0
IGlzIGNvcnJlY3QgdHlwZSIpOwogICAgIGVsc2UKICAgICAgIHRlc3RGYWlsZWQoImNvbnRleHQg
aXMgbm90IGNvcnJlY3QgdHlwZSIpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvcmVzb3VyY2VzL3V0aWxzM2QuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwppbmRleCBlOGY0M2E4Li5kZTQyMTc0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZXNvdXJjZXMvdXRpbHMzZC5qcwpA
QCAtMiw3ICsyLDcgQEAKIC8vIGluaXRXZWJHTAogLy8KIC8vIEluaXRpYWxpemUgdGhlIENhbnZh
cyBlbGVtZW50IHdpdGggdGhlIHBhc3NlZCBuYW1lIGFzIGEgV2ViR0wgb2JqZWN0IGFuZCByZXR1
cm4gdGhlCi0vLyBDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QuIAorLy8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0LiAKIC8vCiAvLyBMb2FkIHNoYWRlcnMgd2l0aCB0aGUgcGFzc2VkIG5hbWVzIGFuZCBj
cmVhdGUgYSBwcm9ncmFtIHdpdGggdGhlbS4gUmV0dXJuIHRoaXMgcHJvZ3JhbSAKIC8vIGluIHRo
ZSAncHJvZ3JhbScgcHJvcGVydHkgb2YgdGhlIHJldHVybmVkIGNvbnRleHQuCkBAIC04MCw3ICs4
MCw3IEBAIGZ1bmN0aW9uIGluaXRXZWJHTChjYW52YXNOYW1lLCB2c2hhZGVyLCBmc2hhZGVyLCBh
dHRyaWJzLCBjbGVhckNvbG9yLCBjbGVhckRlcHRoCiAvLyBsb2FkU2hhZGVyCiAvLwogLy8gJ3No
YWRlcklkJyBpcyB0aGUgaWQgb2YgYSA8c2NyaXB0PiBlbGVtZW50IGNvbnRhaW5pbmcgdGhlIHNo
YWRlciBzb3VyY2Ugc3RyaW5nLgotLy8gTG9hZCB0aGlzIHNoYWRlciBhbmQgcmV0dXJuIHRoZSBD
YW52YXNTaGFkZXIgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gaXQuCisvLyBMb2FkIHRoaXMgc2hh
ZGVyIGFuZCByZXR1cm4gdGhlIFdlYkdMU2hhZGVyIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGl0
LgogLy8KIGZ1bmN0aW9uIGxvYWRTaGFkZXIoY3R4LCBzaGFkZXJJZCkKIHsKQEAgLTEzMSwxMCAr
MTMxLDEwIEBAIGZ1bmN0aW9uIGxvYWRTaGFkZXIoY3R4LCBzaGFkZXJJZCkKIC8vIENyZWF0ZSBh
IGJveCB3aXRoIHZlcnRpY2VzLCBub3JtYWxzIGFuZCB0ZXhDb29yZHMuIENyZWF0ZSBWQk9zIGZv
ciBlYWNoIGFzIHdlbGwgYXMgdGhlIGluZGV4IGFycmF5LgogLy8gUmV0dXJuIGFuIG9iamVjdCB3
aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKIC8vCi0vLyAgbm9ybWFsT2JqZWN0ICAgICAg
ICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBub3JtYWxzCi0vLyAgdGV4Q29vcmRPYmplY3QgICAg
ICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciB0ZXhDb29yZHMKLS8vICB2ZXJ0ZXhPYmplY3QgICAg
ICAgIENhbnZhc0J1ZmZlciBvYmplY3QgZm9yIHZlcnRpY2VzCi0vLyAgaW5kZXhPYmplY3QgICAg
ICAgICBDYW52YXNCdWZmZXIgb2JqZWN0IGZvciBpbmRpY2VzCisvLyAgbm9ybWFsT2JqZWN0ICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIG5vcm1hbHMKKy8vICB0ZXhDb29yZE9iamVjdCAg
ICAgIFdlYkdMQnVmZmVyIG9iamVjdCBmb3IgdGV4Q29vcmRzCisvLyAgdmVydGV4T2JqZWN0ICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIHZlcnRpY2VzCisvLyAgaW5kZXhPYmplY3QgICAg
ICAgICBXZWJHTEJ1ZmZlciBvYmplY3QgZm9yIGluZGljZXMKIC8vICBudW1JbmRpY2VzICAgICAg
ICAgIFRoZSBudW1iZXIgb2YgaW5kaWNlcyBpbiB0aGUgaW5kZXhPYmplY3QKIC8vIAogZnVuY3Rp
b24gbWFrZUJveChjdHgpCkBAIC0xNDksNyArMTQ5LDcgQEAgZnVuY3Rpb24gbWFrZUJveChjdHgp
CiAgICAgLy8gIHYyLS0tLS0tdjMKICAgICAvLwogICAgIC8vIHZlcnRleCBjb29yZHMgYXJyYXkK
LSAgICB2YXIgdmVydGljZXMgPSBuZXcgQ2FudmFzRmxvYXRBcnJheSgKKyAgICB2YXIgdmVydGlj
ZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KAogICAgICAgICBbICAxLCAxLCAxLCAgLTEsIDEsIDEs
ICAtMSwtMSwgMSwgICAxLC0xLCAxLCAgICAvLyB2MC12MS12Mi12MyBmcm9udAogICAgICAgICAg
ICAxLCAxLCAxLCAgIDEsLTEsIDEsICAgMSwtMSwtMSwgICAxLCAxLC0xLCAgICAvLyB2MC12My12
NC12NSByaWdodAogICAgICAgICAgICAxLCAxLCAxLCAgIDEsIDEsLTEsICAtMSwgMSwtMSwgIC0x
LCAxLCAxLCAgICAvLyB2MC12NS12Ni12MSB0b3AKQEAgLTE1OSw3ICsxNTksNyBAQCBmdW5jdGlv
biBtYWtlQm94KGN0eCkKICAgICApOwogCiAgICAgLy8gbm9ybWFsIGFycmF5Ci0gICAgdmFyIG5v
cm1hbHMgPSBuZXcgQ2FudmFzRmxvYXRBcnJheSgKKyAgICB2YXIgbm9ybWFscyA9IG5ldyBXZWJH
TEZsb2F0QXJyYXkoCiAgICAgICAgIFsgIDAsIDAsIDEsICAgMCwgMCwgMSwgICAwLCAwLCAxLCAg
IDAsIDAsIDEsICAgICAvLyB2MC12MS12Mi12MyBmcm9udAogICAgICAgICAgICAxLCAwLCAwLCAg
IDEsIDAsIDAsICAgMSwgMCwgMCwgICAxLCAwLCAwLCAgICAgLy8gdjAtdjMtdjQtdjUgcmlnaHQK
ICAgICAgICAgICAgMCwgMSwgMCwgICAwLCAxLCAwLCAgIDAsIDEsIDAsICAgMCwgMSwgMCwgICAg
IC8vIHYwLXY1LXY2LXYxIHRvcApAQCAtMTcwLDcgKzE3MCw3IEBAIGZ1bmN0aW9uIG1ha2VCb3go
Y3R4KQogCiAKICAgICAvLyB0ZXhDb29yZCBhcnJheQotICAgIHZhciB0ZXhDb29yZHMgPSBuZXcg
Q2FudmFzRmxvYXRBcnJheSgKKyAgICB2YXIgdGV4Q29vcmRzID0gbmV3IFdlYkdMRmxvYXRBcnJh
eSgKICAgICAgICAgWyAgMSwgMSwgICAwLCAxLCAgIDAsIDAsICAgMSwgMCwgICAgLy8gdjAtdjEt
djItdjMgZnJvbnQKICAgICAgICAgICAgMCwgMSwgICAwLCAwLCAgIDEsIDAsICAgMSwgMSwgICAg
Ly8gdjAtdjMtdjQtdjUgcmlnaHQKICAgICAgICAgICAgMSwgMCwgICAxLCAxLCAgIDAsIDEsICAg
MCwgMCwgICAgLy8gdjAtdjUtdjYtdjEgdG9wCkBAIC0xODAsNyArMTgwLDcgQEAgZnVuY3Rpb24g
bWFrZUJveChjdHgpCiAgICAgICAgKTsKIAogICAgIC8vIGluZGV4IGFycmF5Ci0gICAgdmFyIGlu
ZGljZXMgPSBuZXcgQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkoCisgICAgdmFyIGluZGljZXMgPSBu
ZXcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgKICAgICAgICAgWyAgMCwgMSwgMiwgICAwLCAyLCAz
LCAgICAvLyBmcm9udAogICAgICAgICAgICA0LCA1LCA2LCAgIDQsIDYsIDcsICAgIC8vIHJpZ2h0
CiAgICAgICAgICAgIDgsIDksMTAsICAgOCwxMCwxMSwgICAgLy8gdG9wCkBAIC0yMjIsMTAgKzIy
MiwxMCBAQCBmdW5jdGlvbiBtYWtlQm94KGN0eCkKIC8vIFNwaGVyZSBoYXMgdmVydGljZXMsIG5v
cm1hbHMgYW5kIHRleENvb3Jkcy4gQ3JlYXRlIFZCT3MgZm9yIGVhY2ggYXMgd2VsbCBhcyB0aGUg
aW5kZXggYXJyYXkuCiAvLyBSZXR1cm4gYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9w
ZXJ0aWVzOgogLy8KLS8vICBub3JtYWxPYmplY3QgICAgICAgIENhbnZhc0J1ZmZlciBvYmplY3Qg
Zm9yIG5vcm1hbHMKLS8vICB0ZXhDb29yZE9iamVjdCAgICAgIENhbnZhc0J1ZmZlciBvYmplY3Qg
Zm9yIHRleENvb3JkcwotLy8gIHZlcnRleE9iamVjdCAgICAgICAgQ2FudmFzQnVmZmVyIG9iamVj
dCBmb3IgdmVydGljZXMKLS8vICBpbmRleE9iamVjdCAgICAgICAgIENhbnZhc0J1ZmZlciBvYmpl
Y3QgZm9yIGluZGljZXMKKy8vICBub3JtYWxPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9iamVj
dCBmb3Igbm9ybWFscworLy8gIHRleENvb3JkT2JqZWN0ICAgICAgV2ViR0xCdWZmZXIgb2JqZWN0
IGZvciB0ZXhDb29yZHMKKy8vICB2ZXJ0ZXhPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9iamVj
dCBmb3IgdmVydGljZXMKKy8vICBpbmRleE9iamVjdCAgICAgICAgIFdlYkdMQnVmZmVyIG9iamVj
dCBmb3IgaW5kaWNlcwogLy8gIG51bUluZGljZXMgICAgICAgICAgVGhlIG51bWJlciBvZiBpbmRp
Y2VzIGluIHRoZSBpbmRleE9iamVjdAogLy8gCiBmdW5jdGlvbiBtYWtlU3BoZXJlKGN0eCwgcmFk
aXVzLCBsYXRzLCBsb25ncykKQEAgLTI4MCwyMCArMjgwLDIwIEBAIGZ1bmN0aW9uIG1ha2VTcGhl
cmUoY3R4LCByYWRpdXMsIGxhdHMsIGxvbmdzKQogICAgIAogICAgIHJldHZhbC5ub3JtYWxPYmpl
Y3QgPSBjdHguY3JlYXRlQnVmZmVyKCk7CiAgICAgY3R4LmJpbmRCdWZmZXIoY3R4LkFSUkFZX0JV
RkZFUiwgcmV0dmFsLm5vcm1hbE9iamVjdCk7Ci0gICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZ
X0JVRkZFUiwgbmV3IENhbnZhc0Zsb2F0QXJyYXkobm9ybWFsRGF0YSksIGN0eC5TVEFUSUNfRFJB
Vyk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRB
cnJheShub3JtYWxEYXRhKSwgY3R4LlNUQVRJQ19EUkFXKTsKIAogICAgIHJldHZhbC50ZXhDb29y
ZE9iamVjdCA9IGN0eC5jcmVhdGVCdWZmZXIoKTsKICAgICBjdHguYmluZEJ1ZmZlcihjdHguQVJS
QVlfQlVGRkVSLCByZXR2YWwudGV4Q29vcmRPYmplY3QpOwotICAgIGN0eC5idWZmZXJEYXRhKGN0
eC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNGbG9hdEFycmF5KHRleENvb3JkRGF0YSksIGN0eC5T
VEFUSUNfRFJBVyk7CisgICAgY3R4LmJ1ZmZlckRhdGEoY3R4LkFSUkFZX0JVRkZFUiwgbmV3IFdl
YkdMRmxvYXRBcnJheSh0ZXhDb29yZERhdGEpLCBjdHguU1RBVElDX0RSQVcpOwogCiAgICAgcmV0
dmFsLnZlcnRleE9iamVjdCA9IGN0eC5jcmVhdGVCdWZmZXIoKTsKICAgICBjdHguYmluZEJ1ZmZl
cihjdHguQVJSQVlfQlVGRkVSLCByZXR2YWwudmVydGV4T2JqZWN0KTsKLSAgICBjdHguYnVmZmVy
RGF0YShjdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheShnZW9tZXRyeURhdGEp
LCBjdHguU1RBVElDX0RSQVcpOworICAgIGN0eC5idWZmZXJEYXRhKGN0eC5BUlJBWV9CVUZGRVIs
IG5ldyBXZWJHTEZsb2F0QXJyYXkoZ2VvbWV0cnlEYXRhKSwgY3R4LlNUQVRJQ19EUkFXKTsKICAg
ICAKICAgICByZXR2YWwubnVtSW5kaWNlcyA9IGluZGV4RGF0YS5sZW5ndGg7CiAgICAgcmV0dmFs
LmluZGV4T2JqZWN0ID0gY3R4LmNyZWF0ZUJ1ZmZlcigpOwogICAgIGN0eC5iaW5kQnVmZmVyKGN0
eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgcmV0dmFsLmluZGV4T2JqZWN0KTsKLSAgICBjdHguYnVm
ZmVyRGF0YShjdHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNVbnNpZ25lZFNob3J0
QXJyYXkoaW5kZXhEYXRhKSwgY3R4LlNUUkVBTV9EUkFXKTsKKyAgICBjdHguYnVmZmVyRGF0YShj
dHguRUxFTUVOVF9BUlJBWV9CVUZGRVIsIG5ldyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheShpbmRl
eERhdGEpLCBjdHguU1RSRUFNX0RSQVcpOwogICAgIAogICAgIHJldHVybiByZXR2YWw7CiB9CkBA
IC0zMDUsMTAgKzMwNSwxMCBAQCBmdW5jdGlvbiBtYWtlU3BoZXJlKGN0eCwgcmFkaXVzLCBsYXRz
LCBsb25ncykKIC8vIFdoZW4gdGhlIG9iamVjdCBsb2FkIGlzIGNvbXBsZXRlLCB0aGUgJ2xvYWRl
ZCcgcHJvcGVydHkgYmVjb21lcyB0cnVlIGFuZCB0aGUgZm9sbG93aW5nIAogLy8gcHJvcGVydGll
cyBhcmUgc2V0OgogLy8KLS8vICBub3JtYWxPYmplY3QgICAgICAgIENhbnZhc0J1ZmZlciBvYmpl
Y3QgZm9yIG5vcm1hbHMKLS8vICB0ZXhDb29yZE9iamVjdCAgICAgIENhbnZhc0J1ZmZlciBvYmpl
Y3QgZm9yIHRleENvb3JkcwotLy8gIHZlcnRleE9iamVjdCAgICAgICAgQ2FudmFzQnVmZmVyIG9i
amVjdCBmb3IgdmVydGljZXMKLS8vICBpbmRleE9iamVjdCAgICAgICAgIENhbnZhc0J1ZmZlciBv
YmplY3QgZm9yIGluZGljZXMKKy8vICBub3JtYWxPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9i
amVjdCBmb3Igbm9ybWFscworLy8gIHRleENvb3JkT2JqZWN0ICAgICAgV2ViR0xCdWZmZXIgb2Jq
ZWN0IGZvciB0ZXhDb29yZHMKKy8vICB2ZXJ0ZXhPYmplY3QgICAgICAgIFdlYkdMQnVmZmVyIG9i
amVjdCBmb3IgdmVydGljZXMKKy8vICBpbmRleE9iamVjdCAgICAgICAgIFdlYkdMQnVmZmVyIG9i
amVjdCBmb3IgaW5kaWNlcwogLy8gIG51bUluZGljZXMgICAgICAgICAgVGhlIG51bWJlciBvZiBp
bmRpY2VzIGluIHRoZSBpbmRleE9iamVjdAogLy8gIAogZnVuY3Rpb24gbG9hZE9iaihjdHgsIHVy
bCkKQEAgLTQ0NiwyMCArNDQ2LDIwIEBAIGZ1bmN0aW9uIGRvTG9hZE9iaihvYmosIHRleHQpCiAg
ICAgLy8gc2V0IHRoZSBWQk9zCiAgICAgb2JqLm5vcm1hbE9iamVjdCA9IG9iai5jdHguY3JlYXRl
QnVmZmVyKCk7CiAgICAgb2JqLmN0eC5iaW5kQnVmZmVyKG9iai5jdHguQVJSQVlfQlVGRkVSLCBv
Ymoubm9ybWFsT2JqZWN0KTsKLSAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJBWV9C
VUZGRVIsIG5ldyBDYW52YXNGbG9hdEFycmF5KG5vcm1hbEFycmF5KSwgb2JqLmN0eC5TVEFUSUNf
RFJBVyk7CisgICAgb2JqLmN0eC5idWZmZXJEYXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcg
V2ViR0xGbG9hdEFycmF5KG5vcm1hbEFycmF5KSwgb2JqLmN0eC5TVEFUSUNfRFJBVyk7CiAKICAg
ICBvYmoudGV4Q29vcmRPYmplY3QgPSBvYmouY3R4LmNyZWF0ZUJ1ZmZlcigpOwogICAgIG9iai5j
dHguYmluZEJ1ZmZlcihvYmouY3R4LkFSUkFZX0JVRkZFUiwgb2JqLnRleENvb3JkT2JqZWN0KTsK
LSAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5BUlJBWV9CVUZGRVIsIG5ldyBDYW52YXNG
bG9hdEFycmF5KHRleHR1cmVBcnJheSksIG9iai5jdHguU1RBVElDX0RSQVcpOworICAgIG9iai5j
dHguYnVmZmVyRGF0YShvYmouY3R4LkFSUkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheSh0
ZXh0dXJlQXJyYXkpLCBvYmouY3R4LlNUQVRJQ19EUkFXKTsKIAogICAgIG9iai52ZXJ0ZXhPYmpl
Y3QgPSBvYmouY3R4LmNyZWF0ZUJ1ZmZlcigpOwogICAgIG9iai5jdHguYmluZEJ1ZmZlcihvYmou
Y3R4LkFSUkFZX0JVRkZFUiwgb2JqLnZlcnRleE9iamVjdCk7Ci0gICAgb2JqLmN0eC5idWZmZXJE
YXRhKG9iai5jdHguQVJSQVlfQlVGRkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheSh2ZXJ0ZXhBcnJh
eSksIG9iai5jdHguU1RBVElDX0RSQVcpOworICAgIG9iai5jdHguYnVmZmVyRGF0YShvYmouY3R4
LkFSUkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheSh2ZXJ0ZXhBcnJheSksIG9iai5jdHgu
U1RBVElDX0RSQVcpOwogICAgIAogICAgIG9iai5udW1JbmRpY2VzID0gaW5kZXhBcnJheS5sZW5n
dGg7CiAgICAgb2JqLmluZGV4T2JqZWN0ID0gb2JqLmN0eC5jcmVhdGVCdWZmZXIoKTsKICAgICBv
YmouY3R4LmJpbmRCdWZmZXIob2JqLmN0eC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgb2JqLmluZGV4
T2JqZWN0KTsKLSAgICBvYmouY3R4LmJ1ZmZlckRhdGEob2JqLmN0eC5FTEVNRU5UX0FSUkFZX0JV
RkZFUiwgbmV3IENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheShpbmRleEFycmF5KSwgb2JqLmN0eC5T
VFJFQU1fRFJBVyk7CisgICAgb2JqLmN0eC5idWZmZXJEYXRhKG9iai5jdHguRUxFTUVOVF9BUlJB
WV9CVUZGRVIsIG5ldyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheShpbmRleEFycmF5KSwgb2JqLmN0
eC5TVFJFQU1fRFJBVyk7CiAgICAgCiAgICAgb2JqLmxvYWRlZCA9IHRydWU7CiB9CkBAIC00Njcs
NyArNDY3LDcgQEAgZnVuY3Rpb24gZG9Mb2FkT2JqKG9iaiwgdGV4dCkKIC8vCiAvLyBsb2FkSW1h
Z2VUZXh0dXJlCiAvLwotLy8gTG9hZCB0aGUgaW1hZ2UgYXQgdGhlIHBhc3NlZCB1cmwsIHBsYWNl
IGl0IGluIGEgbmV3IENhbnZhc1RleHR1cmUgb2JqZWN0IGFuZCByZXR1cm4gdGhlIENhbnZhc1Rl
eHR1cmUuCisvLyBMb2FkIHRoZSBpbWFnZSBhdCB0aGUgcGFzc2VkIHVybCwgcGxhY2UgaXQgaW4g
YSBuZXcgV2ViR0xUZXh0dXJlIG9iamVjdCBhbmQgcmV0dXJuIHRoZSBXZWJHTFRleHR1cmUuCiAv
LwogZnVuY3Rpb24gbG9hZEltYWdlVGV4dHVyZShjdHgsIHVybCkKIHsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90cmlhbmdsZS5odG1sCmluZGV4IDYxMzk0MGIuLjNjMjkxMjEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3RyaWFuZ2xlLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdHJpYW5nbGUuaHRtbApAQCAtNDMsNyAr
NDMsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wu
Y3JlYXRlQnVmZmVyKCk7CiAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZF
UiwgdmVydGV4T2JqZWN0KTsKLSAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVG
RkVSLCBuZXcgQ2FudmFzRmxvYXRBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAu
NSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgbmV3IFdlYkdMRmxvYXRBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAw
LjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CiAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSgwKTsKICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
MywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMuaHRtbAppbmRleCBmYThiZTA3
Li4yZjE5N2NjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93
LXByb3BlcnRpZXMuaHRtbApAQCAtNjIsMTUgKzYyLDE1IEBAIHZhciBfX3NraXBfXyA9IHsKICAg
ICAid2luZG93LnBsYWluVGV4dCIgOiAxLAogICAgICJ3aW5kb3cudGV4dElucHV0Q29udHJvbGxl
ciIgOiAxLAogICAgIC8vIElnbm9yZSB0aGVzZSBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkbyBu
b3QgZXhpc3QgaW4gYWxsIGltcGxlbWVudGF0aW9ucy4gVGhleSB3aWxsIGJlIHRlc3RlZCBzZXBh
cmF0ZWx5Ci0gICAgIndpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QiIDogMSwgCi0gICAg
IndpbmRvdy5DYW52YXNBcnJheUJ1ZmZlciIgOiAxLCAKLSAgICAid2luZG93LkNhbnZhc0J5dGVB
cnJheSIgOiAxLCAKLSAgICAid2luZG93LkNhbnZhc0Zsb2F0QXJyYXkiIDogMSwgCi0gICAgIndp
bmRvdy5DYW52YXNJbnRBcnJheSIgOiAxLCAKLSAgICAid2luZG93LkNhbnZhc1Nob3J0QXJyYXki
IDogMSwgCi0gICAgIndpbmRvdy5DYW52YXNVbnNpZ25lZEJ5dGVBcnJheSIgOiAxLCAKLSAgICAi
d2luZG93LkNhbnZhc1Vuc2lnbmVkSW50QXJyYXkiIDogMSwgCi0gICAgIndpbmRvdy5DYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkiIDogMQorICAgICJ3aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0
IiA6IDEsIAorICAgICJ3aW5kb3cuV2ViR0xBcnJheUJ1ZmZlciIgOiAxLCAKKyAgICAid2luZG93
LldlYkdMQnl0ZUFycmF5IiA6IDEsIAorICAgICJ3aW5kb3cuV2ViR0xGbG9hdEFycmF5IiA6IDEs
IAorICAgICJ3aW5kb3cuV2ViR0xJbnRBcnJheSIgOiAxLCAKKyAgICAid2luZG93LldlYkdMU2hv
cnRBcnJheSIgOiAxLCAKKyAgICAid2luZG93LldlYkdMVW5zaWduZWRCeXRlQXJyYXkiIDogMSwg
CisgICAgIndpbmRvdy5XZWJHTFVuc2lnbmVkSW50QXJyYXkiIDogMSwgCisgICAgIndpbmRvdy5X
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSIgOiAxCiB9OwogCiBmdW5jdGlvbiBsb2dWYWx1ZSh2YWx1
ZU5hbWUpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMvY29u
c3RydWN0ZWQtb2JqZWN0cy1wcm90b3R5cGVzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2Ny
aXB0LXRlc3RzL2NvbnN0cnVjdGVkLW9iamVjdHMtcHJvdG90eXBlcy5qcwppbmRleCAxZjkzZDJh
Li4yNGEzZjQ5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMv
Y29uc3RydWN0ZWQtb2JqZWN0cy1wcm90b3R5cGVzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC10ZXN0cy9jb25zdHJ1Y3RlZC1vYmplY3RzLXByb3RvdHlwZXMuanMKQEAgLTI3
LDE1ICsyNywxNSBAQCBmdW5jdGlvbiBjb25zdHJ1Y3RvclByb3BlcnRpZXNPbldpbmRvdyhnbG9i
YWxPYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmFyIHR5cGUgPSBjbGFz
c05hbWVGb3JPYmplY3QodmFsdWUpOwogICAgICAgICAvLyBJZ25vcmUgdGhlc2UgcHJvcGVydGll
cyBiZWNhdXNlIHRoZXkgZG8gbm90IGV4aXN0IGluIGFsbCBpbXBsZW1lbnRhdGlvbnMuIFRoZXkg
d2lsbCBiZSB0ZXN0ZWQgc2VwYXJhdGVseQotICAgICAgICBpZiAodHlwZSA9PSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDNEQ29uc3RydWN0b3IiIHx8Ci0gICAgICAgICAgICB0eXBlID09ICJDYW52
YXNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yIiB8fAotICAgICAgICAgICAgdHlwZSA9PSJDYW52YXNC
eXRlQXJyYXlDb25zdHJ1Y3RvciIgfHwKLSAgICAgICAgICAgIHR5cGUgPT0iQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yIiB8fAotICAgICAgICAgICAgdHlwZSA9PSJDYW52YXNJbnRBcnJheUNv
bnN0cnVjdG9yIiB8fAotICAgICAgICAgICAgdHlwZSA9PSJDYW52YXNTaG9ydEFycmF5Q29uc3Ry
dWN0b3IiIHx8Ci0gICAgICAgICAgICB0eXBlID09IkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29u
c3RydWN0b3IiIHx8Ci0gICAgICAgICAgICB0eXBlID09IkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3RvciIgfHwKLSAgICAgICAgICAgIHR5cGUgPT0iQ2FudmFzVW5zaWduZWRTaG9ydEFy
cmF5Q29uc3RydWN0b3IiKQorICAgICAgICBpZiAodHlwZSA9PSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0Q29uc3RydWN0b3IiIHx8CisgICAgICAgICAgICB0eXBlID09ICJXZWJHTEFycmF5QnVmZmVy
Q29uc3RydWN0b3IiIHx8CisgICAgICAgICAgICB0eXBlID09IldlYkdMQnl0ZUFycmF5Q29uc3Ry
dWN0b3IiIHx8CisgICAgICAgICAgICB0eXBlID09IldlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9y
IiB8fAorICAgICAgICAgICAgdHlwZSA9PSJXZWJHTEludEFycmF5Q29uc3RydWN0b3IiIHx8Cisg
ICAgICAgICAgICB0eXBlID09IldlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yIiB8fAorICAgICAg
ICAgICAgdHlwZSA9PSJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IiIHx8CisgICAg
ICAgICAgICB0eXBlID09IldlYkdMVW5zaWduZWRJbnRBcnJheUNvbnN0cnVjdG9yIiB8fAorICAg
ICAgICAgICAgdHlwZSA9PSJXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0cnVjdG9yIikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoIXR5cGUubWF0Y2goJ0NvbnN0cnVjdG9y
JCcpKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuanMgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWluaGVyaXRhbmNlLTIuanMKaW5kZXgg
MjZjMzE0OC4uYzExYjIzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LXRlc3RzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS0yLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtaW5oZXJpdGFuY2UtMi5qcwpAQCAtNTcsMTYgKzU3
LDE2IEBAIGZ1bmN0aW9uIGNvbnN0cnVjdG9yTmFtZXNGb3JXaW5kb3coZ2xvYmFsT2JqZWN0KQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHZhciB0eXBlID0gY2xhc3NOYW1lRm9yT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICAgLy8gSWdub3JlIHRoZXNlIHByb3BlcnRpZXMgYmVjYXVzZSB0
aGV5IGRvIG5vdCBleGlzdCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLiBUaGV5IHdpbGwgYmUgdGVz
dGVkIHNlcGFyYXRlbHkKLSAgICAgICAgaWYgKHR5cGUgPT0gIkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzRENvbnN0cnVjdG9yIiB8fCAKLSAgICAgICAgICAgIHR5cGUgPT0gIkNhbnZhc0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IiIHx8Ci0gICAgICAgICAgICB0eXBlID09ICJDYW52YXNCeXRlQXJyYXlD
b25zdHJ1Y3RvciIgfHwKLSAgICAgICAgICAgIHR5cGUgPT0iQ2FudmFzRmxvYXRBcnJheUNvbnN0
cnVjdG9yIiB8fAotICAgICAgICAgICAgdHlwZSA9PSJDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9y
IiB8fAotICAgICAgICAgICAgdHlwZSA9PSJDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IiIHx8
Ci0gICAgICAgICAgICB0eXBlID09IkNhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3Ii
IHx8Ci0gICAgICAgICAgICB0eXBlID09IkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3Rv
ciIgfHwKLSAgICAgICAgICAgIHR5cGUgPT0iQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3Ry
dWN0b3IiKQotICAgICAgICAgICAgY29udGludWU7IC8vIFdlIGlnbm9yZSBDYW52YXNSZW5kZXJp
bmdDb250ZXh0M0QgYW5kIHRlc3QgaXQgZWxzZXdoZXJlLCBzaW5jZSBpdCBpcyBub3QgaW4gYWxs
IGJ1aWxkcworICAgICAgICBpZiAodHlwZSA9PSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Q29uc3Ry
dWN0b3IiIHx8IAorICAgICAgICAgICAgdHlwZSA9PSAiV2ViR0xBcnJheUJ1ZmZlckNvbnN0cnVj
dG9yIiB8fAorICAgICAgICAgICAgdHlwZSA9PSAiV2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3RvciIg
fHwKKyAgICAgICAgICAgIHR5cGUgPT0iV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IiIHx8Cisg
ICAgICAgICAgICB0eXBlID09IldlYkdMSW50QXJyYXlDb25zdHJ1Y3RvciIgfHwKKyAgICAgICAg
ICAgIHR5cGUgPT0iV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IiIHx8CisgICAgICAgICAgICB0
eXBlID09IldlYkdMVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciIgfHwKKyAgICAgICAgICAg
IHR5cGUgPT0iV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IiIHx8CisgICAgICAgICAg
ICB0eXBlID09IldlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IiKQorICAgICAgICAg
ICAgY29udGludWU7IC8vIFdlIGlnbm9yZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgYW5kIHRlc3Qg
aXQgZWxzZXdoZXJlLCBzaW5jZSBpdCBpcyBub3QgaW4gYWxsIGJ1aWxkcwogICAgICAgICBpZiAo
IXR5cGUubWF0Y2goJ0NvbnN0cnVjdG9yJCcpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG5hbWVzU2V0W3R5cGVdID0gMTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L3NjcmlwdC10ZXN0cy9wcm90b3R5cGUtaW5oZXJpdGFuY2UuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9zY3JpcHQtdGVzdHMvcHJvdG90eXBlLWluaGVyaXRhbmNlLmpzCmluZGV4IGUzMjZmNmMu
LjhhMDU3OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL3NjcmlwdC10ZXN0cy9w
cm90b3R5cGUtaW5oZXJpdGFuY2UuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vc2NyaXB0
LXRlc3RzL3Byb3RvdHlwZS1pbmhlcml0YW5jZS5qcwpAQCAtMTMsOCArMTMsOCBAQCB2YXIgc2tp
cHBlZFByb3BlcnRpZXMgPSBbCiAgICAgImV2ZW50U2VuZGVyIiwgIm9iakNQbHVnaW4iLCAib2Jq
Q1BsdWdpbkZ1bmN0aW9uIiwKICAgICAiYXBwbGVTY3JpcHRDb250cm9sbGVyIiwgInBsYWluVGV4
dCIsICJhY2Nlc3NpYmlsaXR5Q29udHJvbGxlciIsCiAgICAgLy8gSWdub3JlIHRoZXNlIHByb3Bl
cnRpZXMgYmVjYXVzZSB0aGV5IGRvIG5vdCBleGlzdCBpbiBhbGwgaW1wbGVtZW50YXRpb25zLiBU
aGV5IHdpbGwgYmUgdGVzdGVkIHNlcGFyYXRlbHkKLSAgICAiQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDNEIiwgIkNhbnZhc0FycmF5QnVmZmVyIiwgCi0gICAgIkNhbnZhc0J5dGVBcnJheSIsICJDYW52
YXNGbG9hdEFycmF5IiwgIkNhbnZhc0ludEFycmF5IiwgIkNhbnZhc1Nob3J0QXJyYXkiLCAiQ2Fu
dmFzVW5zaWduZWRCeXRlQXJyYXkiLCAiQ2FudmFzVW5zaWduZWRJbnRBcnJheSIsICJDYW52YXNV
bnNpZ25lZFNob3J0QXJyYXkiLCAKKyAgICAiV2ViR0xSZW5kZXJpbmdDb250ZXh0IiwgIldlYkdM
QXJyYXlCdWZmZXIiLCAKKyAgICAiV2ViR0xCeXRlQXJyYXkiLCAiV2ViR0xGbG9hdEFycmF5Iiwg
IldlYkdMSW50QXJyYXkiLCAiV2ViR0xTaG9ydEFycmF5IiwgIldlYkdMVW5zaWduZWRCeXRlQXJy
YXkiLCAiV2ViR0xVbnNpZ25lZEludEFycmF5IiwgIldlYkdMVW5zaWduZWRTaG9ydEFycmF5Iiwg
CiBdOwogCiB2YXIgc2tpcHBlZFByb3BlcnRpZXNTZXQgPSB7fTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2dsb2JhbC1jb25zdHJ1Y3RvcnMuanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9nbG9iYWwtY29uc3RydWN0b3JzLmpzCmluZGV4
IGVhOTYxYWMuLjkwYWI4NDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0
LXRlc3RzL2dsb2JhbC1jb25zdHJ1Y3RvcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9z
Y3JpcHQtdGVzdHMvZ2xvYmFsLWNvbnN0cnVjdG9ycy5qcwpAQCAtMTcsMTUgKzE3LDE1IEBAIGZv
ciAodmFyIHggaW4gY29uc3RydWN0b3JOYW1lcykgewogICAgIHZhciBleHBlY3RlZENvbnN0cnVj
dG9yTmFtZSA9ICInW29iamVjdCAiICsgbmFtZSArICJDb25zdHJ1Y3Rvcl0nIjsKIAogICAgIC8v
IElnbm9yZSB0aGVzZSBwcm9wZXJ0aWVzIGJlY2F1c2UgdGhleSBkbyBub3QgZXhpc3QgaW4gYWxs
IGltcGxlbWVudGF0aW9ucy4gVGhleSB3aWxsIGJlIHRlc3RlZCBzZXBhcmF0ZWx5Ci0gICAgaWYg
KG5hbWUgPT0gIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQzRCIgfHwKLSAgICAgICAgbmFtZSA9PSAi
Q2FudmFzQXJyYXlCdWZmZXIiIHx8Ci0gICAgICAgIG5hbWUgPT0iQ2FudmFzQnl0ZUFycmF5IiB8
fAotICAgICAgICBuYW1lID09IkNhbnZhc0Zsb2F0QXJyYXkiIHx8Ci0gICAgICAgIG5hbWUgPT0i
Q2FudmFzSW50QXJyYXkiIHx8Ci0gICAgICAgIG5hbWUgPT0iQ2FudmFzU2hvcnRBcnJheSIgfHwK
LSAgICAgICAgbmFtZSA9PSJDYW52YXNVbnNpZ25lZEJ5dGVBcnJheSIgfHwKLSAgICAgICAgbmFt
ZSA9PSJDYW52YXNVbnNpZ25lZEludEFycmF5IiB8fAotICAgICAgICBuYW1lID09IkNhbnZhc1Vu
c2lnbmVkU2hvcnRBcnJheSIpCisgICAgaWYgKG5hbWUgPT0gIldlYkdMUmVuZGVyaW5nQ29udGV4
dCIgfHwKKyAgICAgICAgbmFtZSA9PSAiV2ViR0xBcnJheUJ1ZmZlciIgfHwKKyAgICAgICAgbmFt
ZSA9PSJXZWJHTEJ5dGVBcnJheSIgfHwKKyAgICAgICAgbmFtZSA9PSJXZWJHTEZsb2F0QXJyYXki
IHx8CisgICAgICAgIG5hbWUgPT0iV2ViR0xJbnRBcnJheSIgfHwKKyAgICAgICAgbmFtZSA9PSJX
ZWJHTFNob3J0QXJyYXkiIHx8CisgICAgICAgIG5hbWUgPT0iV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eSIgfHwKKyAgICAgICAgbmFtZSA9PSJXZWJHTFVuc2lnbmVkSW50QXJyYXkiIHx8CisgICAgICAg
IG5hbWUgPT0iV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkiKQogICAgICAgICBjb250aW51ZTsKIAog
ICAgIGlmIChuYW1lID09ICJYTUxEb2N1bWVudCIpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9D
aGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggNWIwNGQxMC4uZDdkNTIwZiAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDA5LTExLTEwICBPbGl2ZXIgSHVudCAgPG9saXZlckBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVuYW1lIDNEIENhbnZhcyByZWxhdGVkIGNsYXNzZXMgdG8gdXNlIFdlYkdMIHByZWZpeAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwOTUKKwor
ICAgICAgICBDaGVja2luIG5ldyB2ZXJzaW9uIG9mIGRvLXdlYmNvcmUtcmVuYW1lIHVzZWQgdG8g
ZG8gdGhlIFdlYkdMIHR5cGUgcmVuYW1lLAorICAgICAgICBhbmQgdXBhdGUgd2Via2l0ZGlycyBz
Y3JpcHQgdG8gbmV3IG1ldGhvZCBvZiB0ZXN0aW5nIGZvciBXZWJHTC4KKworICAgICAgICAqIFNj
cmlwdHMvZG8td2ViY29yZS1yZW5hbWU6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRkaXJzLnBt
OgorCiAyMDA5LTExLTA5ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3Jp
cHRzL2RvLXdlYmNvcmUtcmVuYW1lIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9kby13ZWJjb3JlLXJl
bmFtZQppbmRleCA2YzAwNGU4Li5hNjVmYTRmIDEwMDc1NQotLS0gYS9XZWJLaXRUb29scy9TY3Jp
cHRzL2RvLXdlYmNvcmUtcmVuYW1lCisrKyBiL1dlYktpdFRvb2xzL1NjcmlwdHMvZG8td2ViY29y
ZS1yZW5hbWUKQEAgLTY3LDkgKzY3LDIyOSBAQCBzdWIgd2FudGVkCiAKICAgICBwdXNoIEBwYXRo
cywgJEZpbGU6OkZpbmQ6Om5hbWU7CiB9Ci0KK215ICRpc0RPTVR5cGVSZW5hbWUgPSAxOwogbXkg
JXJlbmFtZXMgPSAoCi0gICAgInBhcnNlVVJMIiA9PiAiZGVwcmVjYXRlZFBhcnNlVVJMIgorICAg
ICJDYW52YXNBY3RpdmVJbmZvIiA9PiAiV2ViR0xBY3RpdmVJbmZvIiwKKyAgICAiY2FudmFzQWN0
aXZlSW5mbyIgPT4gIndlYkdMQWN0aXZlSW5mbyIsCisgICAgIkNhbnZhc0FjdGl2ZUluZm9Db25z
dHJ1Y3RvciIgPT4gIldlYkdMQWN0aXZlSW5mb0NvbnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzQWN0
aXZlSW5mb1Byb3RvdHlwZSIgPT4gIldlYkdMQWN0aXZlSW5mb1Byb3RvdHlwZSIsCisgICAgInRv
Q2FudmFzQWN0aXZlSW5mbyIgPT4gInRvV2ViR0xBY3RpdmVJbmZvIiwKKyAgICAiSlNDYW52YXNB
Y3RpdmVJbmZvIiA9PiAiSlNXZWJHTEFjdGl2ZUluZm8iLAorICAgICJKU0NhbnZhc0FjdGl2ZUlu
Zm9Qcm90b3R5cGUiID0+ICJKU1dlYkdMQWN0aXZlSW5mb1Byb3RvdHlwZSIsCisgICAgIkpTQ2Fu
dmFzQWN0aXZlSW5mb0NvbnN0cnVjdG9yIiA9PiAiSlNXZWJHTEFjdGl2ZUluZm9Db25zdHJ1Y3Rv
ciIsCisgICAgIkpTQ2FudmFzQWN0aXZlSW5mb0N1c3RvbSIgPT4gIkpTV2ViR0xBY3RpdmVJbmZv
Q3VzdG9tIiwKKyAgICAiVjhDYW52YXNBY3RpdmVJbmZvIiA9PiAiVjhXZWJHTEFjdGl2ZUluZm8i
LAorICAgICJWOENhbnZhc0FjdGl2ZUluZm9Qcm90b3R5cGUiID0+ICJWOFdlYkdMQWN0aXZlSW5m
b1Byb3RvdHlwZSIsCisgICAgIlY4Q2FudmFzQWN0aXZlSW5mb0NvbnN0cnVjdG9yIiA9PiAiVjhX
ZWJHTEFjdGl2ZUluZm9Db25zdHJ1Y3RvciIsCisgICAgIlY4Q2FudmFzQWN0aXZlSW5mb0N1c3Rv
bSIgPT4gIlY4V2ViR0xBY3RpdmVJbmZvQ3VzdG9tIiwKKyAgICAiQ2FudmFzQXJyYXkiID0+ICJX
ZWJHTEFycmF5IiwKKyAgICAiY2FudmFzQXJyYXkiID0+ICJ3ZWJHTEFycmF5IiwKKyAgICAiQ2Fu
dmFzQXJyYXlDb25zdHJ1Y3RvciIgPT4gIldlYkdMQXJyYXlDb25zdHJ1Y3RvciIsCisgICAgIkNh
bnZhc0FycmF5UHJvdG90eXBlIiA9PiAiV2ViR0xBcnJheVByb3RvdHlwZSIsCisgICAgInRvQ2Fu
dmFzQXJyYXkiID0+ICJ0b1dlYkdMQXJyYXkiLAorICAgICJKU0NhbnZhc0FycmF5IiA9PiAiSlNX
ZWJHTEFycmF5IiwKKyAgICAiSlNDYW52YXNBcnJheVByb3RvdHlwZSIgPT4gIkpTV2ViR0xBcnJh
eVByb3RvdHlwZSIsCisgICAgIkpTQ2FudmFzQXJyYXlDb25zdHJ1Y3RvciIgPT4gIkpTV2ViR0xB
cnJheUNvbnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNBcnJheUN1c3RvbSIgPT4gIkpTV2ViR0xB
cnJheUN1c3RvbSIsCisgICAgIlY4Q2FudmFzQXJyYXkiID0+ICJWOFdlYkdMQXJyYXkiLAorICAg
ICJWOENhbnZhc0FycmF5UHJvdG90eXBlIiA9PiAiVjhXZWJHTEFycmF5UHJvdG90eXBlIiwKKyAg
ICAiVjhDYW52YXNBcnJheUNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTEFycmF5Q29uc3RydWN0b3Ii
LAorICAgICJWOENhbnZhc0FycmF5Q3VzdG9tIiA9PiAiVjhXZWJHTEFycmF5Q3VzdG9tIiwKKyAg
ICAiQ2FudmFzQXJyYXlCdWZmZXIiID0+ICJXZWJHTEFycmF5QnVmZmVyIiwKKyAgICAiY2FudmFz
QXJyYXlCdWZmZXIiID0+ICJ3ZWJHTEFycmF5QnVmZmVyIiwKKyAgICAiQ2FudmFzQXJyYXlCdWZm
ZXJDb25zdHJ1Y3RvciIgPT4gIldlYkdMQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciIsCisgICAgIkNh
bnZhc0FycmF5QnVmZmVyUHJvdG90eXBlIiA9PiAiV2ViR0xBcnJheUJ1ZmZlclByb3RvdHlwZSIs
CisgICAgInRvQ2FudmFzQXJyYXlCdWZmZXIiID0+ICJ0b1dlYkdMQXJyYXlCdWZmZXIiLAorICAg
ICJKU0NhbnZhc0FycmF5QnVmZmVyIiA9PiAiSlNXZWJHTEFycmF5QnVmZmVyIiwKKyAgICAiSlND
YW52YXNBcnJheUJ1ZmZlclByb3RvdHlwZSIgPT4gIkpTV2ViR0xBcnJheUJ1ZmZlclByb3RvdHlw
ZSIsCisgICAgIkpTQ2FudmFzQXJyYXlCdWZmZXJDb25zdHJ1Y3RvciIgPT4gIkpTV2ViR0xBcnJh
eUJ1ZmZlckNvbnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNBcnJheUJ1ZmZlckN1c3RvbSIgPT4g
IkpTV2ViR0xBcnJheUJ1ZmZlckN1c3RvbSIsCisgICAgIlY4Q2FudmFzQXJyYXlCdWZmZXIiID0+
ICJWOFdlYkdMQXJyYXlCdWZmZXIiLAorICAgICJWOENhbnZhc0FycmF5QnVmZmVyUHJvdG90eXBl
IiA9PiAiVjhXZWJHTEFycmF5QnVmZmVyUHJvdG90eXBlIiwKKyAgICAiVjhDYW52YXNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTEFycmF5QnVmZmVyQ29uc3RydWN0b3IiLAorICAg
ICJWOENhbnZhc0FycmF5QnVmZmVyQ3VzdG9tIiA9PiAiVjhXZWJHTEFycmF5QnVmZmVyQ3VzdG9t
IiwKKyAgICAiQ2FudmFzQnVmZmVyIiA9PiAiV2ViR0xCdWZmZXIiLAorICAgICJjYW52YXNCdWZm
ZXIiID0+ICJ3ZWJHTEJ1ZmZlciIsCisgICAgIkNhbnZhc0J1ZmZlckNvbnN0cnVjdG9yIiA9PiAi
V2ViR0xCdWZmZXJDb25zdHJ1Y3RvciIsCisgICAgIkNhbnZhc0J1ZmZlclByb3RvdHlwZSIgPT4g
IldlYkdMQnVmZmVyUHJvdG90eXBlIiwKKyAgICAidG9DYW52YXNCdWZmZXIiID0+ICJ0b1dlYkdM
QnVmZmVyIiwKKyAgICAiSlNDYW52YXNCdWZmZXIiID0+ICJKU1dlYkdMQnVmZmVyIiwKKyAgICAi
SlNDYW52YXNCdWZmZXJQcm90b3R5cGUiID0+ICJKU1dlYkdMQnVmZmVyUHJvdG90eXBlIiwKKyAg
ICAiSlNDYW52YXNCdWZmZXJDb25zdHJ1Y3RvciIgPT4gIkpTV2ViR0xCdWZmZXJDb25zdHJ1Y3Rv
ciIsCisgICAgIkpTQ2FudmFzQnVmZmVyQ3VzdG9tIiA9PiAiSlNXZWJHTEJ1ZmZlckN1c3RvbSIs
CisgICAgIlY4Q2FudmFzQnVmZmVyIiA9PiAiVjhXZWJHTEJ1ZmZlciIsCisgICAgIlY4Q2FudmFz
QnVmZmVyUHJvdG90eXBlIiA9PiAiVjhXZWJHTEJ1ZmZlclByb3RvdHlwZSIsCisgICAgIlY4Q2Fu
dmFzQnVmZmVyQ29uc3RydWN0b3IiID0+ICJWOFdlYkdMQnVmZmVyQ29uc3RydWN0b3IiLAorICAg
ICJWOENhbnZhc0J1ZmZlckN1c3RvbSIgPT4gIlY4V2ViR0xCdWZmZXJDdXN0b20iLAorICAgICJD
YW52YXNCeXRlQXJyYXkiID0+ICJXZWJHTEJ5dGVBcnJheSIsCisgICAgImNhbnZhc0J5dGVBcnJh
eSIgPT4gIndlYkdMQnl0ZUFycmF5IiwKKyAgICAiQ2FudmFzQnl0ZUFycmF5Q29uc3RydWN0b3Ii
ID0+ICJXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzQnl0ZUFycmF5UHJv
dG90eXBlIiA9PiAiV2ViR0xCeXRlQXJyYXlQcm90b3R5cGUiLAorICAgICJ0b0NhbnZhc0J5dGVB
cnJheSIgPT4gInRvV2ViR0xCeXRlQXJyYXkiLAorICAgICJKU0NhbnZhc0J5dGVBcnJheSIgPT4g
IkpTV2ViR0xCeXRlQXJyYXkiLAorICAgICJKU0NhbnZhc0J5dGVBcnJheVByb3RvdHlwZSIgPT4g
IkpTV2ViR0xCeXRlQXJyYXlQcm90b3R5cGUiLAorICAgICJKU0NhbnZhc0J5dGVBcnJheUNvbnN0
cnVjdG9yIiA9PiAiSlNXZWJHTEJ5dGVBcnJheUNvbnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNC
eXRlQXJyYXlDdXN0b20iID0+ICJKU1dlYkdMQnl0ZUFycmF5Q3VzdG9tIiwKKyAgICAiVjhDYW52
YXNCeXRlQXJyYXkiID0+ICJWOFdlYkdMQnl0ZUFycmF5IiwKKyAgICAiVjhDYW52YXNCeXRlQXJy
YXlQcm90b3R5cGUiID0+ICJWOFdlYkdMQnl0ZUFycmF5UHJvdG90eXBlIiwKKyAgICAiVjhDYW52
YXNCeXRlQXJyYXlDb25zdHJ1Y3RvciIgPT4gIlY4V2ViR0xCeXRlQXJyYXlDb25zdHJ1Y3RvciIs
CisgICAgIlY4Q2FudmFzQnl0ZUFycmF5Q3VzdG9tIiA9PiAiVjhXZWJHTEJ5dGVBcnJheUN1c3Rv
bSIsCisgICAgIkNhbnZhc0Zsb2F0QXJyYXkiID0+ICJXZWJHTEZsb2F0QXJyYXkiLAorICAgICJj
YW52YXNGbG9hdEFycmF5IiA9PiAid2ViR0xGbG9hdEFycmF5IiwKKyAgICAiQ2FudmFzRmxvYXRB
cnJheUNvbnN0cnVjdG9yIiA9PiAiV2ViR0xGbG9hdEFycmF5Q29uc3RydWN0b3IiLAorICAgICJD
YW52YXNGbG9hdEFycmF5UHJvdG90eXBlIiA9PiAiV2ViR0xGbG9hdEFycmF5UHJvdG90eXBlIiwK
KyAgICAidG9DYW52YXNGbG9hdEFycmF5IiA9PiAidG9XZWJHTEZsb2F0QXJyYXkiLAorICAgICJK
U0NhbnZhc0Zsb2F0QXJyYXkiID0+ICJKU1dlYkdMRmxvYXRBcnJheSIsCisgICAgIkpTQ2FudmFz
RmxvYXRBcnJheVByb3RvdHlwZSIgPT4gIkpTV2ViR0xGbG9hdEFycmF5UHJvdG90eXBlIiwKKyAg
ICAiSlNDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3IiID0+ICJKU1dlYkdMRmxvYXRBcnJheUNv
bnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNGbG9hdEFycmF5Q3VzdG9tIiA9PiAiSlNXZWJHTEZs
b2F0QXJyYXlDdXN0b20iLAorICAgICJWOENhbnZhc0Zsb2F0QXJyYXkiID0+ICJWOFdlYkdMRmxv
YXRBcnJheSIsCisgICAgIlY4Q2FudmFzRmxvYXRBcnJheVByb3RvdHlwZSIgPT4gIlY4V2ViR0xG
bG9hdEFycmF5UHJvdG90eXBlIiwKKyAgICAiVjhDYW52YXNGbG9hdEFycmF5Q29uc3RydWN0b3Ii
ID0+ICJWOFdlYkdMRmxvYXRBcnJheUNvbnN0cnVjdG9yIiwKKyAgICAiVjhDYW52YXNGbG9hdEFy
cmF5Q3VzdG9tIiA9PiAiVjhXZWJHTEZsb2F0QXJyYXlDdXN0b20iLAorICAgICJDYW52YXNGcmFt
ZWJ1ZmZlciIgPT4gIldlYkdMRnJhbWVidWZmZXIiLAorICAgICJjYW52YXNGcmFtZWJ1ZmZlciIg
PT4gIndlYkdMRnJhbWVidWZmZXIiLAorICAgICJDYW52YXNGcmFtZWJ1ZmZlckNvbnN0cnVjdG9y
IiA9PiAiV2ViR0xGcmFtZWJ1ZmZlckNvbnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzRnJhbWVidWZm
ZXJQcm90b3R5cGUiID0+ICJXZWJHTEZyYW1lYnVmZmVyUHJvdG90eXBlIiwKKyAgICAidG9DYW52
YXNGcmFtZWJ1ZmZlciIgPT4gInRvV2ViR0xGcmFtZWJ1ZmZlciIsCisgICAgIkpTQ2FudmFzRnJh
bWVidWZmZXIiID0+ICJKU1dlYkdMRnJhbWVidWZmZXIiLAorICAgICJKU0NhbnZhc0ZyYW1lYnVm
ZmVyUHJvdG90eXBlIiA9PiAiSlNXZWJHTEZyYW1lYnVmZmVyUHJvdG90eXBlIiwKKyAgICAiSlND
YW52YXNGcmFtZWJ1ZmZlckNvbnN0cnVjdG9yIiA9PiAiSlNXZWJHTEZyYW1lYnVmZmVyQ29uc3Ry
dWN0b3IiLAorICAgICJKU0NhbnZhc0ZyYW1lYnVmZmVyQ3VzdG9tIiA9PiAiSlNXZWJHTEZyYW1l
YnVmZmVyQ3VzdG9tIiwKKyAgICAiVjhDYW52YXNGcmFtZWJ1ZmZlciIgPT4gIlY4V2ViR0xGcmFt
ZWJ1ZmZlciIsCisgICAgIlY4Q2FudmFzRnJhbWVidWZmZXJQcm90b3R5cGUiID0+ICJWOFdlYkdM
RnJhbWVidWZmZXJQcm90b3R5cGUiLAorICAgICJWOENhbnZhc0ZyYW1lYnVmZmVyQ29uc3RydWN0
b3IiID0+ICJWOFdlYkdMRnJhbWVidWZmZXJDb25zdHJ1Y3RvciIsCisgICAgIlY4Q2FudmFzRnJh
bWVidWZmZXJDdXN0b20iID0+ICJWOFdlYkdMRnJhbWVidWZmZXJDdXN0b20iLAorICAgICJDYW52
YXNJbnRBcnJheSIgPT4gIldlYkdMSW50QXJyYXkiLAorICAgICJjYW52YXNJbnRBcnJheSIgPT4g
IndlYkdMSW50QXJyYXkiLAorICAgICJDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yIiA9PiAiV2Vi
R0xJbnRBcnJheUNvbnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzSW50QXJyYXlQcm90b3R5cGUiID0+
ICJXZWJHTEludEFycmF5UHJvdG90eXBlIiwKKyAgICAidG9DYW52YXNJbnRBcnJheSIgPT4gInRv
V2ViR0xJbnRBcnJheSIsCisgICAgIkpTQ2FudmFzSW50QXJyYXkiID0+ICJKU1dlYkdMSW50QXJy
YXkiLAorICAgICJKU0NhbnZhc0ludEFycmF5UHJvdG90eXBlIiA9PiAiSlNXZWJHTEludEFycmF5
UHJvdG90eXBlIiwKKyAgICAiSlNDYW52YXNJbnRBcnJheUNvbnN0cnVjdG9yIiA9PiAiSlNXZWJH
TEludEFycmF5Q29uc3RydWN0b3IiLAorICAgICJKU0NhbnZhc0ludEFycmF5Q3VzdG9tIiA9PiAi
SlNXZWJHTEludEFycmF5Q3VzdG9tIiwKKyAgICAiVjhDYW52YXNJbnRBcnJheSIgPT4gIlY4V2Vi
R0xJbnRBcnJheSIsCisgICAgIlY4Q2FudmFzSW50QXJyYXlQcm90b3R5cGUiID0+ICJWOFdlYkdM
SW50QXJyYXlQcm90b3R5cGUiLAorICAgICJWOENhbnZhc0ludEFycmF5Q29uc3RydWN0b3IiID0+
ICJWOFdlYkdMSW50QXJyYXlDb25zdHJ1Y3RvciIsCisgICAgIlY4Q2FudmFzSW50QXJyYXlDdXN0
b20iID0+ICJWOFdlYkdMSW50QXJyYXlDdXN0b20iLAorICAgICJDYW52YXNQcm9ncmFtIiA9PiAi
V2ViR0xQcm9ncmFtIiwKKyAgICAiY2FudmFzUHJvZ3JhbSIgPT4gIndlYkdMUHJvZ3JhbSIsCisg
ICAgIkNhbnZhc1Byb2dyYW1Db25zdHJ1Y3RvciIgPT4gIldlYkdMUHJvZ3JhbUNvbnN0cnVjdG9y
IiwKKyAgICAiQ2FudmFzUHJvZ3JhbVByb3RvdHlwZSIgPT4gIldlYkdMUHJvZ3JhbVByb3RvdHlw
ZSIsCisgICAgInRvQ2FudmFzUHJvZ3JhbSIgPT4gInRvV2ViR0xQcm9ncmFtIiwKKyAgICAiSlND
YW52YXNQcm9ncmFtIiA9PiAiSlNXZWJHTFByb2dyYW0iLAorICAgICJKU0NhbnZhc1Byb2dyYW1Q
cm90b3R5cGUiID0+ICJKU1dlYkdMUHJvZ3JhbVByb3RvdHlwZSIsCisgICAgIkpTQ2FudmFzUHJv
Z3JhbUNvbnN0cnVjdG9yIiA9PiAiSlNXZWJHTFByb2dyYW1Db25zdHJ1Y3RvciIsCisgICAgIkpT
Q2FudmFzUHJvZ3JhbUN1c3RvbSIgPT4gIkpTV2ViR0xQcm9ncmFtQ3VzdG9tIiwKKyAgICAiVjhD
YW52YXNQcm9ncmFtIiA9PiAiVjhXZWJHTFByb2dyYW0iLAorICAgICJWOENhbnZhc1Byb2dyYW1Q
cm90b3R5cGUiID0+ICJWOFdlYkdMUHJvZ3JhbVByb3RvdHlwZSIsCisgICAgIlY4Q2FudmFzUHJv
Z3JhbUNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTFByb2dyYW1Db25zdHJ1Y3RvciIsCisgICAgIlY4
Q2FudmFzUHJvZ3JhbUN1c3RvbSIgPT4gIlY4V2ViR0xQcm9ncmFtQ3VzdG9tIiwKKyAgICAiQ2Fu
dmFzUmVuZGVyYnVmZmVyIiA9PiAiV2ViR0xSZW5kZXJidWZmZXIiLAorICAgICJjYW52YXNSZW5k
ZXJidWZmZXIiID0+ICJ3ZWJHTFJlbmRlcmJ1ZmZlciIsCisgICAgIkNhbnZhc1JlbmRlcmJ1ZmZl
ckNvbnN0cnVjdG9yIiA9PiAiV2ViR0xSZW5kZXJidWZmZXJDb25zdHJ1Y3RvciIsCisgICAgIkNh
bnZhc1JlbmRlcmJ1ZmZlclByb3RvdHlwZSIgPT4gIldlYkdMUmVuZGVyYnVmZmVyUHJvdG90eXBl
IiwKKyAgICAidG9DYW52YXNSZW5kZXJidWZmZXIiID0+ICJ0b1dlYkdMUmVuZGVyYnVmZmVyIiwK
KyAgICAiSlNDYW52YXNSZW5kZXJidWZmZXIiID0+ICJKU1dlYkdMUmVuZGVyYnVmZmVyIiwKKyAg
ICAiSlNDYW52YXNSZW5kZXJidWZmZXJQcm90b3R5cGUiID0+ICJKU1dlYkdMUmVuZGVyYnVmZmVy
UHJvdG90eXBlIiwKKyAgICAiSlNDYW52YXNSZW5kZXJidWZmZXJDb25zdHJ1Y3RvciIgPT4gIkpT
V2ViR0xSZW5kZXJidWZmZXJDb25zdHJ1Y3RvciIsCisgICAgIkpTQ2FudmFzUmVuZGVyYnVmZmVy
Q3VzdG9tIiA9PiAiSlNXZWJHTFJlbmRlcmJ1ZmZlckN1c3RvbSIsCisgICAgIlY4Q2FudmFzUmVu
ZGVyYnVmZmVyIiA9PiAiVjhXZWJHTFJlbmRlcmJ1ZmZlciIsCisgICAgIlY4Q2FudmFzUmVuZGVy
YnVmZmVyUHJvdG90eXBlIiA9PiAiVjhXZWJHTFJlbmRlcmJ1ZmZlclByb3RvdHlwZSIsCisgICAg
IlY4Q2FudmFzUmVuZGVyYnVmZmVyQ29uc3RydWN0b3IiID0+ICJWOFdlYkdMUmVuZGVyYnVmZmVy
Q29uc3RydWN0b3IiLAorICAgICJWOENhbnZhc1JlbmRlcmJ1ZmZlckN1c3RvbSIgPT4gIlY4V2Vi
R0xSZW5kZXJidWZmZXJDdXN0b20iLAorICAgICJDYW52YXNSZW5kZXJpbmdDb250ZXh0M0QiID0+
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQiLAorICAgICJjYW52YXNSZW5kZXJpbmdDb250ZXh0M0Qi
ID0+ICJ3ZWJHTFJlbmRlcmluZ0NvbnRleHQiLAorICAgICJDYW52YXNSZW5kZXJpbmdDb250ZXh0
M0RDb25zdHJ1Y3RvciIgPT4gIldlYkdMUmVuZGVyaW5nQ29udGV4dENvbnN0cnVjdG9yIiwKKyAg
ICAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNEUHJvdG90eXBlIiA9PiAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0UHJvdG90eXBlIiwKKyAgICAidG9DYW52YXNSZW5kZXJpbmdDb250ZXh0M0QiID0+ICJ0
b1dlYkdMUmVuZGVyaW5nQ29udGV4dCIsCisgICAgIkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDNE
IiA9PiAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQiLAorICAgICJKU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQzRFByb3RvdHlwZSIgPT4gIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0UHJvdG90eXBlIiwK
KyAgICAiSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0M0RDb25zdHJ1Y3RvciIgPT4gIkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Q29uc3RydWN0b3IiLAorICAgICJKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQzREN1c3RvbSIgPT4gIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tIiwKKyAgICAiVjhD
YW52YXNSZW5kZXJpbmdDb250ZXh0M0QiID0+ICJWOFdlYkdMUmVuZGVyaW5nQ29udGV4dCIsCisg
ICAgIlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEUHJvdG90eXBlIiA9PiAiVjhXZWJHTFJlbmRl
cmluZ0NvbnRleHRQcm90b3R5cGUiLAorICAgICJWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQzRENv
bnN0cnVjdG9yIiA9PiAiVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDb25zdHJ1Y3RvciIsCisgICAg
IlY4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDNEQ3VzdG9tIiA9PiAiVjhXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20iLAorICAgICJDYW52YXNTaGFkZXIiID0+ICJXZWJHTFNoYWRlciIsCisgICAg
ImNhbnZhc1NoYWRlciIgPT4gIndlYkdMU2hhZGVyIiwKKyAgICAiQ2FudmFzU2hhZGVyQ29uc3Ry
dWN0b3IiID0+ICJXZWJHTFNoYWRlckNvbnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzU2hhZGVyUHJv
dG90eXBlIiA9PiAiV2ViR0xTaGFkZXJQcm90b3R5cGUiLAorICAgICJ0b0NhbnZhc1NoYWRlciIg
PT4gInRvV2ViR0xTaGFkZXIiLAorICAgICJKU0NhbnZhc1NoYWRlciIgPT4gIkpTV2ViR0xTaGFk
ZXIiLAorICAgICJKU0NhbnZhc1NoYWRlclByb3RvdHlwZSIgPT4gIkpTV2ViR0xTaGFkZXJQcm90
b3R5cGUiLAorICAgICJKU0NhbnZhc1NoYWRlckNvbnN0cnVjdG9yIiA9PiAiSlNXZWJHTFNoYWRl
ckNvbnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNTaGFkZXJDdXN0b20iID0+ICJKU1dlYkdMU2hh
ZGVyQ3VzdG9tIiwKKyAgICAiVjhDYW52YXNTaGFkZXIiID0+ICJWOFdlYkdMU2hhZGVyIiwKKyAg
ICAiVjhDYW52YXNTaGFkZXJQcm90b3R5cGUiID0+ICJWOFdlYkdMU2hhZGVyUHJvdG90eXBlIiwK
KyAgICAiVjhDYW52YXNTaGFkZXJDb25zdHJ1Y3RvciIgPT4gIlY4V2ViR0xTaGFkZXJDb25zdHJ1
Y3RvciIsCisgICAgIlY4Q2FudmFzU2hhZGVyQ3VzdG9tIiA9PiAiVjhXZWJHTFNoYWRlckN1c3Rv
bSIsCisgICAgIkNhbnZhc1Nob3J0QXJyYXkiID0+ICJXZWJHTFNob3J0QXJyYXkiLAorICAgICJj
YW52YXNTaG9ydEFycmF5IiA9PiAid2ViR0xTaG9ydEFycmF5IiwKKyAgICAiQ2FudmFzU2hvcnRB
cnJheUNvbnN0cnVjdG9yIiA9PiAiV2ViR0xTaG9ydEFycmF5Q29uc3RydWN0b3IiLAorICAgICJD
YW52YXNTaG9ydEFycmF5UHJvdG90eXBlIiA9PiAiV2ViR0xTaG9ydEFycmF5UHJvdG90eXBlIiwK
KyAgICAidG9DYW52YXNTaG9ydEFycmF5IiA9PiAidG9XZWJHTFNob3J0QXJyYXkiLAorICAgICJK
U0NhbnZhc1Nob3J0QXJyYXkiID0+ICJKU1dlYkdMU2hvcnRBcnJheSIsCisgICAgIkpTQ2FudmFz
U2hvcnRBcnJheVByb3RvdHlwZSIgPT4gIkpTV2ViR0xTaG9ydEFycmF5UHJvdG90eXBlIiwKKyAg
ICAiSlNDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3IiID0+ICJKU1dlYkdMU2hvcnRBcnJheUNv
bnN0cnVjdG9yIiwKKyAgICAiSlNDYW52YXNTaG9ydEFycmF5Q3VzdG9tIiA9PiAiSlNXZWJHTFNo
b3J0QXJyYXlDdXN0b20iLAorICAgICJWOENhbnZhc1Nob3J0QXJyYXkiID0+ICJWOFdlYkdMU2hv
cnRBcnJheSIsCisgICAgIlY4Q2FudmFzU2hvcnRBcnJheVByb3RvdHlwZSIgPT4gIlY4V2ViR0xT
aG9ydEFycmF5UHJvdG90eXBlIiwKKyAgICAiVjhDYW52YXNTaG9ydEFycmF5Q29uc3RydWN0b3Ii
ID0+ICJWOFdlYkdMU2hvcnRBcnJheUNvbnN0cnVjdG9yIiwKKyAgICAiVjhDYW52YXNTaG9ydEFy
cmF5Q3VzdG9tIiA9PiAiVjhXZWJHTFNob3J0QXJyYXlDdXN0b20iLAorICAgICJDYW52YXNUZXh0
dXJlIiA9PiAiV2ViR0xUZXh0dXJlIiwKKyAgICAiY2FudmFzVGV4dHVyZSIgPT4gIndlYkdMVGV4
dHVyZSIsCisgICAgIkNhbnZhc1RleHR1cmVDb25zdHJ1Y3RvciIgPT4gIldlYkdMVGV4dHVyZUNv
bnN0cnVjdG9yIiwKKyAgICAiQ2FudmFzVGV4dHVyZVByb3RvdHlwZSIgPT4gIldlYkdMVGV4dHVy
ZVByb3RvdHlwZSIsCisgICAgInRvQ2FudmFzVGV4dHVyZSIgPT4gInRvV2ViR0xUZXh0dXJlIiwK
KyAgICAiSlNDYW52YXNUZXh0dXJlIiA9PiAiSlNXZWJHTFRleHR1cmUiLAorICAgICJKU0NhbnZh
c1RleHR1cmVQcm90b3R5cGUiID0+ICJKU1dlYkdMVGV4dHVyZVByb3RvdHlwZSIsCisgICAgIkpT
Q2FudmFzVGV4dHVyZUNvbnN0cnVjdG9yIiA9PiAiSlNXZWJHTFRleHR1cmVDb25zdHJ1Y3RvciIs
CisgICAgIkpTQ2FudmFzVGV4dHVyZUN1c3RvbSIgPT4gIkpTV2ViR0xUZXh0dXJlQ3VzdG9tIiwK
KyAgICAiVjhDYW52YXNUZXh0dXJlIiA9PiAiVjhXZWJHTFRleHR1cmUiLAorICAgICJWOENhbnZh
c1RleHR1cmVQcm90b3R5cGUiID0+ICJWOFdlYkdMVGV4dHVyZVByb3RvdHlwZSIsCisgICAgIlY4
Q2FudmFzVGV4dHVyZUNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTFRleHR1cmVDb25zdHJ1Y3RvciIs
CisgICAgIlY4Q2FudmFzVGV4dHVyZUN1c3RvbSIgPT4gIlY4V2ViR0xUZXh0dXJlQ3VzdG9tIiwK
KyAgICAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkiID0+ICJXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
IiwKKyAgICAiY2FudmFzVW5zaWduZWRCeXRlQXJyYXkiID0+ICJ3ZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5IiwKKyAgICAiQ2FudmFzVW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciIgPT4gIldlYkdM
VW5zaWduZWRCeXRlQXJyYXlDb25zdHJ1Y3RvciIsCisgICAgIkNhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5UHJvdG90eXBlIiA9PiAiV2ViR0xVbnNpZ25lZEJ5dGVBcnJheVByb3RvdHlwZSIsCisgICAg
InRvQ2FudmFzVW5zaWduZWRCeXRlQXJyYXkiID0+ICJ0b1dlYkdMVW5zaWduZWRCeXRlQXJyYXki
LAorICAgICJKU0NhbnZhc1Vuc2lnbmVkQnl0ZUFycmF5IiA9PiAiSlNXZWJHTFVuc2lnbmVkQnl0
ZUFycmF5IiwKKyAgICAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheVByb3RvdHlwZSIgPT4gIkpT
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheVByb3RvdHlwZSIsCisgICAgIkpTQ2FudmFzVW5zaWduZWRC
eXRlQXJyYXlDb25zdHJ1Y3RvciIgPT4gIkpTV2ViR0xVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVj
dG9yIiwKKyAgICAiSlNDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUN1c3RvbSIgPT4gIkpTV2ViR0xV
bnNpZ25lZEJ5dGVBcnJheUN1c3RvbSIsCisgICAgIlY4Q2FudmFzVW5zaWduZWRCeXRlQXJyYXki
ID0+ICJWOFdlYkdMVW5zaWduZWRCeXRlQXJyYXkiLAorICAgICJWOENhbnZhc1Vuc2lnbmVkQnl0
ZUFycmF5UHJvdG90eXBlIiA9PiAiVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5UHJvdG90eXBlIiwK
KyAgICAiVjhDYW52YXNVbnNpZ25lZEJ5dGVBcnJheUNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5Q29uc3RydWN0b3IiLAorICAgICJWOENhbnZhc1Vuc2lnbmVkQnl0ZUFy
cmF5Q3VzdG9tIiA9PiAiVjhXZWJHTFVuc2lnbmVkQnl0ZUFycmF5Q3VzdG9tIiwKKyAgICAiQ2Fu
dmFzVW5zaWduZWRJbnRBcnJheSIgPT4gIldlYkdMVW5zaWduZWRJbnRBcnJheSIsCisgICAgImNh
bnZhc1Vuc2lnbmVkSW50QXJyYXkiID0+ICJ3ZWJHTFVuc2lnbmVkSW50QXJyYXkiLAorICAgICJD
YW52YXNVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IiID0+ICJXZWJHTFVuc2lnbmVkSW50QXJy
YXlDb25zdHJ1Y3RvciIsCisgICAgIkNhbnZhc1Vuc2lnbmVkSW50QXJyYXlQcm90b3R5cGUiID0+
ICJXZWJHTFVuc2lnbmVkSW50QXJyYXlQcm90b3R5cGUiLAorICAgICJ0b0NhbnZhc1Vuc2lnbmVk
SW50QXJyYXkiID0+ICJ0b1dlYkdMVW5zaWduZWRJbnRBcnJheSIsCisgICAgIkpTQ2FudmFzVW5z
aWduZWRJbnRBcnJheSIgPT4gIkpTV2ViR0xVbnNpZ25lZEludEFycmF5IiwKKyAgICAiSlNDYW52
YXNVbnNpZ25lZEludEFycmF5UHJvdG90eXBlIiA9PiAiSlNXZWJHTFVuc2lnbmVkSW50QXJyYXlQ
cm90b3R5cGUiLAorICAgICJKU0NhbnZhc1Vuc2lnbmVkSW50QXJyYXlDb25zdHJ1Y3RvciIgPT4g
IkpTV2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IiLAorICAgICJKU0NhbnZhc1Vuc2ln
bmVkSW50QXJyYXlDdXN0b20iID0+ICJKU1dlYkdMVW5zaWduZWRJbnRBcnJheUN1c3RvbSIsCisg
ICAgIlY4Q2FudmFzVW5zaWduZWRJbnRBcnJheSIgPT4gIlY4V2ViR0xVbnNpZ25lZEludEFycmF5
IiwKKyAgICAiVjhDYW52YXNVbnNpZ25lZEludEFycmF5UHJvdG90eXBlIiA9PiAiVjhXZWJHTFVu
c2lnbmVkSW50QXJyYXlQcm90b3R5cGUiLAorICAgICJWOENhbnZhc1Vuc2lnbmVkSW50QXJyYXlD
b25zdHJ1Y3RvciIgPT4gIlY4V2ViR0xVbnNpZ25lZEludEFycmF5Q29uc3RydWN0b3IiLAorICAg
ICJWOENhbnZhc1Vuc2lnbmVkSW50QXJyYXlDdXN0b20iID0+ICJWOFdlYkdMVW5zaWduZWRJbnRB
cnJheUN1c3RvbSIsCisgICAgIkNhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSIgPT4gIldlYkdMVW5z
aWduZWRTaG9ydEFycmF5IiwKKyAgICAiY2FudmFzVW5zaWduZWRTaG9ydEFycmF5IiA9PiAid2Vi
R0xVbnNpZ25lZFNob3J0QXJyYXkiLAorICAgICJDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDb25z
dHJ1Y3RvciIgPT4gIldlYkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IiLAorICAgICJD
YW52YXNVbnNpZ25lZFNob3J0QXJyYXlQcm90b3R5cGUiID0+ICJXZWJHTFVuc2lnbmVkU2hvcnRB
cnJheVByb3RvdHlwZSIsCisgICAgInRvQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5IiA9PiAidG9X
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSIsCisgICAgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5
IiA9PiAiSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSIsCisgICAgIkpTQ2FudmFzVW5zaWduZWRT
aG9ydEFycmF5UHJvdG90eXBlIiA9PiAiSlNXZWJHTFVuc2lnbmVkU2hvcnRBcnJheVByb3RvdHlw
ZSIsCisgICAgIkpTQ2FudmFzVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IiID0+ICJKU1dl
YkdMVW5zaWduZWRTaG9ydEFycmF5Q29uc3RydWN0b3IiLAorICAgICJKU0NhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUN1c3RvbSIgPT4gIkpTV2ViR0xVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20iLAor
ICAgICJWOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheSIgPT4gIlY4V2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkiLAorICAgICJWOENhbnZhc1Vuc2lnbmVkU2hvcnRBcnJheVByb3RvdHlwZSIgPT4gIlY4
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXlQcm90b3R5cGUiLAorICAgICJWOENhbnZhc1Vuc2lnbmVk
U2hvcnRBcnJheUNvbnN0cnVjdG9yIiA9PiAiVjhXZWJHTFVuc2lnbmVkU2hvcnRBcnJheUNvbnN0
cnVjdG9yIiwKKyAgICAiVjhDYW52YXNVbnNpZ25lZFNob3J0QXJyYXlDdXN0b20iID0+ICJWOFdl
YkdMVW5zaWduZWRTaG9ydEFycmF5Q3VzdG9tIgogKTsKIAogbXkgJXJlbmFtZXNDb250ZW1wbGF0
ZWRGb3JUaGVGdXR1cmUgPSAoCkBAIC0xNzksOCArMzk5LDE0IEBAIGZvciBteSAkZmlsZSAoc29y
dCBAcGF0aHMpIHsKICAgICB9CiAgICAgbXkgJG5ld0NvbnRlbnRzID0gJGNvbnRlbnRzOwogCi0g
ICAgZm9yIG15ICRmcm9tIChrZXlzICVyZW5hbWVzKSB7Ci0gICAgICAgICRuZXdDb250ZW50cyA9
fiBzL1xiJGZyb20oPyFbIlx3XSkvJHJlbmFtZXN7JGZyb219L2c7ICMgdGhpcyAiIHVuY29uZnVz
ZXMgWGNvZGUgc3ludGF4IGhpZ2hsaWdodGluZworICAgIGlmICgkaXNET01UeXBlUmVuYW1lKSB7
CisgICAgICAgIGZvciBteSAkZnJvbSAoa2V5cyAlcmVuYW1lcykgeworICAgICAgICAgICAgJG5l
d0NvbnRlbnRzID1+IHMvXGIkZnJvbS8kcmVuYW1lc3skZnJvbX0vZzsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIGZvciBteSAkZnJvbSAoa2V5cyAlcmVuYW1lcykgeworICAgICAg
ICAgICAgJG5ld0NvbnRlbnRzID1+IHMvXGIkZnJvbSg/IVsiXHddKS8kcmVuYW1lc3skZnJvbX0v
ZzsgIyB0aGlzICIgdW5jb25mdXNlcyBYY29kZSBzeW50YXggaGlnaGxpZ2h0aW5nCisgICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAoJG5ld0NvbnRlbnRzIG5lICRjb250ZW50cykgewpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRkaXJzLnBtIGIvV2ViS2l0VG9vbHMvU2Ny
aXB0cy93ZWJraXRkaXJzLnBtCmluZGV4IDE2ZjljMjYuLjA2ZTk2MmYgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0ZGlycy5wbQorKysgYi9XZWJLaXRUb29scy9TY3JpcHRz
L3dlYmtpdGRpcnMucG0KQEAgLTY4MCw3ICs2ODAsNyBAQCBzdWIgaGFzM0RDYW52YXNTdXBwb3J0
CiAgICAgcmV0dXJuIDAgaWYgaXNRdCgpOwogCiAgICAgbXkgJHBhdGggPSBzaGlmdDsKLSAgICBy
ZXR1cm4gbGlicmFyeUNvbnRhaW5zU3ltYm9sKCRwYXRoLCAiQ2FudmFzU2hhZGVyIik7CisgICAg
cmV0dXJuIGxpYnJhcnlDb250YWluc1N5bWJvbCgkcGF0aCwgIldlYkdMU2hhZGVyIik7CiB9CiAK
IHN1YiBjaGVja1dlYkNvcmUzRENhbnZhc1N1cHBvcnQK
</data>
<flag name="review"
          id="24460"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>