<?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>87899</bug_id>
          
          <creation_ts>2012-05-30 14:32:32 -0700</creation_ts>
          <short_desc>AX: Need AccessibilityObjects for nodes without renderers in canvas subtree</short_desc>
          <delta_ts>2012-07-23 23:27:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>91863</dependson>
          <blocked>50126</blocked>
    
    <blocked>91794</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominic Mazzoni">dmazzoni</reporter>
          <assigned_to name="Dominic Mazzoni">dmazzoni</assigned_to>
          <cc>abarth</cc>
    
    <cc>cfleizach</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jochen</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>637695</commentid>
    <comment_count>0</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-05-30 14:32:32 -0700</bug_when>
    <thetext>Basically, it should be possible to create an AccessibilityObject out of a Node that doesn&apos;t have a renderer. This is necessary to support accessibility for canvas fallback content (https://bugs.webkit.org/show_bug.cgi?id=50126&amp;GoAheadAndLogIn=1) but may also help clean up AccessibilityRenderObject so the render-specific logic is separate from the logic that only depends on a Node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>669853</commentid>
    <comment_count>1</comment_count>
      <attachid>152429</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-14 12:07:43 -0700</bug_when>
    <thetext>Created attachment 152429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>672429</commentid>
    <comment_count>2</comment_count>
      <attachid>152429</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-07-18 09:25:04 -0700</bug_when>
    <thetext>Comment on attachment 152429
Patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:196
&gt; +    if (node-&gt;renderer())

we should add a comment that Nodes with renderers should be made into AccessibilityRenderObjects because we prefer using the render tree as the data model

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:444
&gt; +    if (node-&gt;renderer()) {

is it possible a node got a renderer attached after we had made the object, meaning that we&apos;d still want to try to clean up the m_nodeObjectMapping?

&gt; Source/WebCore/accessibility/AXObjectCache.h:188
&gt; +    HashMap&lt;Node*, AXID&gt; m_nodeObjectMapping;

does it make sense to have three of these hash maps? or should it be a more generic type?

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:142
&gt; +    m_node = renderer-&gt;node();

should we call setNode() here so that AccessibilityRenderObject doesn&apos;t need to know about m_node

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3469
&gt; +        AccessibilityNodeObject::addChildren();

can we add these lines in a new method like &quot;addCanvasChildren&quot; and put it below with the other special cases?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674020</commentid>
    <comment_count>3</comment_count>
      <attachid>153367</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-19 16:12:23 -0700</bug_when>
    <thetext>Created attachment 153367
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674022</commentid>
    <comment_count>4</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-19 16:12:52 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 152429 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=152429&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AXObjectCache.cpp:196
&gt; &gt; +    if (node-&gt;renderer())
&gt; 
&gt; we should add a comment that Nodes with renderers should be made into AccessibilityRenderObjects because we prefer using the render tree as the data model

Good idea, done.

&gt; &gt; Source/WebCore/accessibility/AXObjectCache.cpp:444
&gt; &gt; +    if (node-&gt;renderer()) {
&gt; 
&gt; is it possible a node got a renderer attached after we had made the object, meaning that we&apos;d still want to try to clean up the m_nodeObjectMapping?

True, I think this could happen if an element is first inside of a canvas and then later reparented outside the canvas. In that case the node -&gt; AccessibilityObject would leak.

In the next change I&apos;m going to replace all of the calls to AXObjectCache from everywhere else in WebCore so that they act on a Node instead of a Renderer. That will fix notifications and I think I can fix this corner case then. I specifically mentioned this test in https://bugs.webkit.org/show_bug.cgi?id=91794 and I&apos;ll write a test to confirm it&apos;s fixed then.

&gt; &gt; Source/WebCore/accessibility/AXObjectCache.h:188
&gt; &gt; +    HashMap&lt;Node*, AXID&gt; m_nodeObjectMapping;
&gt; 
&gt; does it make sense to have three of these hash maps? or should it be a more generic type?

Unfortunately I can&apos;t think of an easy way to use a more generic type without doing more unsafe type conversions. I think this is fine since every AccessibilityObject only appears in one hash map.

&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:142
&gt; &gt; +    m_node = renderer-&gt;node();
&gt; 
&gt; should we call setNode() here so that AccessibilityRenderObject doesn&apos;t need to know about m_node

Good idea, made m_node private too.

&gt; &gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3469
&gt; &gt; +        AccessibilityNodeObject::addChildren();
&gt; 
&gt; can we add these lines in a new method like &quot;addCanvasChildren&quot; and put it below with the other special cases?

Sure, done. I had to modify canHaveChildren also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674058</commentid>
    <comment_count>5</comment_count>
      <attachid>153367</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-07-19 16:43:03 -0700</bug_when>
    <thetext>Comment on attachment 153367
Patch

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

looks good. let&apos;s go for it

&gt; Source/WebCore/accessibility/AccessibilityNodeObject.cpp:294
&gt; +            unsigned length = children.size();

i believe you want size_t for size() calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674171</commentid>
    <comment_count>6</comment_count>
      <attachid>153413</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-19 22:33:09 -0700</bug_when>
    <thetext>Created attachment 153413
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674205</commentid>
    <comment_count>7</comment_count>
      <attachid>153413</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-19 23:06:21 -0700</bug_when>
    <thetext>Comment on attachment 153413
Patch for landing

Clearing flags on attachment: 153413

Committed r123182: &lt;http://trac.webkit.org/changeset/123182&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674207</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-19 23:06:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674569</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 07:50:32 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 91863</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674575</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2012-07-20 08:02:35 -0700</bug_when>
    <thetext>This patch was rolled out in &lt;http://trac.webkit.org/changeset/123219&gt;.

The cause for the rollout were ASSERT crashes in debug builds.  See:

http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r123210%20(1119)/results.html
http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r123210%20(1119)/accessibility/canvas-accessibilitynodeobject-crash-log.txt
http://build.webkit.org/results/Apple%20Lion%20Debug%20WK1%20(Tests)/r123210%20(1119)/accessibility/canvas-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674902</commentid>
    <comment_count>11</comment_count>
      <attachid>153582</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-20 13:27:46 -0700</bug_when>
    <thetext>Created attachment 153582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674906</commentid>
    <comment_count>12</comment_count>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-20 13:28:56 -0700</bug_when>
    <thetext>This latest patch fixes the assertion failure. Sorry, I didn&apos;t check thoroughly enough after making the final changes.

Now I remember why I originally had AccessibilityRenderObject::addChildren call AccessibilityNodeObject::addChildren at the top - because both methods assume m_haveChildren is false initially.

I fixed it by having addCanvasChildren assert there are no children and then reset m_haveChildren to false before calling AccessibilityNodeObject::addChildren. Everything else is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675100</commentid>
    <comment_count>13</comment_count>
      <attachid>153582</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2012-07-20 17:10:04 -0700</bug_when>
    <thetext>Comment on attachment 153582
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3460
&gt; +    if (node() &amp;&amp; node()-&gt;hasTagName(canvasTag)) {

we should re-write this so it uses early return

&gt; Source/WebCore/accessibility/AccessibilityRenderObject.cpp:3465
&gt; +        return;

no need for return statement here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675458</commentid>
    <comment_count>14</comment_count>
      <attachid>153732</attachid>
    <who name="Dominic Mazzoni">dmazzoni</who>
    <bug_when>2012-07-22 23:00:34 -0700</bug_when>
    <thetext>Created attachment 153732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676423</commentid>
    <comment_count>15</comment_count>
      <attachid>153732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 23:26:54 -0700</bug_when>
    <thetext>Comment on attachment 153732
Patch

Clearing flags on attachment: 153732

Committed r123428: &lt;http://trac.webkit.org/changeset/123428&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676425</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 23:27:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>152429</attachid>
            <date>2012-07-14 12:07:43 -0700</date>
            <delta_ts>2012-07-19 16:12:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87899-20120714120741.patch</filename>
            <type>text/plain</type>
            <size>64038</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMSBAQAorMjAxMi0wNy0xNCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3JzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgc28gdGhhdCBpdCBpbmhlcml0cyBmcm9t
IGEgbmV3IGNsYXNzLAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgdGhhdCBjYW4g
YmUgY29uc3RydWN0ZWQgZnJvbSBhIE5vZGUgd2l0aG91dCBhCisgICAgICAgIHJlbmRlcmVyLiBN
b2RpZmllcyBBWE9iamVjdENhY2hlIHNvIHRoYXQgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFu
CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGZvciBlbGVtZW50cyBpbiBhIGNhbnZh
cyBzdWJ0cmVlIGJ1dCBub3Qgb3RoZXJ3aXNlLgorICAgICAgICBBIG5ldyBsYXlvdXQgdGVzdCB2
ZXJpZmllcyB0aGF0IHRoaXMgY29ycmVjdGx5IGV4cG9zZXMgYW4gYWNjZXNzaWJpbGl0eQorICAg
ICAgICB0cmVlIHdpdGggYXBwcm9wcmlhdGUgcm9sZXMgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFz
IHN1YnRyZWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCB0cnkgdG8gY29tcGxldGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LiBN
b3N0IEFYIG1ldGhvZHMgYXJlIHN0aWxsIHVuaW1wbGVtZW50ZWQgYW5kIG5lZWQKKyAgICAgICAg
dG8gYmUgbWlncmF0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHRvIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIG91dHNpZGUgb2Yg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5LCBzbworICAgICAgICB0aGUgcmVzdCBvZiBXZWJDb3JlIG9u
bHkgY2FsbHMgQVhPYmplY3RDYWNoZSB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGEKKyAgICAg
ICAgUmVuZGVyT2JqZWN0LCBub3QgdG8gYSBOb2RlLiBBY2Nlc3NpYmxlIG5vdGlmaWNhdGlvbnMg
b24gbm9kZXMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3Jp
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBB
cmlhUm9sZUR1ZVRvUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlQcm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGls
ZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6
OkFjY2Vzc2liaWxpdHlUYWJsZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlUYWJsZVJvdzo6Y3JlYXRlKToKKwogMjAxMi0wNy0xNCAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEyMjYxNC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjI1NjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDUy
LDYgKzQ1Miw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwLmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tP
YmplY3QuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtMTMxNiw2ICsxMzE2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBv
cHVwLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tP
YmplY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
b2NrT2JqZWN0LmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAx
MjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3QuY3BwIFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBc
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAgXAorICAg
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzkxLDYgKzE3OTEsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0UG9wdXAuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TW9ja09iamVjdC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU1vY2tPYmplY3QuaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTIyNTYzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwyMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXQoCiAgICAgcmV0dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7ICAgIAog
fQogCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG5vZGUtPnJl
bmRlcmVyKCkpCisgICAgICAgIHJldHVybiBnZXQobm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICBB
WElEIGF4SUQgPSBtX25vZGVPYmplY3RNYXBwaW5nLmdldChub2RlKTsKKyAgICBBU1NFUlQoIUhh
c2hUcmFpdHM8QVhJRD46OmlzRGVsZXRlZFZhbHVlKGF4SUQpKTsKKyAgICBpZiAoIWF4SUQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7
Cit9CisKIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IGJlbG9uZ3Mgb24gTm9kZS4KIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB0YWtlIGEgY29uc3QgY2hhciosIGJ1dCBvbmUgY2FsbGVyIHBhc3NlcyBu
dWxsQXRvbS4KIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiByb2xl
KQpAQCAtMjUyLDYgKzI2OCwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNyZWF0ZShyZW5k
ZXJlcik7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0
ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpjcmVhdGUobm9kZSk7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2Fj
aGU6OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0KQpAQCAt
MjczLDcgKzI5NCwzMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRP
CiAgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOwogICAgIHJldHVybiBuZXdPYmouZ2V0
KCk7CiB9Ci0gICAgCisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9y
Q3JlYXRlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQobm9kZSkpCisgICAgICAg
IHJldHVybiBvYmo7CisKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJu
IGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgLy8gSXQncyBvbmx5IGFsbG93
ZWQgdG8gY3JlYXRlIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgZnJvbSBhIE5vZGUgaWYgaXQncyBp
biBhIGNhbnZhcyBzdWJ0cmVlLgorICAgIGlmICghbm9kZS0+cGFyZW50RWxlbWVudCgpIHx8ICFu
b2RlLT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG5ld09iaiA9IGNyZWF0ZUZy
b21Ob2RlKG5vZGUpOworCisgICAgZ2V0QVhJRChuZXdPYmouZ2V0KCkpOworCisgICAgbV9ub2Rl
T2JqZWN0TWFwcGluZy5zZXQobm9kZSwgbmV3T2JqLT5heE9iamVjdElEKCkpOworICAgIG1fb2Jq
ZWN0cy5zZXQobmV3T2JqLT5heE9iamVjdElEKCksIG5ld09iaik7CisgICAgYXR0YWNoV3JhcHBl
cihuZXdPYmouZ2V0KCkpOworICAgIHJldHVybiBuZXdPYmouZ2V0KCk7Cit9CisKIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTM4OCw2ICs0MzQsMjMgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KgogICAgIG1fcmVuZGVyT2JqZWN0TWFw
cGluZy5yZW1vdmUocmVuZGVyZXIpOwogfQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShO
b2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVt
b3ZlTm9kZUZvclVzZShub2RlKTsKKworICAgIGlmIChub2RlLT5yZW5kZXJlcigpKSB7CisgICAg
ICAgIHJlbW92ZShub2RlLT5yZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEFYSUQgYXhJRCA9IG1fbm9kZU9iamVjdE1hcHBpbmcuZ2V0KG5vZGUpOworICAgIHJlbW92
ZShheElEKTsKKyAgICBtX25vZGVPYmplY3RNYXBwaW5nLnJlbW92ZShub2RlKTsKK30KKwogdm9p
ZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQogewogICAgIGlmICghdmlldykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShy
ZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgLy8g
Rm9yIEFYIG9iamVjdHMgd2l0aCBlbGVtZW50cyB0aGF0IGJhY2sgdGhlbS4KICAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBnZXRPckNyZWF0ZShXaWRnZXQqKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBnZXRPckNyZWF0ZShOb2RlKik7CiAKICAgICAvLyB1c2VkIGZvciBvYmplY3RzIHdpdGhvdXQg
YmFja2luZyBlbGVtZW50cwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKEFj
Y2Vzc2liaWxpdHlSb2xlKTsKQEAgLTc3LDggKzc4LDEwIEBAIHB1YmxpYzoKICAgICAvLyB3aWxs
IG9ubHkgcmV0dXJuIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IGlmIGl0IGFscmVhZHkgZXhpc3Rz
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFJlbmRlck9iamVjdCopOwogICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGdldChXaWRnZXQqKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBn
ZXQoTm9kZSopOwogICAgIAogICAgIHZvaWQgcmVtb3ZlKFJlbmRlck9iamVjdCopOworICAgIHZv
aWQgcmVtb3ZlKE5vZGUqKTsKICAgICB2b2lkIHJlbW92ZShXaWRnZXQqKTsKICAgICB2b2lkIHJl
bW92ZShBWElEKTsKIApAQCAtMTgyLDYgKzE4NSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxB
WElELCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPiBtX29iamVjdHM7CiAgICAgSGFzaE1h
cDxSZW5kZXJPYmplY3QqLCBBWElEPiBtX3JlbmRlck9iamVjdE1hcHBpbmc7CiAgICAgSGFzaE1h
cDxXaWRnZXQqLCBBWElEPiBtX3dpZGdldE9iamVjdE1hcHBpbmc7CisgICAgSGFzaE1hcDxOb2Rl
KiwgQVhJRD4gbV9ub2RlT2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRN
YXJrZXJOb2RlczsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAg
c3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpA
QCAtMjA0LDkgKzIwOCwxMSBAQCBpbmxpbmUgQVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZShj
b25zCiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKSB7IH0KIGlubGluZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2VkVUlFbGVtZW50Rm9yUGFn
ZShjb25zdCBQYWdlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IEFYT2JqZWN0Q2FjaGU6OmdldChSZW5kZXJPYmplY3QqKSB7IHJldHVybiAwOyB9CitpbmxpbmUg
QWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KE5vZGUqKSB7IHJldHVybiAw
OyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFdpZGdl
dCopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENh
Y2hlOjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSkgeyByZXR1cm4gMDsgfQogaW5saW5l
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFJlbmRlck9i
amVjdCopIHsgcmV0dXJuIDA7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXRPckNyZWF0ZShOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCopIHsgcmV0dXJu
IDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2Jq
ZWN0KCkgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OnJvb3RPYmplY3RGb3JGcmFtZShGcmFtZSopIHsgcmV0dXJuIDA7IH0KQEAgLTIzMyw2
ICsyMzksNyBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0CiBpbmxp
bmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJp
bGl0eU9iamVjdCosIEFYTm90aWZpY2F0aW9uKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OnJlbW92ZShBWElEKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShS
ZW5kZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShOb2Rl
KikgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KikgeyB9CiBp
bmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpzZWxlY3RlZENoaWxkcmVuQ2hhbmdlZChSZW5kZXJP
YmplY3QqKSB7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAkocmV2aXNpb24gMTIyNTYzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3JpZChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQogICAgIDogQWNjZXNzaWJpbGl0eVRhYmxlKHJlbmRlcmVyKQogeworfQorCitB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQ6On5BY2Nlc3NpYmlsaXR5QVJJQUdyaWQoKQoreworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6aW5pdCgpCit7CisgICAgQWNjZXNzaWJpbGl0eVRh
YmxlOjppbml0KCk7CiAjaWYgQUNDRVNTSUJJTElUWV9UQUJMRVMKICAgICBtX2lzQWNjZXNzaWJp
bGl0eVRhYmxlID0gdHJ1ZTsKICNlbHNlCkBAIC01MCwxMyArNTksMTEgQEAgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpBY2Nlc3NpYmlsaXR5QVJJQQogI2VuZGlmCiB9CiAKLUFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCgpCi17Ci19Ci0KIFBhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eUFSSUFHcmlkPiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmNyZWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eUFSSUFHcmlkKiBvYmogPSBu
ZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6
OmFkZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxp
dHlPYmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkLmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAg
cHJpdmF0ZToKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQ+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5
QVJJQUdyaWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7CiAgICAgCiAgICAgdmlydHVh
bCBib29sIGlzQXJpYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2Vs
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNyArNDgsOSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjp+QWNjZXNz
aWJpbGl0CiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbD4gQWNjZXNzaWJp
bGl0eUFSSUFHcmlkQ2VsbDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsKHJlbmRlcmVyKSk7
CisgICAgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlB
UklBR3JpZENlbGwocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9w
dFJlZihvYmopOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsOjpwYXJlbnRUYWJsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCShyZXZp
c2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDkgQEAgQWNjZXNz
aWJpbGl0eUFSSUFHcmlkUm93Ojp+QWNjZXNzaWJpbGl0eQogCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlBUklBR3JpZFJvdz4gQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpjcmVhdGUoUmVuZGVy
T2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdyhyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdyog
b2JqID0gbmV3IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdyhyZW5kZXJlcik7CisgICAgb2JqLT5p
bml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93Ojppc0FSSUFUcmVlR3JpZFJvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3Bw
CShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0
eUxpc3RCb3hPcHRpb24uY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xz
LmNwcCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAiCiAjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIgpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw5IEBAIEFjY2Vz
c2liaWxpdHlMaXN0Ojp+QWNjZXNzaWJpbGl0eUxpc3QoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlMaXN0PiBBY2Nlc3NpYmlsaXR5TGlzdDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5TGlzdChyZW5kZXJl
cikpOworICAgIEFjY2Vzc2liaWxpdHlMaXN0KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUxpc3Qo
cmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlMaXN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUxpc3RCb3guY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsOSBAQCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6fkFjY2Vzc2liaWxpdHlMaXN0CiAg
ICAgCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlMaXN0Qm94PiBBY2Nlc3NpYmlsaXR5TGlzdEJv
eDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBY2Nlc3NpYmlsaXR5TGlzdEJveChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlM
aXN0Qm94KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUxpc3RCb3gocmVuZGVyZXIpOworICAgIG9i
ai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogICAgIAogYm9vbCBBY2Nl
c3NpYmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNv
bnRyb2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY3LDggKzY3LDExIEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gQWNjZXNzaWIKICAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoKICAgICAgICAgcmV0
dXJuIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjcmVhdGUocmVuZGVyZXIp
OwogCi0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7CisgICAgZGVmYXVsdDogeworICAgICAgICBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bChyZW5kZXJlcik7CisgICAgICAgIG9iai0+aW5pdCgpOworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYob2JqKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjA3LDcgKzIxMCw5IEBAIEFjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpBY2MKIAogUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y3JlYXRl
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihyZW5kZXJlcikpOworICAgIEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHNDb250YWluZXIocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVy
biBhZG9wdFJlZihvYmopOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHND
b250YWluZXI6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0yNTEsNyArMjU2
LDkgQEAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OkFjY2Vzc2liaWxpdAogCiBQYXNzUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVh
dGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFj
Y2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eU1l
ZGlhVGltZWxpbmUqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShyZW5kZXJl
cik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIFN0
cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0
CkBAIC0yODEsNyArMjg4LDkgQEAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OkFjY2Vz
c2liaQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVEaXNwbGF5OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KHJlbmRlcmVyKSk7
CisgICAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXkqIG9iaiA9IG5ldyBBY2Nlc3NpYmls
aXR5TWVkaWFUaW1lRGlzcGxheShyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3Bs
YXk6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAkocmV2
aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5TWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMyBAQCBBY2Nlc3Np
YmlsaXR5TWVudUxpc3Q6OkFjY2Vzc2liaWxpdHlNZW51CiB7CiB9CiAKK1Bhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eU1lbnVMaXN0PiBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZShSZW5kZXJN
ZW51TGlzdCogcmVuZGVyZXIpCit7CisgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KiBvYmogPSBu
ZXcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYob2JqKTsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6
OnByZXNzKCkgY29uc3QKIHsKICAgICBSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJNZW51TGlzdCo+KG1fcmVuZGVyZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oCShyZXZpc2lv
biAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFJlbmRlck1l
bnVMaXN0OwogCiBjbGFzcyBBY2Nlc3NpYmlsaXR5TWVudUxpc3QgOiBwdWJsaWMgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eU1lbnVMaXN0PiBjcmVhdGUoUmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKSB7IHJldHVy
biBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KHJlbmRlcmVyKSk7IH0KKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0ZShSZW5kZXJNZW51
TGlzdCogcmVuZGVyZXIpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHByZXNzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4MiBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
KyogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oIgorI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlMaXN0Qm94LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFt
ZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCisjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZpZWxk
U2V0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWFwRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPcHRp
b25zQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUg
IkxvY2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgorI2luY2x1ZGUg
Ik5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tl
ci5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVu
dHMuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNp
bmNsdWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRl
ci5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKKworQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0KE5vZGUqIG5vZGUpCisgICAgOiBBY2Nlc3NpYmlsaXR5T2JqZWN0KCkKKyAgICAsIG1fbm9k
ZShub2RlKQorICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKKyAgICAsIG1fY2hpbGRyZW5E
aXJ0eShmYWxzZSkKKyAgICAsIG1fcm9sZUZvck1TQUEoVW5rbm93blJvbGUpCit7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp+QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKQoreworICAg
IEFTU0VSVChpc0RldGFjaGVkKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Ojppbml0KCkKK3sKKyAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOwor
fQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0PiBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6Y3JlYXRlKE5vZGUqIG5vZGUpCit7CisgICAgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChub2RlKTsKKyAgICBvYmotPmlu
aXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6ZGV0YWNoKCkKK3sKKyAgICBjbGVhckNoaWxkcmVuKCk7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdDo6ZGV0YWNoKCk7CisgICAgbV9ub2RlID0gMDsKK30KKwordm9pZCBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKCkKK3sKKyAgICAvLyBUaGlzIG1l
dGhvZCBpcyBtZWFudCBhcyBhIHF1aWNrIHdheSBvZiBtYXJraW5nIGEgcG9ydGlvbiBvZiB0aGUg
YWNjZXNzaWJpbGl0eSB0cmVlIGRpcnR5LgorICAgIGlmICghbm9kZSgpICYmICFyZW5kZXJlcigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24odGhpcywgZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhDaGlsZHJlbkNoYW5nZWQsIHRy
dWUpOworCisgICAgLy8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWluLCBidXQg
b25seSBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMKKyAgICAv
LyBjYWxsZWQgZHVyaW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxkIGJlIGRv
bmUuIAorICAgIC8vIElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBjb3VsZCBp
bnRlcnJvZ2F0ZSB0aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0YXRlLgor
ICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBjaGFuZ2Vz
LgorICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFyZW50OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKKyAgICAgICAgcGFyZW50
LT5zZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKTsKKworICAgICAgICAvLyBUaGVzZSBub3RpZmlj
YXRpb25zIGFsd2F5cyBuZWVkIHRvIGJlIHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJzIGFyZSBy
ZWxpYW50IG9uIHRoZW0gdG8gcGVyZm9ybS4gCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCB0
aGV5IG5lZWQgdG8gYmUgc2VudCBldmVuIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzIG5vdCBh
Y2Nlc3NlZCB0aGlzIGxpdmUgcmVnaW9uIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KKworICAgICAg
ICAvLyBJZiB0aGlzIGVsZW1lbnQgc3VwcG9ydHMgQVJJQSBsaXZlIHJlZ2lvbnMsIHRoZW4gbm90
aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgorICAgICAgICBpZiAocGFyZW50LT5zdXBwb3J0c0FSSUFM
aXZlUmVnaW9uKCkpCisgICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRp
b24ocGFyZW50LCBwYXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTGl2ZVJlZ2lv
bkNoYW5nZWQsIHRydWUpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlz
IGFuIEFSSUEgdGV4dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCisgICAgICAg
IGlmIChwYXJlbnQtPmlzQVJJQVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+aXNOYXRpdmVUZXh0
Q29udHJvbCgpICYmICFwYXJlbnQtPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAg
ICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBwYXJlbnQt
PmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKKyAgICB9
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnVwZGF0ZUFjY2Vzc2liaWxpdHlS
b2xlKCkKK3sKKyAgICBib29sIGlnbm9yZWRTdGF0dXMgPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCk7CisgICAgbV9yb2xlID0gZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKKyAgICAKKyAg
ICAvLyBUaGUgQVggaGllcmFyY2h5IG9ubHkgbmVlZHMgdG8gYmUgdXBkYXRlZCBpZiB0aGUgaWdu
b3JlZCBzdGF0dXMgb2YgYW4gZWxlbWVudCBoYXMgY2hhbmdlZC4KKyAgICBpZiAoaWdub3JlZFN0
YXR1cyAhPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgIGNoaWxkcmVuQ2hhbmdl
ZCgpOworfQorICAgIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmZpcnN0Q2hpbGQoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICAKKyAgICBOb2RlKiBmaXJzdENoaWxkID0gbm9kZSgpLT5maXJzdENoaWxkKCk7
CisKKyAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJl
dHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZpcnN0Q2hpbGQpOworfQorCitBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKCkgY29u
c3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgTm9k
ZSogbGFzdENoaWxkID0gbm9kZSgpLT5sYXN0Q2hpbGQoKTsKKyAgICBpZiAoIWxhc3RDaGlsZCkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0
T3JDcmVhdGUobGFzdENoaWxkKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnByZXZpb3VzU2libGluZygpIGNvbnN0Cit7CisgICAgaWYgKCFub2Rl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9k
ZSgpLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBpZiAoIXByZXZpb3VzU2libGluZykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShw
cmV2aW91c1NpYmxpbmcpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZSgpLT5uZXh0U2li
bGluZygpOworICAgIGlmICghbmV4dFNpYmxpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOworfQorICAg
IAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhcmVudE9i
amVjdElmRXhpc3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyZW50T2JqZWN0KCk7Cit9Cisg
ICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50
T2JqZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBOb2RlKiBwYXJlbnRPYmogPSBub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFy
ZW50T2JqKQorICAgICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShwYXJl
bnRPYmopOworICAgIAorICAgIHJldHVybiAwOworfQorCitMYXlvdXRSZWN0IEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0OjplbGVtZW50UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJvdW5kaW5n
Qm94UmVjdCgpOworfQorCitEb2N1bWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRvY3Vt
ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG5vZGUoKS0+ZG9jdW1lbnQoKTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKK3sKKyAgICBp
ZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOworCisgICAgbV9hcmlhUm9s
ZSA9IGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0
eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9sZUF0dHJpYnV0ZSgpOworICAgIGlmIChhcmlhUm9sZSAh
PSBVbmtub3duUm9sZSkKKyAgICAgICAgcmV0dXJuIGFyaWFSb2xlOworCisgICAgaWYgKG5vZGUo
KS0+aXNMaW5rKCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlTGlua1JvbGU7CisgICAgaWYgKG5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gU3RhdGljVGV4dFJvbGU7CisgICAg
aWYgKG5vZGUoKS0+aGFzVGFnTmFtZShidXR0b25UYWcpKQorICAgICAgICByZXR1cm4gYXJpYUhh
c1BvcHVwKCkgPyBQb3BVcEJ1dHRvblJvbGUgOiBCdXR0b25Sb2xlOworICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIGlmIChp
bnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKKyAg
ICAgICAgaWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm4gUmFk
aW9CdXR0b25Sb2xlOworICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIGFyaWFIYXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9s
ZTsKKyAgICAgICAgcmV0dXJuIFRleHRGaWVsZFJvbGU7CisgICAgfQorICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0RWxlbWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IHNlbGVjdEVsZW1lbnQtPm11bHRpcGxlKCkgPyBMaXN0Um9sZSA6IFBvcFVwQnV0dG9uUm9sZTsK
KyAgICB9CisgICAgaWYgKG5vZGUoKS0+aXNGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIEdy
b3VwUm9sZTsKKyAgICAKKyAgICByZXR1cm4gVW5rbm93blJvbGU7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKCkKK3sKKyAgICAvLyBJZiB0aGUgbmVlZCB0
byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlz
ZXMsIAorICAgIC8vIGNoaWxkcmVuQ2hhbmdlZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgbGVh
dmluZyB0aGUgb2JqZWN0IHdpdGggbm8gY2hpbGRyZW4uCisgICAgQVNTRVJUKCFtX2hhdmVDaGls
ZHJlbik7IAorICAgIAorICAgIGlmICghbV9ub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgb25seSB0aW1lIHdlIGFkZCBjaGlsZHJlbiBmcm9tIHRoZSBET00gdHJlZSB0byBhIG5v
ZGUgd2l0aCBhIHJlbmRlcmVyIGlzIHdoZW4gaXQncyBhIGNhbnZhcy4KKyAgICBpZiAocmVuZGVy
ZXIoKSAmJiAhbV9ub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CisKKyAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gbV9ub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVu
KCk7CisgICAgICAgIGlmIChvYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gb2JqLT5jaGlsZHJl
bigpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVjdCgpID09IHRoaXMpOworICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcm9sZSA9PSBVbmtub3duUm9sZTsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIE5v
ZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisKKyAgICBpZiAoaXNXZWJBcmVhKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1vcmUgYWNjdXJh
dGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZvY3VzZWROb2RlKCkgd291bGQKKyAg
ICAvLyBkbyBhbnl0aGluZy4gRm9yIGV4YW1wbGUsIHNldEZvY3VzZWROb2RlKCkgd2lsbCBkbyBu
b3RoaW5nIGlmIHRoZSBjdXJyZW50IGZvY3VzZWQKKyAgICAvLyBub2RlIHdpbGwgbm90IHJlbGlu
cXVpc2ggdGhlIGZvY3VzLgorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gbm9kZS0+c3VwcG9ydHNGb2N1cygpOworfQorCitBY2Nlc3NpYmlsaXR5Um9s
ZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBj
b25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYVJvbGUgPSBnZXRBdHRyaWJ1dGUo
cm9sZUF0dHIpOworICAgIGlmIChhcmlhUm9sZS5pc051bGwoKSB8fCBhcmlhUm9sZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBVbmtub3duUm9sZTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlID0gYXJpYVJvbGVUb1dlYkNvcmVSb2xlKGFyaWFSb2xlKTsKKworICAgIC8vIEFS
SUEgc3RhdGVzIGlmIGFuIGl0ZW0gY2FuIGdldCBmb2N1cywgaXQgc2hvdWxkIG5vdCBiZSBwcmVz
ZW50YXRpb25hbC4KKyAgICBpZiAocm9sZSA9PSBQcmVzZW50YXRpb25hbFJvbGUgJiYgY2FuU2V0
Rm9jdXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOworICAgIAorICAg
IGlmIChyb2xlID09IEJ1dHRvblJvbGUgJiYgYXJpYUhhc1BvcHVwKCkpCisgICAgICAgIHJvbGUg
PSBQb3BVcEJ1dHRvblJvbGU7CisKKyAgICBpZiAocm9sZSA9PSBUZXh0QXJlYVJvbGUgJiYgIWFy
aWFJc011bHRpbGluZSgpKQorICAgICAgICByb2xlID0gVGV4dEZpZWxkUm9sZTsKKworICAgIHJv
bGUgPSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQocm9sZSk7CisgICAgCisgICAgaWYgKHJvbGUp
CisgICAgICAgIHJldHVybiByb2xlOworCisgICAgcmV0dXJuIFVua25vd25Sb2xlOworfQorCitB
Y2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYVJvbGVBdHRyaWJ1
dGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FyaWFSb2xlOworfQorCitBY2Nlc3NpYmlsaXR5
Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlhUm9sZUR1ZVRvUGFyZW50KEFj
Y2Vzc2liaWxpdHlSb2xlIHJvbGUpIGNvbnN0Cit7CisgICAgLy8gU29tZSBvYmplY3RzIGNoYW5n
ZSB0aGVpciByb2xlIGJhc2VkIG9uIHRoZWlyIHBhcmVudC4KKyAgICAvLyBIb3dldmVyLCBhc2tp
bmcgZm9yIHRoZSB1bmlnbm9yZWRQYXJlbnQgY2FsbHMgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
LCB3aGljaCBjYW4gdHJpZ2dlciBhIGxvb3AuIAorICAgIC8vIFdoaWxlIGluc2lkZSB0aGUgY2Fs
bCBzdGFjayBvZiBjcmVhdGluZyBhbiBlbGVtZW50LCB3ZSBuZWVkIHRvIGF2b2lkIGFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjUxNzQKKworICAgIGlmIChyb2xlICE9IExpc3RCb3hPcHRpb25Sb2xlICYmIHJv
bGUgIT0gTWVudUl0ZW1Sb2xlKQorICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAKKyAgICBmb3Ig
KEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQgJiYg
IXBhcmVudC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudEFyaWFSb2xlID0g
cGFyZW50LT5hcmlhUm9sZUF0dHJpYnV0ZSgpOworCisgICAgICAgIC8vIFNlbGVjdHMgYW5kIGxp
c3Rib3hlcyBib3RoIGhhdmUgb3B0aW9ucyBhcyBjaGlsZCByb2xlcywgYnV0IHRoZXkgbWFwIHRv
IGRpZmZlcmVudCByb2xlcyB3aXRoaW4gV2ViQ29yZS4KKyAgICAgICAgaWYgKHJvbGUgPT0gTGlz
dEJveE9wdGlvblJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gTWVudVJvbGUpCisgICAgICAgICAg
ICByZXR1cm4gTWVudUl0ZW1Sb2xlOworICAgICAgICAvLyBBbiBhcmlhICJtZW51aXRlbSIgbWF5
IG1hcCB0byBNZW51QnV0dG9uIG9yIE1lbnVJdGVtIGRlcGVuZGluZyBvbiBpdHMgcGFyZW50Lgor
ICAgICAgICBpZiAocm9sZSA9PSBNZW51SXRlbVJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gR3Jv
dXBSb2xlKQorICAgICAgICAgICAgcmV0dXJuIE1lbnVCdXR0b25Sb2xlOworICAgICAgICAKKyAg
ICAgICAgLy8gSWYgdGhlIHBhcmVudCBoYWQgYSBkaWZmZXJlbnQgcm9sZSwgdGhlbiB3ZSBkb24n
dCBuZWVkIHRvIGNvbnRpbnVlIHNlYXJjaGluZyB1cCB0aGUgY2hhaW4uCisgICAgICAgIGlmIChw
YXJlbnRBcmlhUm9sZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcm9sZTsKK30gICAKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0X2gKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFzcyBFbGVtZW50OworY2xh
c3MgRnJhbWU7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3Mg
SFRNTEFuY2hvckVsZW1lbnQ7CitjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1MRWxl
bWVudDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CitjbGFzcyBIVE1MTWFwRWxlbWVudDsKK2Ns
YXNzIEhUTUxTZWxlY3RFbGVtZW50OworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlckxpc3RCb3g7CitjbGFzcyBSZW5kZXJUZXh0Q29udHJv
bDsKK2NsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworY2xhc3MgV2lk
Z2V0OworICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QgOiBwdWJsaWMgQWNjZXNz
aWJpbGl0eU9iamVjdCB7Citwcm90ZWN0ZWQ6CisgICAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qo
Tm9kZSopOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0PiBjcmVhdGUoTm9kZSopOworICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworICAgIAorICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCBib29sIGNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNvbnN0OworICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdDsKKworICAg
IHZpcnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIHZpcnR1
YWwgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNo
KCk7CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOworICAgIHZvaWQgdXBkYXRl
QWNjZXNzaWJpbGl0eVJvbGUoKTsKKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50UmVj
dCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgTm9kZSogbV9ub2RlOworICAgIEFjY2Vzc2li
aWxpdHlSb2xlIG1fYXJpYVJvbGU7CisgICAgYm9vbCBtX2NoaWxkcmVuRGlydHk7CisgICAgbXV0
YWJsZSBBY2Nlc3NpYmlsaXR5Um9sZSBtX3JvbGVGb3JNU0FBOworCisgICAgdmlydHVhbCBib29s
IGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9ub2RlOyB9CisKKyAgICB2aXJ0dWFsIEFj
Y2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7CisgICAgdmlydHVh
bCB2b2lkIGFkZENoaWxkcmVuKCk7CisgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSBjb25zdDsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgp
IGNvbnN0OworICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRl
KCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcmVtYXBBcmlhUm9sZUR1ZVRvUGFyZW50
KEFjY2Vzc2liaWxpdHlSb2xlKSBjb25zdDsKK307CisKK2lubGluZSBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdCogdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdCo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dCogdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBv
YmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdCo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9p
bmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChj
b25zdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCopOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHJl
dmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3LDcgQEAgcHVibGljOgog
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID4gQWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yOwogICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gICAgCiAgICAgdmlydHVh
bCBib29sIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNh
dG9yLmNwcAkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw5IEBAIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcjo6QWNjZXNzaWIKIAog
UGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I+IEFjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKFJlbmRlclByb2dyZXNzKiByZW5kZXJlcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcihyZW5k
ZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvciogb2JqID0gbmV3IEFj
Y2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcihyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTMsMTQgKzkzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotICAgIDogQWNjZXNzaWJpbGl0eU9iamVjdCgp
CisgICAgOiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChyZW5kZXJlci0+bm9kZSgpKQogICAgICwg
bV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAsIG1fYXJpYVJvbGUoVW5rbm93blJvbGUpCi0gICAg
LCBtX2NoaWxkcmVuRGlydHkoZmFsc2UpCi0gICAgLCBtX3JvbGVGb3JNU0FBKFVua25vd25Sb2xl
KQogewotICAgIG1fcm9sZSA9IGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7Ci0KICNpZm5k
ZWYgTkRFQlVHCiAgICAgbV9yZW5kZXJlci0+c2V0SGFzQVhPYmplY3QodHJ1ZSk7CiAjZW5kaWYK
QEAgLTExMSwyMSArMTA2LDI3IEBAIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6On5BY2Nlc3Np
YmlsaXQKICAgICBBU1NFUlQoaXNEZXRhY2hlZCgpKTsKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0Ojppbml0KCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aW5p
dCgpOworfQorCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q+IEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChyZW5kZXJlcikp
OworICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYob2JqKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRhY2go
KQogewotICAgIGNsZWFyQ2hpbGRyZW4oKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRh
Y2goKTsKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0YWNoKCk7CiAgICAgCiAjaWZu
ZGVmIE5ERUJVRwogICAgIGlmIChtX3JlbmRlcmVyKQogICAgICAgICBtX3JlbmRlcmVyLT5zZXRI
YXNBWE9iamVjdChmYWxzZSk7CiAjZW5kaWYKLSAgICBtX3JlbmRlcmVyID0gMDsgICAgCisgICAg
bV9yZW5kZXJlciA9IDA7CiB9CiAKIFJlbmRlckJveE1vZGVsT2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpyZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0CkBAIC0xMzUsNiArMTM2
LDEyIEBAIFJlbmRlckJveE1vZGVsT2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGUKICAgICByZXR1
cm4gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKTsKIH0KIAordm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
eworICAgIG1fcmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBtX25vZGUgPSByZW5kZXJlci0+bm9k
ZSgpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVXaXRoQ29udGludWF0aW9uKFJl
bmRlck9iamVjdCogb2JqZWN0KQogewogICAgIGlmICghb2JqZWN0LT5pc0JveE1vZGVsT2JqZWN0
KCkpCkBAIC0zMDYxLDc1ICszMDY4LDYgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJp
bGl0eVJlbmRlcgogICAgIHJldHVybiAwOwogfQogCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpyZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQoQWNjZXNzaWJpbGl0
eVJvbGUgcm9sZSkgY29uc3QKLXsKLSAgICAvLyBTb21lIG9iamVjdHMgY2hhbmdlIHRoZWlyIHJv
bGUgYmFzZWQgb24gdGhlaXIgcGFyZW50LgotICAgIC8vIEhvd2V2ZXIsIGFza2luZyBmb3IgdGhl
IHVuaWdub3JlZFBhcmVudCBjYWxscyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCksIHdoaWNoIGNh
biB0cmlnZ2VyIGEgbG9vcC4gCi0gICAgLy8gV2hpbGUgaW5zaWRlIHRoZSBjYWxsIHN0YWNrIG9m
IGNyZWF0aW5nIGFuIGVsZW1lbnQsIHdlIG5lZWQgdG8gYXZvaWQgYWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NTE3NAotCi0gICAgaWYgKHJvbGUgIT0gTGlzdEJveE9wdGlvblJvbGUgJiYgcm9sZSAhPSBNZW51
SXRlbVJvbGUpCi0gICAgICAgIHJldHVybiByb2xlOwotICAgIAotICAgIGZvciAoQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudCAmJiAhcGFyZW50LT5h
Y2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkp
IHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcGFyZW50QXJpYVJvbGUgPSBwYXJlbnQtPmFy
aWFSb2xlQXR0cmlidXRlKCk7Ci0KLSAgICAgICAgLy8gU2VsZWN0cyBhbmQgbGlzdGJveGVzIGJv
dGggaGF2ZSBvcHRpb25zIGFzIGNoaWxkIHJvbGVzLCBidXQgdGhleSBtYXAgdG8gZGlmZmVyZW50
IHJvbGVzIHdpdGhpbiBXZWJDb3JlLgotICAgICAgICBpZiAocm9sZSA9PSBMaXN0Qm94T3B0aW9u
Um9sZSAmJiBwYXJlbnRBcmlhUm9sZSA9PSBNZW51Um9sZSkKLSAgICAgICAgICAgIHJldHVybiBN
ZW51SXRlbVJvbGU7Ci0gICAgICAgIC8vIEFuIGFyaWEgIm1lbnVpdGVtIiBtYXkgbWFwIHRvIE1l
bnVCdXR0b24gb3IgTWVudUl0ZW0gZGVwZW5kaW5nIG9uIGl0cyBwYXJlbnQuCi0gICAgICAgIGlm
IChyb2xlID09IE1lbnVJdGVtUm9sZSAmJiBwYXJlbnRBcmlhUm9sZSA9PSBHcm91cFJvbGUpCi0g
ICAgICAgICAgICByZXR1cm4gTWVudUJ1dHRvblJvbGU7Ci0gICAgICAgIAotICAgICAgICAvLyBJ
ZiB0aGUgcGFyZW50IGhhZCBhIGRpZmZlcmVudCByb2xlLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8g
Y29udGludWUgc2VhcmNoaW5nIHVwIHRoZSBjaGFpbi4KLSAgICAgICAgaWYgKHBhcmVudEFyaWFS
b2xlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHJldHVybiByb2xlOwot
fQotICAgIAotQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGV0
ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdAotewotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgYXJpYVJvbGUgPSBnZXRBdHRyaWJ1dGUocm9sZUF0dHIpOwotICAgIGlmIChhcmlhUm9sZS5p
c051bGwoKSB8fCBhcmlhUm9sZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBVbmtub3duUm9s
ZTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXJpYVJvbGVUb1dlYkNvcmVS
b2xlKGFyaWFSb2xlKTsKLQotICAgIC8vIEFSSUEgc3RhdGVzIGlmIGFuIGl0ZW0gY2FuIGdldCBm
b2N1cywgaXQgc2hvdWxkIG5vdCBiZSBwcmVzZW50YXRpb25hbC4KLSAgICBpZiAocm9sZSA9PSBQ
cmVzZW50YXRpb25hbFJvbGUgJiYgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKLSAgICAgICAgcmV0
dXJuIFVua25vd25Sb2xlOwotICAgIAotICAgIGlmIChyb2xlID09IEJ1dHRvblJvbGUgJiYgYXJp
YUhhc1BvcHVwKCkpCi0gICAgICAgIHJvbGUgPSBQb3BVcEJ1dHRvblJvbGU7Ci0KLSAgICBpZiAo
cm9sZSA9PSBUZXh0QXJlYVJvbGUgJiYgIWFyaWFJc011bHRpbGluZSgpKQotICAgICAgICByb2xl
ID0gVGV4dEZpZWxkUm9sZTsKLQotICAgIHJvbGUgPSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQo
cm9sZSk7Ci0gICAgCi0gICAgaWYgKHJvbGUpCi0gICAgICAgIHJldHVybiByb2xlOwotCi0gICAg
cmV0dXJuIFVua25vd25Sb2xlOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
YXJpYVJvbGU7Ci19Ci0gICAgCi12b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnVwZGF0
ZUFjY2Vzc2liaWxpdHlSb2xlKCkKLXsKLSAgICBib29sIGlnbm9yZWRTdGF0dXMgPSBhY2Nlc3Np
YmlsaXR5SXNJZ25vcmVkKCk7Ci0gICAgbV9yb2xlID0gZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJv
bGUoKTsKLSAgICAKLSAgICAvLyBUaGUgQVggaGllcmFyY2h5IG9ubHkgbmVlZHMgdG8gYmUgdXBk
YXRlZCBpZiB0aGUgaWdub3JlZCBzdGF0dXMgb2YgYW4gZWxlbWVudCBoYXMgY2hhbmdlZC4KLSAg
ICBpZiAoaWdub3JlZFN0YXR1cyAhPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAg
IGNoaWxkcmVuQ2hhbmdlZCgpOwotfQotICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBhcmVudCA9IG1fcmVuZGVyZXIt
PnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50KCkpIHsKQEAgLTMzNjYs
MjUgKzMzMDQsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFSb2xlCiAg
ICAgfQogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhblNldEZvY3VzQXR0
cmlidXRlKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwotCi0gICAg
aWYgKGlzV2ViQXJlYSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICAvLyBOT1RF
OiBJdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIHRvIGFzayB0aGUgZG9jdW1lbnQgd2hldGhlciBz
ZXRGb2N1c2VkTm9kZSgpIHdvdWxkCi0gICAgLy8gZG8gYW55dGhpbmcuICBGb3IgZXhhbXBsZSwg
c2V0Rm9jdXNlZE5vZGUoKSB3aWxsIGRvIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQgZm9jdXNlZAot
ICAgIC8vIG5vZGUgd2lsbCBub3QgcmVsaW5xdWlzaCB0aGUgZm9jdXMuCi0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgp
ICYmICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRW5hYmxlZEZvcm1Db250cm9sKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBub2RlLT5zdXBwb3J0c0ZvY3Vz
KCk7Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhblNldEV4cGFu
ZGVkQXR0cmlidXRlKCkgY29uc3QKIHsKICAgICAvLyBBbiBvYmplY3QgY2FuIGJlIGV4cGFuZGVk
IGlmIGl0IGFyaWEtZXhwYW5kZWQgaXMgdHJ1ZSBvciBmYWxzZS4KQEAgLTM0MzEsMzQgKzMzNTAs
NiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbnRlbnRDCiAgICAgfQogfQog
ICAgIAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKQot
ewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IGFzIGEgcXVpY2sgd2F5IG9mIG1hcmtpbmcg
YSBwb3J0aW9uIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZGlydHkuCi0gICAgaWYgKCFtX3Jl
bmRlcmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3Rp
ZmljYXRpb24odGhpcywgZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhDaGlsZHJlbkNoYW5n
ZWQsIHRydWUpOwotCi0gICAgLy8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWlu
LCBidXQgb25seSBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMK
LSAgICAvLyBjYWxsZWQgZHVyaW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxk
IGJlIGRvbmUuIAotICAgIC8vIElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBj
b3VsZCBpbnRlcnJvZ2F0ZSB0aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0
YXRlLgotICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBj
aGFuZ2VzLgotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFy
ZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKLSAgICAgICAg
cGFyZW50LT5zZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBUaGVzZSBu
b3RpZmljYXRpb25zIGFsd2F5cyBuZWVkIHRvIGJlIHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJz
IGFyZSByZWxpYW50IG9uIHRoZW0gdG8gcGVyZm9ybS4gCi0gICAgICAgIC8vIEluIG90aGVyIHdv
cmRzLCB0aGV5IG5lZWQgdG8gYmUgc2VudCBldmVuIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFz
IG5vdCBhY2Nlc3NlZCB0aGlzIGxpdmUgcmVnaW9uIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KLQot
ICAgICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgc3VwcG9ydHMgQVJJQSBsaXZlIHJlZ2lvbnMsIHRo
ZW4gbm90aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5zdXBwb3J0
c0FSSUFMaXZlUmVnaW9uKCkpCi0gICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3Rp
ZmljYXRpb24ocGFyZW50LCBwYXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTGl2
ZVJlZ2lvbkNoYW5nZWQsIHRydWUpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhpcyBlbGVt
ZW50IGlzIGFuIEFSSUEgdGV4dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCi0g
ICAgICAgIGlmIChwYXJlbnQtPmlzQVJJQVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+aXNOYXRp
dmVUZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkp
Ci0gICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBw
YXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsK
LSAgICB9Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQpAQCAtMzU3MiwxMCArMzQ2
MywxMiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgLy8g
SWYgdGhlIG5lZWQgdG8gYWRkIG1vcmUgY2hpbGRyZW4gaW4gYWRkaXRpb24gdG8gZXhpc3Rpbmcg
Y2hpbGRyZW4gYXJpc2VzLCAKICAgICAvLyBjaGlsZHJlbkNoYW5nZWQgc2hvdWxkIGhhdmUgYmVl
biBjYWxsZWQsIGxlYXZpbmcgdGhlIG9iamVjdCB3aXRoIG5vIGNoaWxkcmVuLgogICAgIEFTU0VS
VCghbV9oYXZlQ2hpbGRyZW4pOyAKLSAgICAKLSAgICAvLyBub3RoaW5nIHRvIGFkZCBpZiB0aGVy
ZSBpcyBubyBSZW5kZXJPYmplY3QKLSAgICBpZiAoIW1fcmVuZGVyZXIpCisKKyAgICAvLyBJZiBp
dCdzIGEgY2FudmFzLCBpdCB3b24ndCBoYXZlIHJlbmRlcmVkIGNoaWxkcmVuLCBidXQgaXQgbWln
aHQgaGF2ZSBhY2Nlc3NpYmxlIGZhbGxiYWNrIGNvbnRlbnQuCisgICAgaWYgKG5vZGUoKSAmJiBu
b2RlKCktPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6YWRkQ2hpbGRyZW4oKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAg
ICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAgICAgCkBAIC0zNTg0LDcgKzM0NzcsNiBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgCiAgICAgLy8gYWRkIGFs
bCB1bmlnbm9yZWQgYWNjIGNoaWxkcmVuCiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkg
ewotICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBpcyBhc2tpbmcgZm9yIHRoaXMg
Y2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIgaXQncyB0aGUgZmlyc3QgdGltZSAoYW5kIGNs
ZWFyaW5nIGlzIGEgbm8tb3ApLCAKICAgICAgICAgLy8gb3IgaXRzIHZpc2liaWxpdHkgaGFzIGNo
YW5nZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBjaGlsZCBtYXkgaGF2ZSBhIHN0YWxlIGNo
aWxkIGNhY2hlZC4gCiAgICAgICAgIC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4gY2hh
bmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQgaXMg
Z2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90IHN0YWxlLgpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaWZuZGVmIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3RfaAogI2RlZmluZSBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0X2gKIAotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3Qu
aCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oIgogI2luY2x1ZGUgIkxheW91
dFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBj
bGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGNsYXNzIFdpZGdldDsK
ICAgICAKLWNsYXNzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgOiBwdWJsaWMgQWNjZXNzaWJp
bGl0eU9iamVjdCB7CitjbGFzcyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IDogcHVibGljIEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0IHsKIHByb3RlY3RlZDoKICAgICBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0KFJlbmRlck9iamVjdCopOwogcHVibGljOgpAQCAtNjMsNiArNjMsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpOwogICAgIAogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOwogICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBpc0FuY2hvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0F0dGFjaG1lbnQoKSBj
b25zdDsKQEAgLTExMSw3ICsxMTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1Nh
bWVTdHlsZShSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaGFzVW5kZXJs
aW5lKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0OwpAQCAtMTQ5LDEwICsx
NTAsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYXJpYU93bnNFbGVtZW50cyhBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNBUklBT3ducygpIGNvbnN0OwotICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJv
bGVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNQcmVzZW50YXRpb25hbENo
aWxkT2ZBcmlhUm9sZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhcmlhUm9sZUhhc1ByZXNl
bnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdDsKLSAgICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlS
b2xlKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIGJlIGNhbGxlZCBvbiB0aGUgcm9vdCBhY2Nlc3Np
YmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhpdCB0ZXN0LgogICAgIHZpcnR1YWwgQWNjZXNz
aWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhpdFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKQEAgLTE2OCwxNCArMTY3LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFJlY3Qg
ZWxlbWVudFJlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNsaWNrUG9pbnQoKTsK
ICAgICAKLSAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9y
ZW5kZXJlciA9IHJlbmRlcmVyOyB9CisgICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3Qq
KTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBt
X3JlbmRlcmVyOyB9CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2Jq
ZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2RlKiBub2RlKCkgY29uc3Q7CiAKKyAgICB2aXJ0
dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworCiAgICAgUmVuZGVyVmlldyogdG9wUmVu
ZGVyZXIoKSBjb25zdDsKICAgICBSZW5kZXJUZXh0Q29udHJvbCogdGV4dENvbnRyb2woKSBjb25z
dDsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKICAgICBGcmFtZVZpZXcqIHRvcERv
Y3VtZW50RnJhbWVWaWV3KCkgY29uc3Q7ICAKICAgICBEb2N1bWVudCogdG9wRG9jdW1lbnQoKSBj
b25zdDsKICAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbEVsZW1lbnRDb250YWluZXIoKSBjb25z
dDsKQEAgLTIxNCw3ICsyMTQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVu
dCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAg
ICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCk7CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0OwpAQCAtMjYwLDggKzI1OSw2IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVk
OgogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJlcjsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBt
X2FyaWFSb2xlOwotICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5OwogICAgIAogICAgIHZvaWQgc2V0
UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRl
cmVyOyB9CiAgICAgdm9pZCBhcmlhTGFiZWxlZEJ5RWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiYg
ZWxlbWVudHMpIGNvbnN0OwpAQCAtMjcxLDYgKzI2OCw4IEBAIHByb3RlY3RlZDoKICAgICAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNEZXRhY2hlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3JlbmRlcmVyOyB9
CiAKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlS
b2xlKCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBhcmlhTGlzdGJveFNlbGVjdGVkQ2hpbGRyZW4o
QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CiAgICAgdm9pZCBhcmlhTGlzdGJveFZpc2li
bGVDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsKQEAgLTI4Niw5ICsyODUs
NiBAQCBwcml2YXRlOgogCiAgICAgRWxlbWVudCogbWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkg
Y29uc3Q7CiAgICAgRWxlbWVudCogbWVudUl0ZW1FbGVtZW50Rm9yTWVudSgpIGNvbnN0OwotICAg
IEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7Ci0gICAgQWNj
ZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQoQWNjZXNzaWJpbGl0eVJv
bGUpIGNvbnN0OwogCiAgICAgYm9vbCBpc1RhYkl0ZW1TZWxlY3RlZCgpIGNvbnN0OwogICAgIHZv
aWQgYWx0ZXJTbGlkZXJWYWx1ZShib29sIGluY3JlYXNlKTsKQEAgLTMyNyw4ICszMjMsNiBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhcmlhTGl2ZVJlZ2lvbkJ1c3koKSBjb25zdDsgICAg
CiAgICAgCiAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0OwotICAg
IAotICAgIG11dGFibGUgQWNjZXNzaWJpbGl0eVJvbGUgbV9yb2xlRm9yTVNBQTsKIH07CiAKIGlu
bGluZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiB0b0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCShyZXZpc2lvbiAx
MjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw5IEBAIEFjY2Vzc2liaWxpdHlTbGlk
ZXI6OkFjY2Vzc2liaWxpdHlTbGlkZXIKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5U2xpZGVy
PiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpKTsK
KyAgICBBY2Nlc3NpYmlsaXR5U2xpZGVyKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eVNsaWRlcihy
ZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9
CiAKIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpvcmllbnRh
dGlvbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDE1IEBAIEFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxl
KFIKICAgICA6IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVyZXIpLAogICAgIG1faGVh
ZGVyQ29udGFpbmVyKDApCiB7Cit9CisKK0FjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxp
dHlUYWJsZSgpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KCkKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCk7CiAjaWYgQUNDRVNTSUJJTElUWV9U
QUJMRVMKICAgICBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlID0gaXNUYWJsZUV4cG9zYWJsZVRocm91
Z2hBY2Nlc3NpYmlsaXR5KCk7CiAjZWxzZQpAQCAtNTgsMTMgKzY3LDExIEBAIEFjY2Vzc2liaWxp
dHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxlKFIKICNlbmRpZgogfQogCi1BY2Nlc3NpYmlsaXR5
VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUoKQotewotfQotCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlUYWJsZT4gQWNjZXNzaWJpbGl0eVRhYmxlOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlUYWJsZShyZW5k
ZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlUYWJsZSogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlU
YWJsZShyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9i
aik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjpoYXNBUklBUm9sZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZT4gY3JlYXRlKFJl
bmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlUYWJsZSgpOwogCisgICAg
dmlydHVhbCB2b2lkIGluaXQoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlU
YWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDkgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6fkFjY2Vzc2liaWxpdHlUYQog
CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+IEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGwqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKHJlbmRlcmVyKTsK
KyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsOSBAQCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6On5BY2Nlc3NpYmlsaXR5VGFiCiAKIFBh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlUm93PiBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmNy
ZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QWNjZXNzaWJpbGl0eVRhYmxlUm93KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxl
Um93KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eVRhYmxlUm93KHJlbmRlcmVyKTsKKyAgICBvYmot
PmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogQWNjZXNzaWJpbGl0eVJv
bGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojpyb2xlVmFsdWUoKSBjb25zdApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTIyNjY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTItMDctMTQgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25pQGdv
b2dsZS5jb20+CisKKyAgICAgICAgQVg6IE5lZWQgQWNjZXNzaWJpbGl0eU9iamVjdHMgZm9yIG5v
ZGVzIHdpdGhvdXQgcmVuZGVyZXJzIGluIGNhbnZhcyBzdWJ0cmVlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg5OQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IHRlc3QgYWRkcyBhIGJ1bmNo
IG9mIGVsZW1lbnRzIHRvIGEgbm9ybWFsIGNvbnRhaW5lciBhbmQgdGhlIHNhbWUgZWxlbWVudHMg
dG8KKyAgICAgICAgYSBjYW52YXMgc3VidHJlZSwgdGhlbiBpdCBpdGVyYXRlcyBvdmVyIGFsbCBv
ZiB0aGUgYWNjZXNzaWJsZSBvYmplY3RzIHdpdGhpbiBlYWNoCisgICAgICAgIGNvbnRhaW5lciBh
bmQgbWFrZXMgc3VyZSB0aGV5IGhhdmUgaWRlbnRpY2FsIHJvbGVzLiBCZWNhdXNlIHdlIGtub3cg
dGhlIG5vZGVzIGluIHRoZQorICAgICAgICBjYW52YXMgc3VidHJlZSBkb24ndCBoYXZlIHJlbmRl
cmVycywgdGhpcyBzdWNjZXNzZnVsbHkgdGVzdHMgdGhhdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dHMKKyAgICAgICAgYXJlIGdldHRpbmcgY3JlYXRlZCBmb3IgdGhlc2Ugbm9kZXMuCisKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxp
dHlub2Rlb2JqZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTE0ICBBbGxhbiBTYW5kZmVsZCBK
ZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFtUZXN0c10gVW5za2lw
IG5vdCBmYWlsaW5nIHRlc3RzIHByZXZpb3VzbHkgcmVseWluZyBvbiBMVEM6Om5vZGVzRnJvbVJl
Y3QgaW1wbGVtZW50YXRpb24gCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52
YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIwIEBACitMaW5rICBCdXR0b24gICAgICAgICAgIEFSSUEgYnV0dG9uIEFSSUEgbGlu
aworVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdHMgYXJl
IGNyZWF0ZWQgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFzIHN1YnRyZWUuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIGF4UmVuZGVyT2JqZWN0cy5sZW5ndGggaXMgYXhOb2Rl
T2JqZWN0cy5sZW5ndGgKK1BBU1MgaSA9PSAwOyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9k
ZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAxOyBheFJlbmRlck9iamVjdC5yb2xlID09
IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAyOyBheFJlbmRlck9iamVjdC5y
b2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAzOyBheFJlbmRlck9i
amVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSA0OyBheFJl
bmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSA1
OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1Mg
aSA9PSA2OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUK
K1BBU1MgaSA9PSA3OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlz
IHRydWUKK1BBU1MgaSA9PSA4OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5y
b2xlIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2Nh
bnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNz
aWJpbGl0eW5vZGVvYmplY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAorPCFE
T0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0ibXlDb250YWluZXIi
IHRhYmluZGV4PSItMSI+CisgIDxhIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24+QnV0dG9u
PC9idXR0b24+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KKyAgPGlucHV0IHR5cGU9ImNoZWNrYm94
Ij4KKyAgPGlucHV0IHR5cGU9InJhZGlvIj4KKyAgPGlucHV0IHR5cGU9InN1Ym1pdCI+CisgIDxz
ZWxlY3Q+PG9wdGlvbj4xPG9wdGlvbj4yPC9zZWxlY3Q+CisgIDxzcGFuIHRhYmluZGV4PSIwIiBy
b2xlPSJidXR0b24iPkFSSUEgYnV0dG9uPC9zcGFuPgorICA8c3BhbiB0YWJpbmRleD0iMCIgcm9s
ZT0ibGluayI+QVJJQSBsaW5rPC9zcGFuPgorPC9kaXY+CisKKzxjYW52YXMgaWQ9Im15Q2FudmFz
IiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdGFiaW5kZXg9Ii0xIj4KKyAgPGEgaHJlZj0iIyI+
TGluazwvYT4KKyAgPGJ1dHRvbj5CdXR0b248L2J1dHRvbj4KKyAgPGlucHV0IHR5cGU9InRleHQi
PgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giPgorICA8aW5wdXQgdHlwZT0icmFkaW8iPgorICA8
aW5wdXQgdHlwZT0ic3VibWl0Ij4KKyAgPHNlbGVjdD48b3B0aW9uPjE8b3B0aW9uPjI8L3NlbGVj
dD4KKyAgPHNwYW4gdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiI+QVJJQSBidXR0b248L3NwYW4+
CisgIDxzcGFuIHRhYmluZGV4PSIwIiByb2xlPSJsaW5rIj5BUklBIGxpbms8L3NwYW4+Cis8L2Nh
bnZhcz4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
IlRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzIGFyZSBj
cmVhdGVkIGZvciBlbGVtZW50cyBpbiBhIGNhbnZhcyBzdWJ0cmVlLiIpOworCitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikg
eworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICBm
dW5jdGlvbiBhcHBlbmRGb2N1c2FibGVEZXNjZW5kYW50cyhheE9iamVjdCwgYXhGb2N1c2FibGVM
aXN0KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhPYmplY3QuY2hpbGRyZW5Db3Vu
dDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXhDaGlsZCA9IGF4T2JqZWN0LmNoaWxkQXRJbmRl
eChpKTsKKyAgICAgICAgICAgIGlmIChheENoaWxkLmlzRm9jdXNhYmxlKQorICAgICAgICAgICAg
ICAgIGF4Rm9jdXNhYmxlTGlzdC5wdXNoKGF4Q2hpbGQpOworICAgICAgICAgICAgYXBwZW5kRm9j
dXNhYmxlRGVzY2VuZGFudHMoYXhDaGlsZCwgYXhGb2N1c2FibGVMaXN0KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlD
b250YWluZXIiKTsKKyAgICBjb250YWluZXIuZm9jdXMoKTsKKyAgICB2YXIgYXhDb250YWluZXIg
PSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgIHZhciBjYW52
YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlDYW52YXMiKTsKKyAgICBjYW52YXMuZm9j
dXMoKTsKKyAgICB2YXIgYXhDYW52YXMgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudDsKKworICAgIHZhciBheFJlbmRlck9iamVjdHMgPSBbXTsKKyAgICB2YXIgYXhOb2Rl
T2JqZWN0cyA9IFtdOworCisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMoYXhDb250YWlu
ZXIsIGF4UmVuZGVyT2JqZWN0cyk7CisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMoYXhD
YW52YXMsIGF4Tm9kZU9iamVjdHMpOworCisgICAgc2hvdWxkQmUoImF4UmVuZGVyT2JqZWN0cy5s
ZW5ndGgiLCAiYXhOb2RlT2JqZWN0cy5sZW5ndGgiKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXhSZW5kZXJPYmplY3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBheFJlbmRlck9i
amVjdCA9IGF4UmVuZGVyT2JqZWN0c1tpXTsKKyAgICAgICAgdmFyIGF4Tm9kZU9iamVjdCA9IGF4
Tm9kZU9iamVjdHNbaV07CisgICAgICAgIHNob3VsZEJlKCJpID09ICIgKyBpICsgIjsgYXhSZW5k
ZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSIsICJ0cnVlIik7CisgICAgfQorfQor
Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVj
dC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKQWRk
ZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153367</attachid>
            <date>2012-07-19 16:12:23 -0700</date>
            <delta_ts>2012-07-19 22:32:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87899-20120719161223.patch</filename>
            <type>text/plain</type>
            <size>65352</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMjY2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMSBAQAorMjAxMi0wNy0xNCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3JzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgc28gdGhhdCBpdCBpbmhlcml0cyBmcm9t
IGEgbmV3IGNsYXNzLAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgdGhhdCBjYW4g
YmUgY29uc3RydWN0ZWQgZnJvbSBhIE5vZGUgd2l0aG91dCBhCisgICAgICAgIHJlbmRlcmVyLiBN
b2RpZmllcyBBWE9iamVjdENhY2hlIHNvIHRoYXQgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFu
CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGZvciBlbGVtZW50cyBpbiBhIGNhbnZh
cyBzdWJ0cmVlIGJ1dCBub3Qgb3RoZXJ3aXNlLgorICAgICAgICBBIG5ldyBsYXlvdXQgdGVzdCB2
ZXJpZmllcyB0aGF0IHRoaXMgY29ycmVjdGx5IGV4cG9zZXMgYW4gYWNjZXNzaWJpbGl0eQorICAg
ICAgICB0cmVlIHdpdGggYXBwcm9wcmlhdGUgcm9sZXMgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFz
IHN1YnRyZWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCB0cnkgdG8gY29tcGxldGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LiBN
b3N0IEFYIG1ldGhvZHMgYXJlIHN0aWxsIHVuaW1wbGVtZW50ZWQgYW5kIG5lZWQKKyAgICAgICAg
dG8gYmUgbWlncmF0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHRvIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIG91dHNpZGUgb2Yg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5LCBzbworICAgICAgICB0aGUgcmVzdCBvZiBXZWJDb3JlIG9u
bHkgY2FsbHMgQVhPYmplY3RDYWNoZSB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGEKKyAgICAg
ICAgUmVuZGVyT2JqZWN0LCBub3QgdG8gYSBOb2RlLiBBY2Nlc3NpYmxlIG5vdGlmaWNhdGlvbnMg
b24gbm9kZXMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3Jp
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBB
cmlhUm9sZUR1ZVRvUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlQcm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGls
ZHJlbik6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KToKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVNsaWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6
OkFjY2Vzc2liaWxpdHlUYWJsZSk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlUYWJsZVJvdzo6Y3JlYXRlKToKKwogMjAxMi0wNy0xNCAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEyMjYxNC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjI1NjMp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDUy
LDYgKzQ1Miw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlNZW51TGlzdFBvcHVwLmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tP
YmplY3QuY3BwCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCiAgICAgYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkod29ya2luZyBjb3B5KQpAQCAtMTMxNiw2ICsxMzE2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBv
cHVwLmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tP
YmplY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
b2NrT2JqZWN0LmggXAorCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAx
MjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC01
Miw2ICs1Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3QuY3BwIFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBc
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAgXAorICAg
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgXAogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNp
b24gMTIyNTYzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC0xNzkxLDYgKzE3OTEsOCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU1lbnVMaXN0UG9wdXAuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TW9ja09iamVjdC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU1vY2tPYmplY3QuaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTIyNTYzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg4LDYgKzE4OCwyMyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXQoCiAgICAgcmV0dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7ICAgIAog
fQogCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWx3YXlzIHBy
ZWZlciBidWlsZGluZyB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBmcm9tIHRoZSByZW5kZXJlciBp
ZiB0aGVyZSBpcyBvbmUuCisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVy
biBnZXQobm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICBBWElEIGF4SUQgPSBtX25vZGVPYmplY3RN
YXBwaW5nLmdldChub2RlKTsKKyAgICBBU1NFUlQoIUhhc2hUcmFpdHM8QVhJRD46OmlzRGVsZXRl
ZFZhbHVlKGF4SUQpKTsKKyAgICBpZiAoIWF4SUQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7Cit9CisKIC8vIEZJWE1FOiBUaGlzIHBy
b2JhYmx5IGJlbG9uZ3Mgb24gTm9kZS4KIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0YWtlIGEgY29u
c3QgY2hhciosIGJ1dCBvbmUgY2FsbGVyIHBhc3NlcyBudWxsQXRvbS4KIGJvb2wgbm9kZUhhc1Jv
bGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiByb2xlKQpAQCAtMjUyLDYgKzI2OSwxMSBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmNyZWF0ZShyZW5kZXJlcik7CiB9CiAKK3N0YXRpYyBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNyZWF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCit7
CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUobm9kZSk7Cit9CisK
IEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCog
d2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0KQpAQCAtMjczLDcgKzI5NSwzMiBAQCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPCiAgICAgYXR0YWNoV3JhcHBlcihuZXdP
YmouZ2V0KCkpOwogICAgIHJldHVybiBuZXdPYmouZ2V0KCk7CiB9Ci0gICAgCisKK0FjY2Vzc2li
aWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5vZGUqIG5vZGUpCit7Cisg
ICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBvYmogPSBnZXQobm9kZSkpCisgICAgICAgIHJldHVybiBvYmo7CisKKyAgICBpZiAo
bm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRl
cmVyKCkpOworCisgICAgLy8gSXQncyBvbmx5IGFsbG93ZWQgdG8gY3JlYXRlIGFuIEFjY2Vzc2li
aWxpdHlPYmplY3QgZnJvbSBhIE5vZGUgaWYgaXQncyBpbiBhIGNhbnZhcyBzdWJ0cmVlLgorICAg
IGlmICghbm9kZS0+cGFyZW50RWxlbWVudCgpIHx8ICFub2RlLT5wYXJlbnRFbGVtZW50KCktPmlz
SW5DYW52YXNTdWJ0cmVlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3Q+IG5ld09iaiA9IGNyZWF0ZUZyb21Ob2RlKG5vZGUpOworCisgICAgZ2V0
QVhJRChuZXdPYmouZ2V0KCkpOworCisgICAgbV9ub2RlT2JqZWN0TWFwcGluZy5zZXQobm9kZSwg
bmV3T2JqLT5heE9iamVjdElEKCkpOworICAgIG1fb2JqZWN0cy5zZXQobmV3T2JqLT5heE9iamVj
dElEKCksIG5ld09iaik7CisgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAgIHJl
dHVybiBuZXdPYmouZ2V0KCk7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2Fj
aGU6OmdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5k
ZXJlcikKQEAgLTM4OCw2ICs0MzUsMjQgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoUmVu
ZGVyT2JqZWN0KgogICAgIG1fcmVuZGVyT2JqZWN0TWFwcGluZy5yZW1vdmUocmVuZGVyZXIpOwog
fQogCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShOb2RlKiBub2RlKQoreworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVtb3ZlTm9kZUZvclVzZShub2RlKTsKKwor
ICAgIC8vIFRoaXMgaXMgYWxsIHNhZmUgZXZlbiBpZiB3ZSBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcu
CisgICAgQVhJRCBheElEID0gbV9ub2RlT2JqZWN0TWFwcGluZy5nZXQobm9kZSk7CisgICAgcmVt
b3ZlKGF4SUQpOworICAgIG1fbm9kZU9iamVjdE1hcHBpbmcucmVtb3ZlKG5vZGUpOworCisgICAg
aWYgKG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgcmVtb3ZlKG5vZGUtPnJlbmRlcmVyKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92
ZShXaWRnZXQqIHZpZXcpCiB7CiAgICAgaWYgKCF2aWV3KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw2ICs3MCw3IEBAIHB1YmxpYzoKICAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVs
ZW1lbnRzIHRoYXQgYmFjayB0aGVtLgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3Jl
YXRlKFJlbmRlck9iamVjdCopOwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRl
KFdpZGdldCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUqKTsK
IAogICAgIC8vIHVzZWQgZm9yIG9iamVjdHMgd2l0aG91dCBiYWNraW5nIGVsZW1lbnRzCiAgICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwpAQCAt
NzcsOCArNzgsMTAgQEAgcHVibGljOgogICAgIC8vIHdpbGwgb25seSByZXR1cm4gdGhlIEFjY2Vz
c2liaWxpdHlPYmplY3QgaWYgaXQgYWxyZWFkeSBleGlzdHMKICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBnZXQoUmVuZGVyT2JqZWN0Kik7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFdp
ZGdldCopOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChOb2RlKik7CiAgICAgCiAgICAg
dm9pZCByZW1vdmUoUmVuZGVyT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmUoTm9kZSopOwogICAg
IHZvaWQgcmVtb3ZlKFdpZGdldCopOwogICAgIHZvaWQgcmVtb3ZlKEFYSUQpOwogCkBAIC0xODIs
NiArMTg1LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiA+IG1fb2JqZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+
IG1fcmVuZGVyT2JqZWN0TWFwcGluZzsKICAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lk
Z2V0T2JqZWN0TWFwcGluZzsKKyAgICBIYXNoTWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RN
YXBwaW5nOwogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOwogICAgIHN0YXRp
YyBib29sIGdBY2Nlc3NpYmlsaXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJp
bGl0eUVuaGFuY2VkVXNlckludGVyZmFjZUVuYWJsZWQ7CkBAIC0yMDQsOSArMjA4LDExIEBAIGlu
bGluZSBBWE9iamVjdENhY2hlOjpBWE9iamVjdENhY2hlKGNvbnMKIGlubGluZSBBWE9iamVjdENh
Y2hlOjp+QVhPYmplY3RDYWNoZSgpIHsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmZvY3VzZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKSB7IHJldHVy
biAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFJl
bmRlck9iamVjdCopIHsgcmV0dXJuIDA7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
WE9iamVjdENhY2hlOjpnZXQoTm9kZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoV2lkZ2V0KikgeyByZXR1cm4gMDsgfQogaW5s
aW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKEFjY2Vz
c2liaWxpdHlSb2xlKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCog
QVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gMDsgfQor
aW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5v
ZGUqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RD
YWNoZTo6Z2V0T3JDcmVhdGUoV2lkZ2V0KikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2li
aWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OnJvb3RPYmplY3QoKSB7IHJldHVybiAwOyB9CiBp
bmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6cm9vdE9iamVjdEZvckZy
YW1lKEZyYW1lKikgeyByZXR1cm4gMDsgfQpAQCAtMjMzLDYgKzIzOSw3IEBAIGlubGluZSB2b2lk
IEFYT2JqZWN0Q2FjaGU6OnBvc3ROb3RpZmljYXQKIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmlj
YXRpb24pIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKEFYSUQpIHsgfQog
aW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCopIHsgfQoraW5s
aW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFY
T2JqZWN0Q2FjaGU6OnJlbW92ZShXaWRnZXQqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2Fj
aGU6OnNlbGVjdGVkQ2hpbGRyZW5DaGFuZ2VkKFJlbmRlck9iamVjdCopIHsgfQogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5QVJJQUdyaWQuY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDYgKzQzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6
QWNjZXNzaWJpbGl0eUFSSUFHcmlkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgOiBBY2Nl
c3NpYmlsaXR5VGFibGUocmVuZGVyZXIpCiB7Cit9CisKK0FjY2Vzc2liaWxpdHlBUklBR3JpZDo6
fkFjY2Vzc2liaWxpdHlBUklBR3JpZCgpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkOjppbml0KCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGU6OmluaXQoKTsKICNpZiBBQ0NF
U1NJQklMSVRZX1RBQkxFUwogICAgIG1faXNBY2Nlc3NpYmlsaXR5VGFibGUgPSB0cnVlOwogI2Vs
c2UKQEAgLTUwLDEzICs1OSwxMSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxp
dHlBUklBCiAjZW5kaWYKIH0KIAotQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjp+QWNjZXNzaWJpbGl0
eUFSSUFHcmlkKCkKLXsKLX0KLQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ+IEFj
Y2Vzc2liaWxpdHlBUklBR3JpZDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQocmVuZGVyZXIpKTsK
KyAgICBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdy
aWQocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmop
OwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0
eU9iamVjdCogY2hpbGQsIEhhc2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJv
d3MsIHVuc2lnbmVkJiBjb2x1bW5Db3VudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkocmV2aXNpb24gMTIyNTYz
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBwcml2YXRlOgogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3JpZD4gY3JlYXRlKFJlbmRlck9i
amVjdCopOwogICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlBUklBR3JpZCgpOworCisgICAgdmly
dHVhbCB2b2lkIGluaXQoKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBcmlhVGFibGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9ICAgIAogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3Bw
CShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlBUklBR3JpZENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw5IEBA
IEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6On5BY2Nlc3NpYmlsaXQKIAogUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsPiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVh
dGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFj
Y2Vzc2liaWxpdHlBUklBR3JpZENlbGwocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRDZWxsKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbChyZW5kZXJlcik7
CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIEFjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OnBhcmVudFRhYmxlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6On5B
Y2Nlc3NpYmlsaXR5CiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PiBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRSb3c6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KHJlbmRlcmVy
KSk7CisgICAgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0
eUFSSUFHcmlkUm93KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmlzQVJJQVRy
ZWVHcmlkUm93KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFsbEluT25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlM
aXN0Qm94LmNwcCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAiCiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmNwcCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5U2Nyb2xsVmlldy5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmNwcAkocmV2aXNpb24gMTIyNTYzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDkgQEAgQWNjZXNzaWJpbGl0eUxpc3Q6On5BY2Nlc3Np
YmlsaXR5TGlzdCgpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUxpc3Q+IEFjY2Vzc2liaWxp
dHlMaXN0OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEFjY2Vzc2liaWxpdHlMaXN0KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0
eUxpc3QqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TGlzdChyZW5kZXJlcik7CisgICAgb2JqLT5p
bml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eUxpc3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHJl
dmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw5IEBAIEFjY2Vzc2li
aWxpdHlMaXN0Qm94Ojp+QWNjZXNzaWJpbGl0eUxpc3QKICAgICAKIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eUxpc3RCb3g+IEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUoUmVuZGVyT2JqZWN0
KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlMaXN0
Qm94KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIG9iaiA9IG5ldyBBY2Nl
c3NpYmlsaXR5TGlzdEJveChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG9iaik7CiB9CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjYW5T
ZXRTZWxlY3RlZENoaWxkcmVuQXR0cmlidXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJv
bHMuY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCAr
NjcsMTEgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3NpYgogICAgIGNh
c2UgTWVkaWFDb250cm9sc1BhbmVsOgogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHNDb250YWluZXI6OmNyZWF0ZShyZW5kZXJlcik7CiAKLSAgICBkZWZhdWx0OgotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVuZGVy
ZXIpKTsKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wq
IG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKTsKKyAgICAgICAg
b2JqLT5pbml0KCk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihvYmopOworICAgICAgICB9CiAg
ICAgfQogfQogCkBAIC0yMDcsNyArMjEwLDkgQEAgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHND
b250YWluZXI6OkFjYwogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xz
Q29udGFpbmVyKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250
YWluZXIqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihyZW5k
ZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAK
IFN0cmluZyBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0
eURlc2NyaXB0aW9uKCkgY29uc3QKQEAgLTI1MSw3ICsyNTYsOSBAQCBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lbGluZTo6QWNjZXNzaWJpbGl0CiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxp
bmUocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZSogb2JqID0gbmV3
IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lOjp2YWx1ZURlc2NyaXB0aW9uKCkgY29uc3QKQEAgLTI4MSw3ICsyODgsOSBAQCBB
Y2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6QWNjZXNzaWJpCiAKIFBhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OmNyZWF0ZShS
ZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNz
aWJpbGl0eU1lZGlhVGltZURpc3BsYXkocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lRGlzcGxheSogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KHJl
bmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0K
IAogYm9vbCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDEzIEBAIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6QWNjZXNz
aWJpbGl0eU1lbnUKIHsKIH0KIAorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IEFj
Y2Vzc2liaWxpdHlNZW51TGlzdDo6Y3JlYXRlKFJlbmRlck1lbnVMaXN0KiByZW5kZXJlcikKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5TWVudUxpc3QqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVudUxp
c3QocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmop
OworfQorCiBib29sIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6cHJlc3MoKSBjb25zdAogewogICAg
IFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4o
bV9yZW5kZXJlcik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAKIGNsYXNzIEFjY2Vz
c2liaWxpdHlNZW51TGlzdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0
ZShSZW5kZXJNZW51TGlzdCogcmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3Np
YmlsaXR5TWVudUxpc3QocmVuZGVyZXIpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlNZW51TGlzdD4gY3JlYXRlKFJlbmRlck1lbnVMaXN0KiByZW5kZXJlcik7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb2xsYXBzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcHJl
c3MoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzg3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
aCIKKworI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
SW1hZ2VNYXBMaW5rLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5U3BpbkJ1dHRvbi5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlU
YWJsZS5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1M
QXJlYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIK
KyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGVnZW5k
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxP
cHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNp
bmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgor
I2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAiVGV4dC5o
IgorI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgorI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgi
CisjaW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3Vu
aWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoTm9kZSogbm9kZSkKKyAgICA6
IEFjY2Vzc2liaWxpdHlPYmplY3QoKQorICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKKyAg
ICAsIG1fY2hpbGRyZW5EaXJ0eShmYWxzZSkKKyAgICAsIG1fcm9sZUZvck1TQUEoVW5rbm93blJv
bGUpCisgICAgLCBtX25vZGUobm9kZSkKK3sKK30KKworQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
On5BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpCit7CisgICAgQVNTRVJUKGlzRGV0YWNoZWQoKSk7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmluaXQoKQoreworICAgIG1fcm9s
ZSA9IGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q+IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUoTm9kZSog
bm9kZSkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCogb2JqID0gbmV3IEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KG5vZGUpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9w
dFJlZihvYmopOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2goKQor
eworICAgIGNsZWFyQ2hpbGRyZW4oKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2go
KTsKKyAgICBtX25vZGUgPSAwOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpj
aGlsZHJlbkNoYW5nZWQoKQoreworICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IGFzIGEgcXVp
Y2sgd2F5IG9mIG1hcmtpbmcgYSBwb3J0aW9uIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZGly
dHkuCisgICAgaWYgKCFub2RlKCkgJiYgIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBkb2N1bWVudCgpLCBB
WE9iamVjdENhY2hlOjpBWENoaWxkcmVuQ2hhbmdlZCwgdHJ1ZSk7CisKKyAgICAvLyBHbyB1cCB0
aGUgYWNjZXNzaWJpbGl0eSBwYXJlbnQgY2hhaW4sIGJ1dCBvbmx5IGlmIHRoZSBlbGVtZW50IGFs
cmVhZHkgZXhpc3RzLiBUaGlzIG1ldGhvZCBpcworICAgIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVy
IGxheW91dHMsIG1pbmltYWwgd29yayBzaG91bGQgYmUgZG9uZS4gCisgICAgLy8gSWYgQVggZWxl
bWVudHMgYXJlIGNyZWF0ZWQgbm93LCB0aGV5IGNvdWxkIGludGVycm9nYXRlIHRoZSByZW5kZXIg
dHJlZSB3aGlsZSBpdCdzIGluIGEgZnVua3kgc3RhdGUuCisgICAgLy8gQXQgdGhlIHNhbWUgdGlt
ZSwgcHJvY2VzcyBBUklBIGxpdmUgcmVnaW9uIGNoYW5nZXMuCisgICAgZm9yIChBY2Nlc3NpYmls
aXR5T2JqZWN0KiBwYXJlbnQgPSB0aGlzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50
T2JqZWN0SWZFeGlzdHMoKSkgeworICAgICAgICBwYXJlbnQtPnNldE5lZWRzVG9VcGRhdGVDaGls
ZHJlbigpOworCisgICAgICAgIC8vIFRoZXNlIG5vdGlmaWNhdGlvbnMgYWx3YXlzIG5lZWQgdG8g
YmUgc2VudCBiZWNhdXNlIHNjcmVlbnJlYWRlcnMgYXJlIHJlbGlhbnQgb24gdGhlbSB0byBwZXJm
b3JtLiAKKyAgICAgICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZXkgbmVlZCB0byBiZSBzZW50IGV2
ZW4gd2hlbiB0aGUgc2NyZWVuIHJlYWRlciBoYXMgbm90IGFjY2Vzc2VkIHRoaXMgbGl2ZSByZWdp
b24gc2luY2UgdGhlIGxhc3QgdXBkYXRlLgorCisgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBz
dXBwb3J0cyBBUklBIGxpdmUgcmVnaW9ucywgdGhlbiBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMu
CisgICAgICAgIGlmIChwYXJlbnQtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKKyAgICAgICAg
ICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9j
dW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZCwgdHJ1ZSk7CisgICAg
ICAgIAorICAgICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMgYW4gQVJJQSB0ZXh0IGNvbnRyb2ws
IG5vdGlmeSB0aGUgQVQgb2YgY2hhbmdlcy4KKyAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4
dENvbnRyb2woKSAmJiAhcGFyZW50LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+
bm9kZSgpLT5yZW5kZXJlcklzRWRpdGFibGUoKSkKKyAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RD
YWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6dXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKQoreworICAgIGJvb2wgaWdu
b3JlZFN0YXR1cyA9IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsKKyAgICBtX3JvbGUgPSBkZXRl
cm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOworICAgIAorICAgIC8vIFRoZSBBWCBoaWVyYXJjaHkg
b25seSBuZWVkcyB0byBiZSB1cGRhdGVkIGlmIHRoZSBpZ25vcmVkIHN0YXR1cyBvZiBhbiBlbGVt
ZW50IGhhcyBjaGFuZ2VkLgorICAgIGlmIChpZ25vcmVkU3RhdHVzICE9IGFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKSkKKyAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKCk7Cit9CisgICAgCitBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFub2RlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIE5vZGUq
IGZpcnN0Q2hpbGQgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsKKworICAgIGlmICghZmlyc3RDaGls
ZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUoZmlyc3RDaGlsZCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpsYXN0Q2hpbGQoKSBjb25zdAoreworICAgIGlmICghbm9kZSgp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBOb2RlKiBsYXN0Q2hpbGQgPSBub2RlKCkt
Pmxhc3RDaGlsZCgpOworICAgIGlmICghbGFzdENoaWxkKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQpOwor
fQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cHJldmlv
dXNTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlKCktPnByZXZpb3VzU2libGluZygp
OworICAgIGlmICghcHJldmlvdXNTaWJsaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHByZXZpb3VzU2libGluZyk7Cit9CisK
K0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpuZXh0U2libGlu
ZygpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Tm9kZSogbmV4dFNpYmxpbmcgPSBub2RlKCktPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFuZXh0
U2libGluZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShuZXh0U2libGluZyk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdAor
eworICAgIHJldHVybiBwYXJlbnRPYmplY3QoKTsKK30KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3QoKSBjb25zdAoreworICAg
IGlmICghbm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIHBhcmVudE9iaiA9
IG5vZGUoKS0+cGFyZW50Tm9kZSgpOworICAgIGlmIChwYXJlbnRPYmopCisgICAgICAgIHJldHVy
biBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHBhcmVudE9iaik7CisgICAgCisgICAgcmV0
dXJuIDA7Cit9CisKK0xheW91dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmVsZW1lbnRS
ZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7Cit9CisKK3ZvaWQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnNldE5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBtX25v
ZGUgPSBub2RlOworfQorCitEb2N1bWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRvY3Vt
ZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG5vZGUoKS0+ZG9jdW1lbnQoKTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKK3sKKyAgICBp
ZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOworCisgICAgbV9hcmlhUm9s
ZSA9IGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0
eVJvbGUgYXJpYVJvbGUgPSBhcmlhUm9sZUF0dHJpYnV0ZSgpOworICAgIGlmIChhcmlhUm9sZSAh
PSBVbmtub3duUm9sZSkKKyAgICAgICAgcmV0dXJuIGFyaWFSb2xlOworCisgICAgaWYgKG5vZGUo
KS0+aXNMaW5rKCkpCisgICAgICAgIHJldHVybiBXZWJDb3JlTGlua1JvbGU7CisgICAgaWYgKG5v
ZGUoKS0+aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gU3RhdGljVGV4dFJvbGU7CisgICAg
aWYgKG5vZGUoKS0+aGFzVGFnTmFtZShidXR0b25UYWcpKQorICAgICAgICByZXR1cm4gYXJpYUhh
c1BvcHVwKCkgPyBQb3BVcEJ1dHRvblJvbGUgOiBCdXR0b25Sb2xlOworICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIGlmIChp
bnB1dC0+aXNDaGVja2JveCgpKQorICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKKyAg
ICAgICAgaWYgKGlucHV0LT5pc1JhZGlvQnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm4gUmFk
aW9CdXR0b25Sb2xlOworICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIGFyaWFIYXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9s
ZTsKKyAgICAgICAgcmV0dXJuIFRleHRGaWVsZFJvbGU7CisgICAgfQorICAgIGlmIChub2RlKCkt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2Vs
ZWN0RWxlbWVudCA9IHRvSFRNTFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJu
IHNlbGVjdEVsZW1lbnQtPm11bHRpcGxlKCkgPyBMaXN0Um9sZSA6IFBvcFVwQnV0dG9uUm9sZTsK
KyAgICB9CisgICAgaWYgKG5vZGUoKS0+aXNGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIEdy
b3VwUm9sZTsKKyAgICAKKyAgICByZXR1cm4gVW5rbm93blJvbGU7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKCkKK3sKKyAgICAvLyBJZiB0aGUgbmVlZCB0
byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlz
ZXMsIAorICAgIC8vIGNoaWxkcmVuQ2hhbmdlZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgbGVh
dmluZyB0aGUgb2JqZWN0IHdpdGggbm8gY2hpbGRyZW4uCisgICAgQVNTRVJUKCFtX2hhdmVDaGls
ZHJlbik7IAorICAgIAorICAgIGlmICghbV9ub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBUaGUgb25seSB0aW1lIHdlIGFkZCBjaGlsZHJlbiBmcm9tIHRoZSBET00gdHJlZSB0byBhIG5v
ZGUgd2l0aCBhIHJlbmRlcmVyIGlzIHdoZW4gaXQncyBhIGNhbnZhcy4KKyAgICBpZiAocmVuZGVy
ZXIoKSAmJiAhbV9ub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CisKKyAgICBmb3IgKE5vZGUqIGNoaWxk
ID0gbV9ub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpKSB7CisgICAgICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBheE9iamVj
dENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVu
KCk7CisgICAgICAgIGlmIChvYmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAg
ICAgICAgQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gb2JqLT5jaGlsZHJl
bigpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAg
ICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ldKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVjdCgpID09IHRoaXMpOworICAgICAg
ICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcm9sZSA9PSBVbmtub3duUm9sZTsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIE5v
ZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisKKyAgICBpZiAoaXNXZWJBcmVhKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1vcmUgYWNjdXJh
dGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZvY3VzZWROb2RlKCkgd291bGQKKyAg
ICAvLyBkbyBhbnl0aGluZy4gRm9yIGV4YW1wbGUsIHNldEZvY3VzZWROb2RlKCkgd2lsbCBkbyBu
b3RoaW5nIGlmIHRoZSBjdXJyZW50IGZvY3VzZWQKKyAgICAvLyBub2RlIHdpbGwgbm90IHJlbGlu
cXVpc2ggdGhlIGZvY3VzLgorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gbm9kZS0+c3VwcG9ydHNGb2N1cygpOworfQorCitBY2Nlc3NpYmlsaXR5Um9s
ZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBj
b25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYVJvbGUgPSBnZXRBdHRyaWJ1dGUo
cm9sZUF0dHIpOworICAgIGlmIChhcmlhUm9sZS5pc051bGwoKSB8fCBhcmlhUm9sZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBVbmtub3duUm9sZTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5
Um9sZSByb2xlID0gYXJpYVJvbGVUb1dlYkNvcmVSb2xlKGFyaWFSb2xlKTsKKworICAgIC8vIEFS
SUEgc3RhdGVzIGlmIGFuIGl0ZW0gY2FuIGdldCBmb2N1cywgaXQgc2hvdWxkIG5vdCBiZSBwcmVz
ZW50YXRpb25hbC4KKyAgICBpZiAocm9sZSA9PSBQcmVzZW50YXRpb25hbFJvbGUgJiYgY2FuU2V0
Rm9jdXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOworICAgIAorICAg
IGlmIChyb2xlID09IEJ1dHRvblJvbGUgJiYgYXJpYUhhc1BvcHVwKCkpCisgICAgICAgIHJvbGUg
PSBQb3BVcEJ1dHRvblJvbGU7CisKKyAgICBpZiAocm9sZSA9PSBUZXh0QXJlYVJvbGUgJiYgIWFy
aWFJc011bHRpbGluZSgpKQorICAgICAgICByb2xlID0gVGV4dEZpZWxkUm9sZTsKKworICAgIHJv
bGUgPSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQocm9sZSk7CisgICAgCisgICAgaWYgKHJvbGUp
CisgICAgICAgIHJldHVybiByb2xlOworCisgICAgcmV0dXJuIFVua25vd25Sb2xlOworfQorCitB
Y2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YXJpYVJvbGVBdHRyaWJ1
dGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FyaWFSb2xlOworfQorCitBY2Nlc3NpYmlsaXR5
Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlhUm9sZUR1ZVRvUGFyZW50KEFj
Y2Vzc2liaWxpdHlSb2xlIHJvbGUpIGNvbnN0Cit7CisgICAgLy8gU29tZSBvYmplY3RzIGNoYW5n
ZSB0aGVpciByb2xlIGJhc2VkIG9uIHRoZWlyIHBhcmVudC4KKyAgICAvLyBIb3dldmVyLCBhc2tp
bmcgZm9yIHRoZSB1bmlnbm9yZWRQYXJlbnQgY2FsbHMgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgp
LCB3aGljaCBjYW4gdHJpZ2dlciBhIGxvb3AuIAorICAgIC8vIFdoaWxlIGluc2lkZSB0aGUgY2Fs
bCBzdGFjayBvZiBjcmVhdGluZyBhbiBlbGVtZW50LCB3ZSBuZWVkIHRvIGF2b2lkIGFjY2Vzc2li
aWxpdHlJc0lnbm9yZWQoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjUxNzQKKworICAgIGlmIChyb2xlICE9IExpc3RCb3hPcHRpb25Sb2xlICYmIHJv
bGUgIT0gTWVudUl0ZW1Sb2xlKQorICAgICAgICByZXR1cm4gcm9sZTsKKyAgICAKKyAgICBmb3Ig
KEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJlbnQgJiYg
IXBhcmVudC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dE9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudEFyaWFSb2xlID0g
cGFyZW50LT5hcmlhUm9sZUF0dHJpYnV0ZSgpOworCisgICAgICAgIC8vIFNlbGVjdHMgYW5kIGxp
c3Rib3hlcyBib3RoIGhhdmUgb3B0aW9ucyBhcyBjaGlsZCByb2xlcywgYnV0IHRoZXkgbWFwIHRv
IGRpZmZlcmVudCByb2xlcyB3aXRoaW4gV2ViQ29yZS4KKyAgICAgICAgaWYgKHJvbGUgPT0gTGlz
dEJveE9wdGlvblJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gTWVudVJvbGUpCisgICAgICAgICAg
ICByZXR1cm4gTWVudUl0ZW1Sb2xlOworICAgICAgICAvLyBBbiBhcmlhICJtZW51aXRlbSIgbWF5
IG1hcCB0byBNZW51QnV0dG9uIG9yIE1lbnVJdGVtIGRlcGVuZGluZyBvbiBpdHMgcGFyZW50Lgor
ICAgICAgICBpZiAocm9sZSA9PSBNZW51SXRlbVJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gR3Jv
dXBSb2xlKQorICAgICAgICAgICAgcmV0dXJuIE1lbnVCdXR0b25Sb2xlOworICAgICAgICAKKyAg
ICAgICAgLy8gSWYgdGhlIHBhcmVudCBoYWQgYSBkaWZmZXJlbnQgcm9sZSwgdGhlbiB3ZSBkb24n
dCBuZWVkIHRvIGNvbnRpbnVlIHNlYXJjaGluZyB1cCB0aGUgY2hhaW4uCisgICAgICAgIGlmIChw
YXJlbnRBcmlhUm9sZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcm9sZTsKK30gICAKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCisjZGVmaW5lIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0X2gKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFzcyBFbGVtZW50OworY2xh
c3MgRnJhbWU7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3Mg
SFRNTEFuY2hvckVsZW1lbnQ7CitjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7CitjbGFzcyBIVE1MRWxl
bWVudDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CitjbGFzcyBIVE1MTWFwRWxlbWVudDsKK2Ns
YXNzIEhUTUxTZWxlY3RFbGVtZW50OworY2xhc3MgSW50UG9pbnQ7CitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlckxpc3RCb3g7CitjbGFzcyBSZW5kZXJUZXh0Q29udHJv
bDsKK2NsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOworY2xhc3MgV2lk
Z2V0OworICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QgOiBwdWJsaWMgQWNjZXNz
aWJpbGl0eU9iamVjdCB7Citwcm90ZWN0ZWQ6CisgICAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qo
Tm9kZSopOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0PiBjcmVhdGUoTm9kZSopOworICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworICAgIAorICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCBib29sIGNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3Q7CisgICAgCisgICAg
dmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmaXJzdENoaWxkKCkgY29uc3Q7CisgICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNvbnN0OworICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0OworICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdDsKKworICAg
IHZvaWQgc2V0Tm9kZShOb2RlKik7CisgICAgdmlydHVhbCBOb2RlKiBub2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlOyB9CisgICAgdmlydHVhbCBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsK
KworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5D
aGFuZ2VkKCk7CisgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpOworCisgICAgdmly
dHVhbCBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSBtX2FyaWFSb2xlOworICAgIGJvb2wgbV9jaGlsZHJlbkRpcnR5Owor
ICAgIG11dGFibGUgQWNjZXNzaWJpbGl0eVJvbGUgbV9yb2xlRm9yTVNBQTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbm9kZTsgfQorCisgICAgdmly
dHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOworICAg
IHZpcnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOworICAgIHZpcnR1YWwgYm9vbCBhY2Nlc3NpYmls
aXR5SXNJZ25vcmVkKCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGVBdHRy
aWJ1dGUoKSBjb25zdDsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBcmlhUm9sZUF0
dHJpYnV0ZSgpIGNvbnN0OworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJlbWFwQXJpYVJvbGVEdWVU
b1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgTm9kZSog
bV9ub2RlOworfTsKKworaW5saW5lIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KiB0b0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Kj4ob2JqZWN0KTsKK30K
KworaW5saW5lIGNvbnN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KiB0b0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NF
UlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Kj4ob2JqZWN0
KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgordm9pZCB0b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMTIyNTYzKQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxNyw2ICszMTcsNyBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPiBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3I7CiAgICAgCisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfSAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlQcm9ncmVzc0luZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCShyZXZpc2lvbiAx
MjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9n
cmVzc0luZGljYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDkgQEAgQWNjZXNz
aWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpBY2Nlc3NpYgogCiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlQcm9ncmVzc0luZGljYXRvcj4gQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpj
cmVhdGUoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yKHJlbmRlcmVyKSk7CisgICAgQWNjZXNz
aWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eVByb2dyZXNz
SW5kaWNhdG9yKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6OmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCShyZXZp
c2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxNCArOTMsOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCog
cmVuZGVyZXIpCi0gICAgOiBBY2Nlc3NpYmlsaXR5T2JqZWN0KCkKKyAgICA6IEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0KHJlbmRlcmVyLT5ub2RlKCkpCiAgICAgLCBtX3JlbmRlcmVyKHJlbmRlcmVy
KQotICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKLSAgICAsIG1fY2hpbGRyZW5EaXJ0eShm
YWxzZSkKLSAgICAsIG1fcm9sZUZvck1TQUEoVW5rbm93blJvbGUpCiB7Ci0gICAgbV9yb2xlID0g
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKLQogI2lmbmRlZiBOREVCVUcKICAgICBtX3Jl
bmRlcmVyLT5zZXRIYXNBWE9iamVjdCh0cnVlKTsKICNlbmRpZgpAQCAtMTExLDIxICsxMDYsMjcg
QEAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6fkFjY2Vzc2liaWxpdAogICAgIEFTU0VSVChp
c0RldGFjaGVkKCkpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmluaXQo
KQoreworICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KCk7Cit9CisKIFBhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVy
ZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCgpCiB7Ci0gICAgY2xlYXJDaGls
ZHJlbigpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaCgpOworICAgIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpkZXRhY2goKTsKICAgICAKICNpZm5kZWYgTkRFQlVHCiAgICAgaWYg
KG1fcmVuZGVyZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNldEhhc0FYT2JqZWN0KGZhbHNlKTsK
ICNlbmRpZgotICAgIG1fcmVuZGVyZXIgPSAwOyAgICAKKyAgICBtX3JlbmRlcmVyID0gMDsKIH0K
IAogUmVuZGVyQm94TW9kZWxPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnJlbmRl
ckJveE1vZGVsT2JqZWN0KCkgY29uc3QKQEAgLTEzNSw2ICsxMzYsMTIgQEAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZQogICAgIHJldHVybiB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KG1fcmVuZGVyZXIpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgbV9yZW5kZXJlciA9
IHJlbmRlcmVyOworICAgIHNldE5vZGUocmVuZGVyZXItPm5vZGUoKSk7Cit9CisKIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0lubGluZVdpdGhDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBvYmplY3Qp
CiB7CiAgICAgaWYgKCFvYmplY3QtPmlzQm94TW9kZWxPYmplY3QoKSkKQEAgLTMwNjEsNzUgKzMw
NjgsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OnJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKSBjb25zdAot
ewotICAgIC8vIFNvbWUgb2JqZWN0cyBjaGFuZ2UgdGhlaXIgcm9sZSBiYXNlZCBvbiB0aGVpciBw
YXJlbnQuCi0gICAgLy8gSG93ZXZlciwgYXNraW5nIGZvciB0aGUgdW5pZ25vcmVkUGFyZW50IGNh
bGxzIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSwgd2hpY2ggY2FuIHRyaWdnZXIgYSBsb29wLiAK
LSAgICAvLyBXaGlsZSBpbnNpZGUgdGhlIGNhbGwgc3RhY2sgb2YgY3JlYXRpbmcgYW4gZWxlbWVu
dCwgd2UgbmVlZCB0byBhdm9pZCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkuCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MTc0Ci0KLSAgICBpZiAocm9s
ZSAhPSBMaXN0Qm94T3B0aW9uUm9sZSAmJiByb2xlICE9IE1lbnVJdGVtUm9sZSkKLSAgICAgICAg
cmV0dXJuIHJvbGU7Ci0gICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSBwYXJlbnRPYmplY3QoKTsgcGFyZW50ICYmICFwYXJlbnQtPmFjY2Vzc2liaWxpdHlJc0lnbm9y
ZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewotICAgICAgICBBY2Nlc3Np
YmlsaXR5Um9sZSBwYXJlbnRBcmlhUm9sZSA9IHBhcmVudC0+YXJpYVJvbGVBdHRyaWJ1dGUoKTsK
LQotICAgICAgICAvLyBTZWxlY3RzIGFuZCBsaXN0Ym94ZXMgYm90aCBoYXZlIG9wdGlvbnMgYXMg
Y2hpbGQgcm9sZXMsIGJ1dCB0aGV5IG1hcCB0byBkaWZmZXJlbnQgcm9sZXMgd2l0aGluIFdlYkNv
cmUuCi0gICAgICAgIGlmIChyb2xlID09IExpc3RCb3hPcHRpb25Sb2xlICYmIHBhcmVudEFyaWFS
b2xlID09IE1lbnVSb2xlKQotICAgICAgICAgICAgcmV0dXJuIE1lbnVJdGVtUm9sZTsKLSAgICAg
ICAgLy8gQW4gYXJpYSAibWVudWl0ZW0iIG1heSBtYXAgdG8gTWVudUJ1dHRvbiBvciBNZW51SXRl
bSBkZXBlbmRpbmcgb24gaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKHJvbGUgPT0gTWVudUl0ZW1S
b2xlICYmIHBhcmVudEFyaWFSb2xlID09IEdyb3VwUm9sZSkKLSAgICAgICAgICAgIHJldHVybiBN
ZW51QnV0dG9uUm9sZTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHRoZSBwYXJlbnQgaGFkIGEg
ZGlmZmVyZW50IHJvbGUsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjb250aW51ZSBzZWFyY2hpbmcg
dXAgdGhlIGNoYWluLgotICAgICAgICBpZiAocGFyZW50QXJpYVJvbGUpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJvbGU7Ci19Ci0gICAgCi1BY2Nlc3NpYmls
aXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1pbmVBcmlhUm9sZUF0dHJp
YnV0ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhUm9sZSA9IGdldEF0
dHJpYnV0ZShyb2xlQXR0cik7Ci0gICAgaWYgKGFyaWFSb2xlLmlzTnVsbCgpIHx8IGFyaWFSb2xl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOwotICAgIAotICAgIEFjY2Vz
c2liaWxpdHlSb2xlIHJvbGUgPSBhcmlhUm9sZVRvV2ViQ29yZVJvbGUoYXJpYVJvbGUpOwotCi0g
ICAgLy8gQVJJQSBzdGF0ZXMgaWYgYW4gaXRlbSBjYW4gZ2V0IGZvY3VzLCBpdCBzaG91bGQgbm90
IGJlIHByZXNlbnRhdGlvbmFsLgotICAgIGlmIChyb2xlID09IFByZXNlbnRhdGlvbmFsUm9sZSAm
JiBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4gVW5rbm93blJvbGU7Ci0g
ICAgCi0gICAgaWYgKHJvbGUgPT0gQnV0dG9uUm9sZSAmJiBhcmlhSGFzUG9wdXAoKSkKLSAgICAg
ICAgcm9sZSA9IFBvcFVwQnV0dG9uUm9sZTsKLQotICAgIGlmIChyb2xlID09IFRleHRBcmVhUm9s
ZSAmJiAhYXJpYUlzTXVsdGlsaW5lKCkpCi0gICAgICAgIHJvbGUgPSBUZXh0RmllbGRSb2xlOwot
Ci0gICAgcm9sZSA9IHJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChyb2xlKTsKLSAgICAKLSAgICBp
ZiAocm9sZSkKLSAgICAgICAgcmV0dXJuIHJvbGU7Ci0KLSAgICByZXR1cm4gVW5rbm93blJvbGU7
Ci19Ci0KLUFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFyaWFS
b2xlQXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hcmlhUm9sZTsKLX0KLSAgICAK
LXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUo
KQotewotICAgIGJvb2wgaWdub3JlZFN0YXR1cyA9IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKTsK
LSAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOwotICAgIAotICAgIC8v
IFRoZSBBWCBoaWVyYXJjaHkgb25seSBuZWVkcyB0byBiZSB1cGRhdGVkIGlmIHRoZSBpZ25vcmVk
IHN0YXR1cyBvZiBhbiBlbGVtZW50IGhhcyBjaGFuZ2VkLgotICAgIGlmIChpZ25vcmVkU3RhdHVz
ICE9IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgY2hpbGRyZW5DaGFuZ2VkKCk7
Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzRGVzY2VuZGFudE9m
RWxlbWVudFR5cGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkgY29uc3QKIHsKICAgICBm
b3IgKFJlbmRlck9iamVjdCogcGFyZW50ID0gbV9yZW5kZXJlci0+cGFyZW50KCk7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKSkgewpAQCAtMzM2NiwyNSArMzMwNCw2IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYVJvbGUKICAgICB9CiB9CiAKLWJvb2wgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdAotewot
ICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0KLSAgICBpZiAoaXNXZWJBcmVhKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIE5PVEU6IEl0IHdvdWxkIGJlIG1vcmUg
YWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZvY3VzZWROb2RlKCkgd291
bGQKLSAgICAvLyBkbyBhbnl0aGluZy4gIEZvciBleGFtcGxlLCBzZXRGb2N1c2VkTm9kZSgpIHdp
bGwgZG8gbm90aGluZyBpZiB0aGUgY3VycmVudCBmb2N1c2VkCi0gICAgLy8gbm9kZSB3aWxsIG5v
dCByZWxpbnF1aXNoIHRoZSBmb2N1cy4KLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgcmV0dXJuIG5vZGUtPnN1cHBvcnRzRm9jdXMoKTsKLX0KLSAgICAKIGJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25z
dAogewogICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgZXhwYW5kZWQgaWYgaXQgYXJpYS1leHBhbmRl
ZCBpcyB0cnVlIG9yIGZhbHNlLgpAQCAtMzQzMSwzOSArMzM1MCwxNSBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmNvbnRlbnRDCiAgICAgfQogfQogICAgIAotdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKQotewotICAgIC8vIFRoaXMgbWV0
aG9kIGlzIG1lYW50IGFzIGEgcXVpY2sgd2F5IG9mIG1hcmtpbmcgYSBwb3J0aW9uIG9mIHRoZSBh
Y2Nlc3NpYmlsaXR5IHRyZWUgZGlydHkuCi0gICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24odGhpcywgZG9j
dW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhDaGlsZHJlbkNoYW5nZWQsIHRydWUpOwotCi0gICAg
Ly8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWluLCBidXQgb25seSBpZiB0aGUg
ZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMKLSAgICAvLyBjYWxsZWQgZHVy
aW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxkIGJlIGRvbmUuIAotICAgIC8v
IElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBjb3VsZCBpbnRlcnJvZ2F0ZSB0
aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0YXRlLgotICAgIC8vIEF0IHRo
ZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBjaGFuZ2VzLgotICAgIGZvciAo
QWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFyZW50OyBwYXJlbnQgPSBwYXJl
bnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKLSAgICAgICAgcGFyZW50LT5zZXROZWVkc1Rv
VXBkYXRlQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBUaGVzZSBub3RpZmljYXRpb25zIGFsd2F5
cyBuZWVkIHRvIGJlIHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJzIGFyZSByZWxpYW50IG9uIHRo
ZW0gdG8gcGVyZm9ybS4gCi0gICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCB0aGV5IG5lZWQgdG8g
YmUgc2VudCBldmVuIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzIG5vdCBhY2Nlc3NlZCB0aGlz
IGxpdmUgcmVnaW9uIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KLQotICAgICAgICAvLyBJZiB0aGlz
IGVsZW1lbnQgc3VwcG9ydHMgQVJJQSBsaXZlIHJlZ2lvbnMsIHRoZW4gbm90aWZ5IHRoZSBBVCBv
ZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5zdXBwb3J0c0FSSUFMaXZlUmVnaW9uKCkp
Ci0gICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBw
YXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTGl2ZVJlZ2lvbkNoYW5nZWQsIHRy
dWUpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIGFuIEFSSUEgdGV4
dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCi0gICAgICAgIGlmIChwYXJlbnQt
PmlzQVJJQVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+aXNOYXRpdmVUZXh0Q29udHJvbCgpICYm
ICFwYXJlbnQtPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCi0gICAgICAgICAgICBheE9i
amVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBwYXJlbnQtPmRvY3VtZW50KCks
IEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLSAgICB9Ci19Ci0gICAgCiBi
b29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGlsZHJlbigpIGNvbnN0CiB7
CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAg
Ly8gQ2FudmFzIGlzIGEgc3BlY2lhbCBjYXNlOyBpdHMgcm9sZSBpcyBJbWFnZVJvbGUgYnV0IGl0
IGlzIGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbi4KKyAgICBpZiAobm9kZSgpICYmIG5vZGUoKS0+
aGFzVGFnTmFtZShjYW52YXNUYWcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwogICAgIC8vIEVs
ZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGNoaWxkcmVuCiAgICAgc3dpdGNoIChyb2xlVmFs
dWUoKSkgewogICAgIGNhc2UgSW1hZ2VSb2xlOgpAQCAtMzUzNiw2ICszNDMxLDE1IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEYKICAgICBtX2NoaWxkcmVuLmFwcGVu
ZChheFNwaW5CdXR0b24pOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFk
ZENhbnZhc0NoaWxkcmVuKCkKK3sKKyAgICAvLyBJZiBpdCdzIGEgY2FudmFzLCBpdCB3b24ndCBo
YXZlIHJlbmRlcmVkIGNoaWxkcmVuLCBidXQgaXQgbWlnaHQgaGF2ZSBhY2Nlc3NpYmxlIGZhbGxi
YWNrIGNvbnRlbnQuCisgICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoY2FudmFz
VGFnKSkgeworICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWRkQ2hpbGRyZW4oKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRBdHRhY2htZW50Q2hpbGRyZW4oKQogewogICAgIGlmICghaXNBdHRhY2htZW50KCkp
CkBAIC0zNTcyLDExICszNDc2LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojph
ZGRDaGlsZAogICAgIC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVuIGluIGFkZGl0
aW9uIHRvIGV4aXN0aW5nIGNoaWxkcmVuIGFyaXNlcywgCiAgICAgLy8gY2hpbGRyZW5DaGFuZ2Vk
IHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBsZWF2aW5nIHRoZSBvYmplY3Qgd2l0aCBubyBjaGls
ZHJlbi4KICAgICBBU1NFUlQoIW1faGF2ZUNoaWxkcmVuKTsgCi0gICAgCi0gICAgLy8gbm90aGlu
ZyB0byBhZGQgaWYgdGhlcmUgaXMgbm8gUmVuZGVyT2JqZWN0Ci0gICAgaWYgKCFtX3JlbmRlcmVy
KQotICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICBtX2hhdmVDaGlsZHJlbiA9IHRydWU7CiAg
ICAgCiAgICAgaWYgKCFjYW5IYXZlQ2hpbGRyZW4oKSkKQEAgLTM1ODQsNyArMzQ4NCw2IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGQKICAgICAKICAgICAvLyBhZGQg
YWxsIHVuaWdub3JlZCBhY2MgY2hpbGRyZW4KICAgICBmb3IgKFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiBvYmogPSBmaXJzdENoaWxkKCk7IG9iajsgb2JqID0gb2JqLT5uZXh0U2libGluZygp
KSB7Ci0gICAgICAgIAogICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGlzIGFza2luZyBmb3IgdGhp
cyBjaGlsZCdzIGNoaWxkcmVuLCB0aGVuIGVpdGhlciBpdCdzIHRoZSBmaXJzdCB0aW1lIChhbmQg
Y2xlYXJpbmcgaXMgYSBuby1vcCksIAogICAgICAgICAvLyBvciBpdHMgdmlzaWJpbGl0eSBoYXMg
Y2hhbmdlZC4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGlzIGNoaWxkIG1heSBoYXZlIGEgc3RhbGUg
Y2hpbGQgY2FjaGVkLiAKICAgICAgICAgLy8gVGhpcyBjYW4gcHJldmVudCBhcmlhLWhpZGRlbiBj
aGFuZ2VzIGZyb20gd29ya2luZyBjb3JyZWN0bHkuIEhlbmNlLCB3aGVuZXZlciBhIHBhcmVudCBp
cyBnZXR0aW5nIGNoaWxkcmVuLCBlbnN1cmUgZGF0YSBpcyBub3Qgc3RhbGUuCkBAIC0zNjA0LDYg
KzM1MDMsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAg
YWRkQXR0YWNobWVudENoaWxkcmVuKCk7CiAgICAgYWRkSW1hZ2VNYXBDaGlsZHJlbigpOwogICAg
IGFkZFRleHRGaWVsZENoaWxkcmVuKCk7CisgICAgYWRkQ2FudmFzQ2hpbGRyZW4oKTsKIAogI2lm
IFBMQVRGT1JNKE1BQykKICAgICB1cGRhdGVBdHRhY2htZW50Vmlld1BhcmVudHMoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MjksNyArMjksNyBAQAogI2lmbmRlZiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0X2gKICNkZWZp
bmUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaCIKICNpbmNsdWRl
ICJMYXlvdXRUeXBlcy5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKQEAgLTU1LDcgKzU1
LDcgQEAgY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiBjbGFzcyBX
aWRnZXQ7CiAgICAgCi1jbGFzcyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IDogcHVibGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QgeworY2xhc3MgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCA6IHB1
YmxpYyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCB7CiBwcm90ZWN0ZWQ6CiAgICAgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqKTsKIHB1YmxpYzoKQEAgLTYzLDYgKzYzLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKTsKICAg
ICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB2b2lkIGluaXQoKTsKICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgaXNBbmNob3IoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBdHRhY2ht
ZW50KCkgY29uc3Q7CkBAIC0xMTEsNyArMTEzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBoYXNTYW1lU3R5bGUoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGhh
c1VuZGVybGluZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGNhblNldEZvY3VzQXR0cmli
dXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNldFRleHRSYW5nZUF0dHJpYnV0ZXMo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0RXhwYW5kZWRBdHRyaWJ1dGUoKSBjb25zdDsKQEAgLTE0
OSwxMCArMTUwLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFyaWFPd25zRWxlbWVu
dHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJikgY29uc3Q7CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzQVJJQU93bnMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xl
IGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUHJlc2VudGF0
aW9uYWxDaGlsZE9mQXJpYVJvbGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXJpYVJvbGVI
YXNQcmVzZW50YXRpb25hbENoaWxkcmVuKCkgY29uc3Q7Ci0gICAgdm9pZCB1cGRhdGVBY2Nlc3Np
YmlsaXR5Um9sZSgpOwogICAgIAogICAgIC8vIFNob3VsZCBiZSBjYWxsZWQgb24gdGhlIHJvb3Qg
YWNjZXNzaWJpbGl0eSBvYmplY3QgdG8ga2ljayBvZmYgYSBoaXQgdGVzdC4KICAgICB2aXJ0dWFs
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlIaXRUZXN0KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CkBAIC0xNjgsMTQgKzE2NywxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBMYXlv
dXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjbGlja1Bv
aW50KCk7CiAgICAgCi0gICAgdm9pZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KSB7IG1fcmVuZGVyZXIgPSByZW5kZXJlcjsgfQorICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVuZGVy
T2JqZWN0Kik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZW5kZXJlcjsgfQogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJCb3hN
b2RlbE9iamVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0OwogCisg
ICAgdmlydHVhbCBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdDsKKwogICAgIFJlbmRlclZpZXcq
IHRvcFJlbmRlcmVyKCkgY29uc3Q7CiAgICAgUmVuZGVyVGV4dENvbnRyb2wqIHRleHRDb250cm9s
KCkgY29uc3Q7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CiAgICAgRnJhbWVWaWV3
KiB0b3BEb2N1bWVudEZyYW1lVmlldygpIGNvbnN0OyAgCiAgICAgRG9jdW1lbnQqIHRvcERvY3Vt
ZW50KCkgY29uc3Q7CiAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWxFbGVtZW50Q29udGFpbmVy
KCkgY29uc3Q7CkBAIC0yMTQsNyArMjE0LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZWNyZW1lbnQoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoKCk7Ci0gICAgdmlydHVh
bCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb250ZW50Q2hhbmdl
ZCgpOwogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOwogICAgIHZpcnR1YWwgYm9vbCBj
YW5IYXZlQ2hpbGRyZW4oKSBjb25zdDsKQEAgLTI2MCw4ICsyNTksNiBAQCBwdWJsaWM6CiAKIHBy
b3RlY3RlZDoKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7Ci0gICAgQWNjZXNzaWJpbGl0
eVJvbGUgbV9hcmlhUm9sZTsKLSAgICBib29sIG1fY2hpbGRyZW5EaXJ0eTsKICAgICAKICAgICB2
b2lkIHNldFJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyZXIg
PSByZW5kZXJlcjsgfQogICAgIHZvaWQgYXJpYUxhYmVsZWRCeUVsZW1lbnRzKFZlY3RvcjxFbGVt
ZW50Kj4mIGVsZW1lbnRzKSBjb25zdDsKQEAgLTI3MSw2ICsyNjgsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgCiAgICAgdmlydHVhbCBib29sIGlzRGV0YWNoZWQoKSBjb25zdCB7IHJldHVybiAhbV9yZW5k
ZXJlcjsgfQogCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBY2Nlc3Np
YmlsaXR5Um9sZSgpOworCiBwcml2YXRlOgogICAgIHZvaWQgYXJpYUxpc3Rib3hTZWxlY3RlZENo
aWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwogICAgIHZvaWQgYXJpYUxpc3Ri
b3hWaXNpYmxlQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CkBAIC0yODYs
OSArMjg1LDYgQEAgcHJpdmF0ZToKIAogICAgIEVsZW1lbnQqIG1lbnVFbGVtZW50Rm9yTWVudUJ1
dHRvbigpIGNvbnN0OwogICAgIEVsZW1lbnQqIG1lbnVJdGVtRWxlbWVudEZvck1lbnUoKSBjb25z
dDsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOwot
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7
Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcmVtYXBBcmlhUm9sZUR1ZVRvUGFyZW50KEFjY2Vzc2li
aWxpdHlSb2xlKSBjb25zdDsKIAogICAgIGJvb2wgaXNUYWJJdGVtU2VsZWN0ZWQoKSBjb25zdDsK
ICAgICB2b2lkIGFsdGVyU2xpZGVyVmFsdWUoYm9vbCBpbmNyZWFzZSk7CkBAIC0zMDUsNiArMzAx
LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKICAgICB2
b2lkIGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKKyAgICB2b2lkIGFkZENhbnZhc0NoaWxkcmVuKCk7
CiAgICAgdm9pZCBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsKICNpZiBQTEFURk9STShNQUMpCiAg
ICAgdm9pZCB1cGRhdGVBdHRhY2htZW50Vmlld1BhcmVudHMoKTsKQEAgLTMyNyw4ICszMjQsNiBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBhcmlhTGl2ZVJlZ2lvbkJ1c3koKSBjb25zdDsg
ICAgCiAgICAgCiAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSgpIGNvbnN0Owot
ICAgIAotICAgIG11dGFibGUgQWNjZXNzaWJpbGl0eVJvbGUgbV9yb2xlRm9yTVNBQTsKIH07CiAK
IGlubGluZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiB0b0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3BwCShyZXZpc2lv
biAxMjI1NjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlT
bGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw5IEBAIEFjY2Vzc2liaWxpdHlT
bGlkZXI6OkFjY2Vzc2liaWxpdHlTbGlkZXIKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5U2xp
ZGVyPiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIp
KTsKKyAgICBBY2Nlc3NpYmlsaXR5U2xpZGVyKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eVNsaWRl
cihyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7
CiB9CiAKIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpvcmll
bnRhdGlvbigpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAxMjI1NjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDE1IEBAIEFjY2Vzc2liaWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRh
YmxlKFIKICAgICA6IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVyZXIpLAogICAgIG1f
aGVhZGVyQ29udGFpbmVyKDApCiB7Cit9CisKK0FjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2li
aWxpdHlUYWJsZSgpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KCkKK3sK
KyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCk7CiAjaWYgQUNDRVNTSUJJTElU
WV9UQUJMRVMKICAgICBtX2lzQWNjZXNzaWJpbGl0eVRhYmxlID0gaXNUYWJsZUV4cG9zYWJsZVRo
cm91Z2hBY2Nlc3NpYmlsaXR5KCk7CiAjZWxzZQpAQCAtNTgsMTMgKzY3LDExIEBAIEFjY2Vzc2li
aWxpdHlUYWJsZTo6QWNjZXNzaWJpbGl0eVRhYmxlKFIKICNlbmRpZgogfQogCi1BY2Nlc3NpYmls
aXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUoKQotewotfQotCiBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlUYWJsZT4gQWNjZXNzaWJpbGl0eVRhYmxlOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlUYWJsZShy
ZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlUYWJsZSogb2JqID0gbmV3IEFjY2Vzc2liaWxp
dHlUYWJsZShyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlOjpoYXNBUklBUm9sZSgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmgJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAg
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZT4gY3JlYXRl
KFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlUYWJsZSgpOwogCisg
ICAgdmlydHVhbCB2b2lkIGluaXQoKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxp
dHlUYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0RhdGFUYWJsZSgpIGNvbnN0Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNl
bGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDcgKzUxLDkgQEAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6fkFjY2Vzc2liaWxpdHlU
YQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+IEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGw6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChyZW5kZXJlcikpOworICAgIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGwqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKHJlbmRlcmVy
KTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9v
bCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDEyMjU2MykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsOSBAQCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6On5BY2Nlc3NpYmlsaXR5VGFiCiAK
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlUm93PiBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6
OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQWNjZXNzaWJpbGl0eVRhYmxlUm93KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVRh
YmxlUm93KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eVRhYmxlUm93KHJlbmRlcmVyKTsKKyAgICBv
YmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogQWNjZXNzaWJpbGl0
eVJvbGUgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojpyb2xlVmFsdWUoKSBjb25zdApJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTIyNjY4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTkgQEAKKzIwMTItMDctMTQgIERvbWluaWMgTWF6em9uaSAgPGRtYXp6b25p
QGdvb2dsZS5jb20+CisKKyAgICAgICAgQVg6IE5lZWQgQWNjZXNzaWJpbGl0eU9iamVjdHMgZm9y
IG5vZGVzIHdpdGhvdXQgcmVuZGVyZXJzIGluIGNhbnZhcyBzdWJ0cmVlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg5OQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgbmV3IHRlc3QgYWRkcyBhIGJ1
bmNoIG9mIGVsZW1lbnRzIHRvIGEgbm9ybWFsIGNvbnRhaW5lciBhbmQgdGhlIHNhbWUgZWxlbWVu
dHMgdG8KKyAgICAgICAgYSBjYW52YXMgc3VidHJlZSwgdGhlbiBpdCBpdGVyYXRlcyBvdmVyIGFs
bCBvZiB0aGUgYWNjZXNzaWJsZSBvYmplY3RzIHdpdGhpbiBlYWNoCisgICAgICAgIGNvbnRhaW5l
ciBhbmQgbWFrZXMgc3VyZSB0aGV5IGhhdmUgaWRlbnRpY2FsIHJvbGVzLiBCZWNhdXNlIHdlIGtu
b3cgdGhlIG5vZGVzIGluIHRoZQorICAgICAgICBjYW52YXMgc3VidHJlZSBkb24ndCBoYXZlIHJl
bmRlcmVycywgdGhpcyBzdWNjZXNzZnVsbHkgdGVzdHMgdGhhdCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdHMKKyAgICAgICAgYXJlIGdldHRpbmcgY3JlYXRlZCBmb3IgdGhlc2Ugbm9kZXMuCisKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2li
aWxpdHlub2Rlb2JqZWN0Lmh0bWw6IEFkZGVkLgorCiAyMDEyLTA3LTE0ICBBbGxhbiBTYW5kZmVs
ZCBKZW5zZW4gIDxhbGxhbi5qZW5zZW5Abm9raWEuY29tPgogCiAgICAgICAgIFtUZXN0c10gVW5z
a2lwIG5vdCBmYWlsaW5nIHRlc3RzIHByZXZpb3VzbHkgcmVseWluZyBvbiBMVEM6Om5vZGVzRnJv
bVJlY3QgaW1wbGVtZW50YXRpb24gCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2Nh
bnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9j
YW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIwIEBACitMaW5rICBCdXR0b24gICAgICAgICAgIEFSSUEgYnV0dG9uIEFSSUEg
bGluaworVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdHMg
YXJlIGNyZWF0ZWQgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFzIHN1YnRyZWUuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGF4UmVuZGVyT2JqZWN0cy5sZW5ndGggaXMgYXhO
b2RlT2JqZWN0cy5sZW5ndGgKK1BBU1MgaSA9PSAwOyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4
Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAxOyBheFJlbmRlck9iamVjdC5yb2xl
ID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAyOyBheFJlbmRlck9iamVj
dC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAzOyBheFJlbmRl
ck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSA0OyBh
eFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9
PSA1OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BB
U1MgaSA9PSA2OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRy
dWUKK1BBU1MgaSA9PSA3OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xl
IGlzIHRydWUKK1BBU1MgaSA9PSA4OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVj
dC5yb2xlIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNj
ZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0ibXlDb250YWlu
ZXIiIHRhYmluZGV4PSItMSI+CisgIDxhIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24+QnV0
dG9uPC9idXR0b24+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KKyAgPGlucHV0IHR5cGU9ImNoZWNr
Ym94Ij4KKyAgPGlucHV0IHR5cGU9InJhZGlvIj4KKyAgPGlucHV0IHR5cGU9InN1Ym1pdCI+Cisg
IDxzZWxlY3Q+PG9wdGlvbj4xPG9wdGlvbj4yPC9zZWxlY3Q+CisgIDxzcGFuIHRhYmluZGV4PSIw
IiByb2xlPSJidXR0b24iPkFSSUEgYnV0dG9uPC9zcGFuPgorICA8c3BhbiB0YWJpbmRleD0iMCIg
cm9sZT0ibGluayI+QVJJQSBsaW5rPC9zcGFuPgorPC9kaXY+CisKKzxjYW52YXMgaWQ9Im15Q2Fu
dmFzIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdGFiaW5kZXg9Ii0xIj4KKyAgPGEgaHJlZj0i
IyI+TGluazwvYT4KKyAgPGJ1dHRvbj5CdXR0b248L2J1dHRvbj4KKyAgPGlucHV0IHR5cGU9InRl
eHQiPgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giPgorICA8aW5wdXQgdHlwZT0icmFkaW8iPgor
ICA8aW5wdXQgdHlwZT0ic3VibWl0Ij4KKyAgPHNlbGVjdD48b3B0aW9uPjE8b3B0aW9uPjI8L3Nl
bGVjdD4KKyAgPHNwYW4gdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiI+QVJJQSBidXR0b248L3Nw
YW4+CisgIDxzcGFuIHRhYmluZGV4PSIwIiByb2xlPSJsaW5rIj5BUklBIGxpbms8L3NwYW4+Cis8
L2NhbnZhcz4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzIGFy
ZSBjcmVhdGVkIGZvciBlbGVtZW50cyBpbiBhIGNhbnZhcyBzdWJ0cmVlLiIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cikgeworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICBmdW5jdGlvbiBhcHBlbmRGb2N1c2FibGVEZXNjZW5kYW50cyhheE9iamVjdCwgYXhGb2N1c2Fi
bGVMaXN0KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhPYmplY3QuY2hpbGRyZW5D
b3VudDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXhDaGlsZCA9IGF4T2JqZWN0LmNoaWxkQXRJ
bmRleChpKTsKKyAgICAgICAgICAgIGlmIChheENoaWxkLmlzRm9jdXNhYmxlKQorICAgICAgICAg
ICAgICAgIGF4Rm9jdXNhYmxlTGlzdC5wdXNoKGF4Q2hpbGQpOworICAgICAgICAgICAgYXBwZW5k
Rm9jdXNhYmxlRGVzY2VuZGFudHMoYXhDaGlsZCwgYXhGb2N1c2FibGVMaXN0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bXlDb250YWluZXIiKTsKKyAgICBjb250YWluZXIuZm9jdXMoKTsKKyAgICB2YXIgYXhDb250YWlu
ZXIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgIHZhciBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlDYW52YXMiKTsKKyAgICBjYW52YXMu
Zm9jdXMoKTsKKyAgICB2YXIgYXhDYW52YXMgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudDsKKworICAgIHZhciBheFJlbmRlck9iamVjdHMgPSBbXTsKKyAgICB2YXIgYXhO
b2RlT2JqZWN0cyA9IFtdOworCisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMoYXhDb250
YWluZXIsIGF4UmVuZGVyT2JqZWN0cyk7CisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMo
YXhDYW52YXMsIGF4Tm9kZU9iamVjdHMpOworCisgICAgc2hvdWxkQmUoImF4UmVuZGVyT2JqZWN0
cy5sZW5ndGgiLCAiYXhOb2RlT2JqZWN0cy5sZW5ndGgiKTsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXhSZW5kZXJPYmplY3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBheFJlbmRl
ck9iamVjdCA9IGF4UmVuZGVyT2JqZWN0c1tpXTsKKyAgICAgICAgdmFyIGF4Tm9kZU9iamVjdCA9
IGF4Tm9kZU9iamVjdHNbaV07CisgICAgICAgIHNob3VsZEJlKCJpID09ICIgKyBpICsgIjsgYXhS
ZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSIsICJ0cnVlIik7CisgICAgfQor
fQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9i
amVjdC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153413</attachid>
            <date>2012-07-19 22:33:09 -0700</date>
            <delta_ts>2012-07-20 13:27:40 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-87899-20120719223255.patch</filename>
            <type>text/plain</type>
            <size>65512</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMi0wNy0xOSAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2hyaXMgRmxlaXphY2guCisKKyAgICAgICAgUmVm
YWN0b3JzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgc28gdGhhdCBpdCBpbmhlcml0cyBmcm9t
IGEgbmV3IGNsYXNzLAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgdGhhdCBjYW4g
YmUgY29uc3RydWN0ZWQgZnJvbSBhIE5vZGUgd2l0aG91dCBhCisgICAgICAgIHJlbmRlcmVyLiBN
b2RpZmllcyBBWE9iamVjdENhY2hlIHNvIHRoYXQgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFu
CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGZvciBlbGVtZW50cyBpbiBhIGNhbnZh
cyBzdWJ0cmVlIGJ1dCBub3Qgb3RoZXJ3aXNlLgorICAgICAgICBBIG5ldyBsYXlvdXQgdGVzdCB2
ZXJpZmllcyB0aGF0IHRoaXMgY29ycmVjdGx5IGV4cG9zZXMgYW4gYWNjZXNzaWJpbGl0eQorICAg
ICAgICB0cmVlIHdpdGggYXBwcm9wcmlhdGUgcm9sZXMgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFz
IHN1YnRyZWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCB0cnkgdG8gY29tcGxldGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LiBN
b3N0IEFYIG1ldGhvZHMgYXJlIHN0aWxsIHVuaW1wbGVtZW50ZWQgYW5kIG5lZWQKKyAgICAgICAg
dG8gYmUgbWlncmF0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHRvIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIG91dHNpZGUgb2Yg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5LCBzbworICAgICAgICB0aGUgcmVzdCBvZiBXZWJDb3JlIG9u
bHkgY2FsbHMgQVhPYmplY3RDYWNoZSB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGEKKyAgICAg
ICAgUmVuZGVyT2JqZWN0LCBub3QgdG8gYSBOb2RlLiBBY2Nlc3NpYmxlIG5vdGlmaWNhdGlvbnMg
b24gbm9kZXMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3Jp
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2V0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vz
c2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlh
Um9sZUR1ZVRvUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJlcik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2FudmFzQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmNyZWF0ZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlOjpBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRhYmxl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmNyZWF0ZSk6CisKIDIwMTItMDctMTkgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEZvcm0gc3RhdGUgcmVz
dG9yZTogTmVlZCB0byBpZGVudGlmeSBhIGZvcm0gYnkgaXRzIGNvbnRlbnQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTM1LDYgKzkzNSw3IEBAIFNFVChXZWJDb3JlX1NP
VVJDRVMKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmNwcAogICAgIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwCisgICAgYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJ
bmRpY2F0b3IuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxMjMxNjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzE3LDYgKzEzMTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuaCBcCiAJU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5jcHAgXAogCVNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuaCBcCisJU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaCBc
CiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggXAog
CVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNh
dG9yLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlzaW9uIDEyMzE2OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgU09VUkNF
UyArPSBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAgXAogICAgIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIFwKICAgICBhY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBcCisgICAgYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yLmNwcCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMjMxNjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTE3OTIsNiArMTc5Miw4
IEBACiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1
cC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0
LmNwcCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09iamVj
dC5oJywKKyAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5oJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
JywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yLmgnLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNiAr
MTg4LDIzIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldCgKICAgICBy
ZXR1cm4gbV9vYmplY3RzLmdldChheElEKS5nZXQoKTsgICAgCiB9CiAKK0FjY2Vzc2liaWxpdHlP
YmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBBbHdheXMgcHJlZmVyIGJ1aWxkaW5nIHRoZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0IGZyb20gdGhlIHJlbmRlcmVyIGlmIHRoZXJlIGlzIG9uZS4KKyAg
ICBpZiAobm9kZS0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIGdldChub2RlLT5yZW5kZXJl
cigpKTsKKworICAgIEFYSUQgYXhJRCA9IG1fbm9kZU9iamVjdE1hcHBpbmcuZ2V0KG5vZGUpOwor
ICAgIEFTU0VSVCghSGFzaFRyYWl0czxBWElEPjo6aXNEZWxldGVkVmFsdWUoYXhJRCkpOworICAg
IGlmICghYXhJRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9vYmplY3RzLmdl
dChheElEKS5nZXQoKTsKK30KKwogLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgYmVsb25ncyBvbiBO
b2RlLgogLy8gRklYTUU6IFRoaXMgc2hvdWxkIHRha2UgYSBjb25zdCBjaGFyKiwgYnV0IG9uZSBj
YWxsZXIgcGFzc2VzIG51bGxBdG9tLgogYm9vbCBub2RlSGFzUm9sZShOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIHJvbGUpCkBAIC0yNTIsNiArMjY5LDExIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlPYmplY3Q+IGMKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Y3JlYXRlKHJlbmRlcmVyKTsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdD4gY3JlYXRlRnJvbU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmNyZWF0ZShub2RlKTsKK30KKwogQWNjZXNzaWJpbGl0eU9iamVj
dCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaWYg
KCF3aWRnZXQpCkBAIC0yNzMsNyArMjk1LDMyIEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OmdldE8KICAgICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CiAgICAgcmV0
dXJuIG5ld09iai5nZXQoKTsKIH0KLSAgICAKKworQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmpl
Y3RDYWNoZTo6Z2V0T3JDcmVhdGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IGdldChu
b2RlKSkKKyAgICAgICAgcmV0dXJuIG9iajsKKworICAgIGlmIChub2RlLT5yZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm4gZ2V0T3JDcmVhdGUobm9kZS0+cmVuZGVyZXIoKSk7CisKKyAgICAvLyBJ
dCdzIG9ubHkgYWxsb3dlZCB0byBjcmVhdGUgYW4gQWNjZXNzaWJpbGl0eU9iamVjdCBmcm9tIGEg
Tm9kZSBpZiBpdCdzIGluIGEgY2FudmFzIHN1YnRyZWUuCisgICAgaWYgKCFub2RlLT5wYXJlbnRF
bGVtZW50KCkgfHwgIW5vZGUtPnBhcmVudEVsZW1lbnQoKS0+aXNJbkNhbnZhc1N1YnRyZWUoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gbmV3
T2JqID0gY3JlYXRlRnJvbU5vZGUobm9kZSk7CisKKyAgICBnZXRBWElEKG5ld09iai5nZXQoKSk7
CisKKyAgICBtX25vZGVPYmplY3RNYXBwaW5nLnNldChub2RlLCBuZXdPYmotPmF4T2JqZWN0SUQo
KSk7CisgICAgbV9vYmplY3RzLnNldChuZXdPYmotPmF4T2JqZWN0SUQoKSwgbmV3T2JqKTsKKyAg
ICBhdHRhY2hXcmFwcGVyKG5ld09iai5nZXQoKSk7CisgICAgcmV0dXJuIG5ld09iai5nZXQoKTsK
K30KKwogQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRlcmVyKQpAQCAtMzg4LDYgKzQz
NSwyNCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShSZW5kZXJPYmplY3QqCiAgICAgbV9y
ZW5kZXJPYmplY3RNYXBwaW5nLnJlbW92ZShyZW5kZXJlcik7CiB9CiAKK3ZvaWQgQVhPYmplY3RD
YWNoZTo6cmVtb3ZlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICByZW1vdmVOb2RlRm9yVXNlKG5vZGUpOworCisgICAgLy8gVGhpcyBpcyBhbGwg
c2FmZSBldmVuIGlmIHdlIGRpZG4ndCBoYXZlIGEgbWFwcGluZy4KKyAgICBBWElEIGF4SUQgPSBt
X25vZGVPYmplY3RNYXBwaW5nLmdldChub2RlKTsKKyAgICByZW1vdmUoYXhJRCk7CisgICAgbV9u
b2RlT2JqZWN0TWFwcGluZy5yZW1vdmUobm9kZSk7CisKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIo
KSkgeworICAgICAgICByZW1vdmUobm9kZS0+cmVuZGVyZXIoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKFdpZGdldCogdmlldykKIHsK
ICAgICBpZiAoIXZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAg
cHVibGljOgogICAgIC8vIEZvciBBWCBvYmplY3RzIHdpdGggZWxlbWVudHMgdGhhdCBiYWNrIHRo
ZW0uCiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoUmVuZGVyT2JqZWN0Kik7
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoV2lkZ2V0Kik7CisgICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogZ2V0T3JDcmVhdGUoTm9kZSopOwogCiAgICAgLy8gdXNlZCBmb3Ig
b2JqZWN0cyB3aXRob3V0IGJhY2tpbmcgZWxlbWVudHMKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSk7CkBAIC03Nyw4ICs3OCwxMCBAQCBwdWJs
aWM6CiAgICAgLy8gd2lsbCBvbmx5IHJldHVybiB0aGUgQWNjZXNzaWJpbGl0eU9iamVjdCBpZiBp
dCBhbHJlYWR5IGV4aXN0cwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldChSZW5kZXJPYmpl
Y3QqKTsKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoV2lkZ2V0Kik7CisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogZ2V0KE5vZGUqKTsKICAgICAKICAgICB2b2lkIHJlbW92ZShSZW5kZXJP
YmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZShOb2RlKik7CiAgICAgdm9pZCByZW1vdmUoV2lkZ2V0
Kik7CiAgICAgdm9pZCByZW1vdmUoQVhJRCk7CiAKQEAgLTE4Miw2ICsxODUsNyBAQCBwcml2YXRl
OgogICAgIEhhc2hNYXA8QVhJRCwgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+ID4gbV9vYmpl
Y3RzOwogICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQVhJRD4gbV9yZW5kZXJPYmplY3RNYXBw
aW5nOwogICAgIEhhc2hNYXA8V2lkZ2V0KiwgQVhJRD4gbV93aWRnZXRPYmplY3RNYXBwaW5nOwor
ICAgIEhhc2hNYXA8Tm9kZSosIEFYSUQ+IG1fbm9kZU9iamVjdE1hcHBpbmc7CiAgICAgSGFzaFNl
dDxOb2RlKj4gbV90ZXh0TWFya2VyTm9kZXM7CiAgICAgc3RhdGljIGJvb2wgZ0FjY2Vzc2liaWxp
dHlFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50
ZXJmYWNlRW5hYmxlZDsKQEAgLTIwNCw5ICsyMDgsMTEgQEAgaW5saW5lIEFYT2JqZWN0Q2FjaGU6
OkFYT2JqZWN0Q2FjaGUoY29ucwogaW5saW5lIEFYT2JqZWN0Q2FjaGU6On5BWE9iamVjdENhY2hl
KCkgeyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Zm9jdXNl
ZFVJRWxlbWVudEZvclBhZ2UoY29uc3QgUGFnZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoUmVuZGVyT2JqZWN0KikgeyByZXR1
cm4gMDsgfQoraW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldChO
b2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0
Q2FjaGU6OmdldChXaWRnZXQqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9i
amVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpIHsgcmV0
dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRP
ckNyZWF0ZShSZW5kZXJPYmplY3QqKSB7IHJldHVybiAwOyB9CitpbmxpbmUgQWNjZXNzaWJpbGl0
eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUoTm9kZSopIHsgcmV0dXJuIDA7IH0K
IGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShX
aWRnZXQqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmpl
Y3RDYWNoZTo6cm9vdE9iamVjdCgpIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0Rm9yRnJhbWUoRnJhbWUqKSB7IHJldHVy
biAwOyB9CkBAIC0yMzMsNiArMjM5LDcgQEAgaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9z
dE5vdGlmaWNhdAogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZp
Y2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqLCBBWE5vdGlmaWNhdGlvbikgeyB9CiBpbmxpbmUg
dm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoQVhJRCkgeyB9CiBpbmxpbmUgdm9pZCBBWE9iamVj
dENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KikgeyB9CitpbmxpbmUgdm9pZCBBWE9iamVjdENh
Y2hlOjpyZW1vdmUoTm9kZSopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3Zl
KFdpZGdldCopIHsgfQogaW5saW5lIHZvaWQgQVhPYmplY3RDYWNoZTo6c2VsZWN0ZWRDaGlsZHJl
bkNoYW5nZWQoUmVuZGVyT2JqZWN0KikgeyB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHJl
dmlzaW9uIDEyMzE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFSSUFHcmlkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTUgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjpBY2Nlc3NpYmlsaXR5QVJJQUdy
aWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICA6IEFjY2Vzc2liaWxpdHlUYWJsZShyZW5k
ZXJlcikKIHsKK30KKworQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjp+QWNjZXNzaWJpbGl0eUFSSUFH
cmlkKCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQoKQoreworICAg
IEFjY2Vzc2liaWxpdHlUYWJsZTo6aW5pdCgpOwogI2lmIEFDQ0VTU0lCSUxJVFlfVEFCTEVTCiAg
ICAgbV9pc0FjY2Vzc2liaWxpdHlUYWJsZSA9IHRydWU7CiAjZWxzZQpAQCAtNTAsMTMgKzU5LDEx
IEBAIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6QWNjZXNzaWJpbGl0eUFSSUEKICNlbmRpZgogfQog
Ci1BY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6On5BY2Nlc3NpYmlsaXR5QVJJQUdyaWQoKQotewotfQot
CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3JpZD4gQWNjZXNzaWJpbGl0eUFSSUFHcmlk
OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEFjY2Vzc2liaWxpdHlBUklBR3JpZChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlB
UklBR3JpZCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlBUklBR3JpZChyZW5kZXJlcik7CisgICAg
b2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNz
aWJpbGl0eUFSSUFHcmlkOjphZGRDaGlsZChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjaGlsZCwgSGFz
aFNldDxBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4mIGFwcGVuZGVkUm93cywgdW5zaWduZWQmIGNvbHVt
bkNvdW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
QVJJQUdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlBUklBR3JpZC5oCShyZXZpc2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw4IEBAIHByaXZhdGU6CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
QWNjZXNzaWJpbGl0eUFSSUFHcmlkPiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVh
bCB+QWNjZXNzaWJpbGl0eUFSSUFHcmlkKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOwog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FyaWFUYWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0gICAgCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAJKHJldmlzaW9uIDEyMzE2OCkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2Vs
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDkgQEAgQWNjZXNzaWJpbGl0eUFSSUFH
cmlkQ2VsbDo6fkFjY2Vzc2liaWxpdAogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGw+IEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlk
Q2VsbChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwqIG9iaiA9IG5l
dyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdCogQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cGFyZW50VGFibGUoKSBjb25zdApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFH
cmlkUm93LmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3
ICs0OCw5IEBAIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6fkFjY2Vzc2liaWxpdHkKIAogUGFz
c1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c+IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJv
dzo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmls
aXR5QVJJQUdyaWRSb3cqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cocmVuZGVy
ZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBi
b29sIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6aXNBUklBVHJlZUdyaWRSb3coKSBjb25zdApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUFsbEluT25lLmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIgogI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9scy5jcHAiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwIgogI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlTY3JvbGxW
aWV3LmNwcCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUxpc3QuY3BwCShyZXZpc2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NyArNTAsOSBAQCBBY2Nlc3NpYmlsaXR5TGlzdDo6fkFjY2Vzc2liaWxpdHlMaXN0KCkKIAogUGFz
c1JlZlB0cjxBY2Nlc3NpYmlsaXR5TGlzdD4gQWNjZXNzaWJpbGl0eUxpc3Q6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJp
bGl0eUxpc3QocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5TGlzdCogb2JqID0gbmV3IEFj
Y2Vzc2liaWxpdHlMaXN0KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4g
YWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5TGlzdDo6YWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDkgQEAgQWNjZXNzaWJpbGl0eUxpc3RCb3g6On5BY2Nl
c3NpYmlsaXR5TGlzdAogICAgIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TGlzdEJveD4gQWNj
ZXNzaWJpbGl0eUxpc3RCb3g6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eUxpc3RCb3gocmVuZGVyZXIpKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5TGlzdEJveCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlMaXN0Qm94KHJl
bmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0K
ICAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3g6OmNhblNldFNlbGVjdGVkQ2hpbGRyZW5B
dHRyaWJ1dGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHJldmlzaW9uIDEy
MzE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlh
Q29udHJvbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2NywxMSBAQCBQYXNzUmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liCiAgICAgY2FzZSBNZWRpYUNvbnRyb2xzUGFu
ZWw6CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6
Y3JlYXRlKHJlbmRlcmVyKTsKIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbChyZW5kZXJlcikpOworICAgIGRlZmF1bHQ6
IHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbCogb2JqID0gbmV3IEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2wocmVuZGVyZXIpOworICAgICAgICBvYmotPmluaXQoKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTIwNyw3
ICsyMTAsOSBAQCBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6QWNjCiAKIFBh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHND
b250YWluZXI6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXIocmVuZGVyZXIp
KTsKKyAgICBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lciogb2JqID0gbmV3IEFj
Y2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVyKTsKKyAgICBvYmotPmlu
aXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjphY2Nlc3NpYmlsaXR5RGVzY3JpcHRpb24oKSBjb25z
dApAQCAtMjUxLDcgKzI1Niw5IEBAIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpBY2Nlc3Np
YmlsaXQKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVk
aWFUaW1lbGluZTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShyZW5kZXJlcikpOworICAg
IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlh
VGltZWxpbmUocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJl
ZihvYmopOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OnZhbHVlRGVz
Y3JpcHRpb24oKSBjb25zdApAQCAtMjgxLDcgKzI4OCw5IEBAIEFjY2Vzc2liaWxpdHlNZWRpYVRp
bWVEaXNwbGF5OjpBY2Nlc3NpYmkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBB
Y2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlz
cGxheShyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KiBvYmog
PSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXkocmVuZGVyZXIpOworICAgIG9iai0+
aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlNZWRpYVRpbWVEaXNwbGF5OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5jcHAJKHJldmlzaW9uIDEyMzE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsMTMgQEAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0OjpBY2Nlc3NpYmlsaXR5TWVudQogewogfQog
CitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlNZW51TGlzdD4gQWNjZXNzaWJpbGl0eU1lbnVMaXN0
OjpjcmVhdGUoUmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKQoreworICAgIEFjY2Vzc2liaWxpdHlN
ZW51TGlzdCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlNZW51TGlzdChyZW5kZXJlcik7CisgICAg
b2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7Cit9CisKIGJvb2wgQWNjZXNz
aWJpbGl0eU1lbnVMaXN0OjpwcmVzcygpIGNvbnN0CiB7CiAgICAgUmVuZGVyTWVudUxpc3QqIG1l
bnVMaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihtX3JlbmRlcmVyKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVu
dUxpc3QuaAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QCBjbGFzcyBSZW5kZXJNZW51TGlzdDsKIAogY2xhc3MgQWNjZXNzaWJpbGl0eU1lbnVMaXN0IDog
cHVibGljIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlNZW51TGlzdD4gY3JlYXRlKFJlbmRlck1lbnVMaXN0KiBy
ZW5kZXJlcikgeyByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZW51TGlzdChyZW5k
ZXJlcikpOyB9CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU1lbnVMaXN0PiBj
cmVhdGUoUmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bGxhcHNlZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBwcmVzcygpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
ODcgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxMiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKgorKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiAg
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oIgorCisjaW5jbHVkZSAiQVhP
YmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlJbWFnZU1hcExpbmsuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlT
cGluQnV0dG9uLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCisjaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxBcmVhRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxGaWVsZFNldEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MRnJhbWVFbGVtZW50QmFzZS5oIgorI2luY2x1ZGUgIkhUTUxJbWFn
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TExhYmVsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMZWdlbmRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE1hcEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MT3B0R3JvdXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MVGV4dEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1
bHQuaCIKKyNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdzLmgiCisjaW5jbHVkZSAiTWF0aE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dENv
bnRyb2xJbm5lckVsZW1lbnRzLmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKKyNpbmNsdWRlICJ2aXNpYmxl
X3VuaXRzLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1l
cy5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdChOb2RlKiBub2RlKQorICAgIDogQWNjZXNzaWJpbGl0eU9iamVj
dCgpCisgICAgLCBtX2FyaWFSb2xlKFVua25vd25Sb2xlKQorICAgICwgbV9jaGlsZHJlbkRpcnR5
KGZhbHNlKQorICAgICwgbV9yb2xlRm9yTVNBQShVbmtub3duUm9sZSkKKyAgICAsIG1fbm9kZShu
b2RlKQoreworfQorCitBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNEZXRhY2hlZCgpKTsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6aW5pdCgpCit7CisgICAgbV9yb2xlID0gZGV0ZXJtaW5lQWNjZXNz
aWJpbGl0eVJvbGUoKTsKK30KKworUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4g
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNyZWF0ZShOb2RlKiBub2RlKQoreworICAgIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qobm9k
ZSk7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7Cit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGFjaCgpCit7CisgICAgY2xlYXJDaGlsZHJl
bigpOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaCgpOworICAgIG1fbm9kZSA9IDA7
Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNoaWxkcmVuQ2hhbmdlZCgpCit7
CisgICAgLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgYXMgYSBxdWljayB3YXkgb2YgbWFya2luZyBh
IHBvcnRpb24gb2YgdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBkaXJ0eS4KKyAgICBpZiAoIW5vZGUo
KSAmJiAhcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXhPYmplY3RDYWNoZSgp
LT5wb3N0Tm90aWZpY2F0aW9uKHRoaXMsIGRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYQ2hp
bGRyZW5DaGFuZ2VkLCB0cnVlKTsKKworICAgIC8vIEdvIHVwIHRoZSBhY2Nlc3NpYmlsaXR5IHBh
cmVudCBjaGFpbiwgYnV0IG9ubHkgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMuIFRoaXMg
bWV0aG9kIGlzCisgICAgLy8gY2FsbGVkIGR1cmluZyByZW5kZXIgbGF5b3V0cywgbWluaW1hbCB3
b3JrIHNob3VsZCBiZSBkb25lLiAKKyAgICAvLyBJZiBBWCBlbGVtZW50cyBhcmUgY3JlYXRlZCBu
b3csIHRoZXkgY291bGQgaW50ZXJyb2dhdGUgdGhlIHJlbmRlciB0cmVlIHdoaWxlIGl0J3MgaW4g
YSBmdW5reSBzdGF0ZS4KKyAgICAvLyBBdCB0aGUgc2FtZSB0aW1lLCBwcm9jZXNzIEFSSUEgbGl2
ZSByZWdpb24gY2hhbmdlcy4KKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IHRoaXM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RJZkV4aXN0cygpKSB7
CisgICAgICAgIHBhcmVudC0+c2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCk7CisKKyAgICAgICAg
Ly8gVGhlc2Ugbm90aWZpY2F0aW9ucyBhbHdheXMgbmVlZCB0byBiZSBzZW50IGJlY2F1c2Ugc2Ny
ZWVucmVhZGVycyBhcmUgcmVsaWFudCBvbiB0aGVtIHRvIHBlcmZvcm0uIAorICAgICAgICAvLyBJ
biBvdGhlciB3b3JkcywgdGhleSBuZWVkIHRvIGJlIHNlbnQgZXZlbiB3aGVuIHRoZSBzY3JlZW4g
cmVhZGVyIGhhcyBub3QgYWNjZXNzZWQgdGhpcyBsaXZlIHJlZ2lvbiBzaW5jZSB0aGUgbGFzdCB1
cGRhdGUuCisKKyAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IHN1cHBvcnRzIEFSSUEgbGl2ZSBy
ZWdpb25zLCB0aGVuIG5vdGlmeSB0aGUgQVQgb2YgY2hhbmdlcy4KKyAgICAgICAgaWYgKHBhcmVu
dC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKQorICAgICAgICAgICAgYXhPYmplY3RDYWNoZSgp
LT5wb3N0Tm90aWZpY2F0aW9uKHBhcmVudCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9iamVjdENh
Y2hlOjpBWExpdmVSZWdpb25DaGFuZ2VkLCB0cnVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIElm
IHRoaXMgZWxlbWVudCBpcyBhbiBBUklBIHRleHQgY29udHJvbCwgbm90aWZ5IHRoZSBBVCBvZiBj
aGFuZ2VzLgorICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYmICFwYXJl
bnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPnJlbmRlcmVySXNF
ZGl0YWJsZSgpKQorICAgICAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9u
KHBhcmVudCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdl
ZCwgdHJ1ZSk7CisgICAgfQorfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp1cGRh
dGVBY2Nlc3NpYmlsaXR5Um9sZSgpCit7CisgICAgYm9vbCBpZ25vcmVkU3RhdHVzID0gYWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpOworICAgIG1fcm9sZSA9IGRldGVybWluZUFjY2Vzc2liaWxpdHlS
b2xlKCk7CisgICAgCisgICAgLy8gVGhlIEFYIGhpZXJhcmNoeSBvbmx5IG5lZWRzIHRvIGJlIHVw
ZGF0ZWQgaWYgdGhlIGlnbm9yZWQgc3RhdHVzIG9mIGFuIGVsZW1lbnQgaGFzIGNoYW5nZWQuCisg
ICAgaWYgKGlnbm9yZWRTdGF0dXMgIT0gYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQorICAgICAg
ICBjaGlsZHJlbkNoYW5nZWQoKTsKK30KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpmaXJzdENoaWxkKCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgTm9kZSogZmlyc3RDaGlsZCA9IG5vZGUo
KS0+Zmlyc3RDaGlsZCgpOworCisgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShmaXJzdENo
aWxkKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
Omxhc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIE5vZGUqIGxhc3RDaGlsZCA9IG5vZGUoKS0+bGFzdENoaWxkKCk7CisgICAg
aWYgKCFsYXN0Q2hpbGQpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBheE9i
amVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxhc3RDaGlsZCk7Cit9CisKK0FjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcoKSBjb25zdAor
eworICAgIGlmICghbm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIHByZXZp
b3VzU2libGluZyA9IG5vZGUoKS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgaWYgKCFwcmV2aW91
c1NpYmxpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUo
KS0+Z2V0T3JDcmVhdGUocHJldmlvdXNTaWJsaW5nKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiBuZXh0U2libGluZyA9
IG5vZGUoKS0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoIW5leHRTaWJsaW5nKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKG5leHRT
aWJsaW5nKTsKK30KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBhcmVu
dE9iamVjdCgpOworfQorICAgIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OnBhcmVudE9iamVjdCgpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgTm9kZSogcGFyZW50T2JqID0gbm9kZSgpLT5wYXJlbnROb2Rl
KCk7CisgICAgaWYgKHBhcmVudE9iaikKKyAgICAgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+
Z2V0T3JDcmVhdGUocGFyZW50T2JqKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworTGF5b3V0
UmVjdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZWxlbWVudFJlY3QoKSBjb25zdAoreworICAg
IHJldHVybiBib3VuZGluZ0JveFJlY3QoKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6c2V0Tm9kZShOb2RlKiBub2RlKQoreworICAgIG1fbm9kZSA9IG5vZGU7Cit9CisKK0Rv
Y3VtZW50KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQoKSBjb25zdAoreworICAg
IGlmICghbm9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbm9kZSgpLT5kb2N1
bWVudCgpOworfQorCitBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQoreworICAgIGlmICghbm9kZSgpKQorICAgICAg
ICByZXR1cm4gVW5rbm93blJvbGU7CisKKyAgICBtX2FyaWFSb2xlID0gZGV0ZXJtaW5lQXJpYVJv
bGVBdHRyaWJ1dGUoKTsKKyAgICAKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZSA9IGFy
aWFSb2xlQXR0cmlidXRlKCk7CisgICAgaWYgKGFyaWFSb2xlICE9IFVua25vd25Sb2xlKQorICAg
ICAgICByZXR1cm4gYXJpYVJvbGU7CisKKyAgICBpZiAobm9kZSgpLT5pc0xpbmsoKSkKKyAgICAg
ICAgcmV0dXJuIFdlYkNvcmVMaW5rUm9sZTsKKyAgICBpZiAobm9kZSgpLT5pc1RleHROb2RlKCkp
CisgICAgICAgIHJldHVybiBTdGF0aWNUZXh0Um9sZTsKKyAgICBpZiAobm9kZSgpLT5oYXNUYWdO
YW1lKGJ1dHRvblRhZykpCisgICAgICAgIHJldHVybiBhcmlhSGFzUG9wdXAoKSA/IFBvcFVwQnV0
dG9uUm9sZSA6IEJ1dHRvblJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShpbnB1dFRh
ZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAgICAgaWYgKGlucHV0LT5pc0NoZWNrYm94KCkp
CisgICAgICAgICAgICByZXR1cm4gQ2hlY2tCb3hSb2xlOworICAgICAgICBpZiAoaW5wdXQtPmlz
UmFkaW9CdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBSYWRpb0J1dHRvblJvbGU7CisgICAg
ICAgIGlmIChpbnB1dC0+aXNUZXh0QnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm4gYXJpYUhh
c1BvcHVwKCkgPyBQb3BVcEJ1dHRvblJvbGUgOiBCdXR0b25Sb2xlOworICAgICAgICByZXR1cm4g
VGV4dEZpZWxkUm9sZTsKKyAgICB9CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShzZWxlY3RU
YWcpKSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3RFbGVtZW50ID0gdG9IVE1M
U2VsZWN0RWxlbWVudChub2RlKCkpOworICAgICAgICByZXR1cm4gc2VsZWN0RWxlbWVudC0+bXVs
dGlwbGUoKSA/IExpc3RSb2xlIDogUG9wVXBCdXR0b25Sb2xlOworICAgIH0KKyAgICBpZiAobm9k
ZSgpLT5pc0ZvY3VzYWJsZSgpKQorICAgICAgICByZXR1cm4gR3JvdXBSb2xlOworICAgIAorICAg
IHJldHVybiBVbmtub3duUm9sZTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
YWRkQ2hpbGRyZW4oKQoreworICAgIC8vIElmIHRoZSBuZWVkIHRvIGFkZCBtb3JlIGNoaWxkcmVu
IGluIGFkZGl0aW9uIHRvIGV4aXN0aW5nIGNoaWxkcmVuIGFyaXNlcywgCisgICAgLy8gY2hpbGRy
ZW5DaGFuZ2VkIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkLCBsZWF2aW5nIHRoZSBvYmplY3Qgd2l0
aCBubyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoIW1faGF2ZUNoaWxkcmVuKTsgCisgICAgCisgICAg
aWYgKCFtX25vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBvbmx5IHRpbWUgd2Ug
YWRkIGNoaWxkcmVuIGZyb20gdGhlIERPTSB0cmVlIHRvIGEgbm9kZSB3aXRoIGEgcmVuZGVyZXIg
aXMgd2hlbiBpdCdzIGEgY2FudmFzLgorICAgIGlmIChyZW5kZXJlcigpICYmICFtX25vZGUtPmhh
c1RhZ05hbWUoY2FudmFzVGFnKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1faGF2ZUNo
aWxkcmVuID0gdHJ1ZTsKKworICAgIGZvciAoTm9kZSogY2hpbGQgPSBtX25vZGUtPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVh
dGUoY2hpbGQpOworICAgICAgICBvYmotPmNsZWFyQ2hpbGRyZW4oKTsKKyAgICAgICAgaWYgKG9i
ai0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgY2hpbGRyZW4gPSBvYmotPmNoaWxkcmVuKCk7CisgICAgICAgICAgICBz
aXplX3QgbGVuZ3RoID0gY2hpbGRyZW4uc2l6ZSgpOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVu
ZChjaGlsZHJlbltpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQob2Jq
LT5wYXJlbnRPYmplY3QoKSA9PSB0aGlzKTsKKyAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5k
KG9iaik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JvbGUg
PT0gVW5rbm93blJvbGU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmNhblNl
dEZvY3VzQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgp
OworCisgICAgaWYgKGlzV2ViQXJlYSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICAvLyBOT1RFOiBJdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIHRvIGFzayB0aGUgZG9jdW1lbnQg
d2hldGhlciBzZXRGb2N1c2VkTm9kZSgpIHdvdWxkCisgICAgLy8gZG8gYW55dGhpbmcuIEZvciBl
eGFtcGxlLCBzZXRGb2N1c2VkTm9kZSgpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY3VycmVudCBm
b2N1c2VkCisgICAgLy8gbm9kZSB3aWxsIG5vdCByZWxpbnF1aXNoIHRoZSBmb2N1cy4KKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChub2RlLT5pc0VsZW1l
bnROb2RlKCkgJiYgIXN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNv
bnRyb2woKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG5vZGUtPnN1cHBv
cnRzRm9jdXMoKTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGFyaWFSb2xlID0gZ2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKKyAgICBpZiAoYXJp
YVJvbGUuaXNOdWxsKCkgfHwgYXJpYVJvbGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gVW5r
bm93blJvbGU7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGFyaWFSb2xlVG9X
ZWJDb3JlUm9sZShhcmlhUm9sZSk7CisKKyAgICAvLyBBUklBIHN0YXRlcyBpZiBhbiBpdGVtIGNh
biBnZXQgZm9jdXMsIGl0IHNob3VsZCBub3QgYmUgcHJlc2VudGF0aW9uYWwuCisgICAgaWYgKHJv
bGUgPT0gUHJlc2VudGF0aW9uYWxSb2xlICYmIGNhblNldEZvY3VzQXR0cmlidXRlKCkpCisgICAg
ICAgIHJldHVybiBVbmtub3duUm9sZTsKKyAgICAKKyAgICBpZiAocm9sZSA9PSBCdXR0b25Sb2xl
ICYmIGFyaWFIYXNQb3B1cCgpKQorICAgICAgICByb2xlID0gUG9wVXBCdXR0b25Sb2xlOworCisg
ICAgaWYgKHJvbGUgPT0gVGV4dEFyZWFSb2xlICYmICFhcmlhSXNNdWx0aWxpbmUoKSkKKyAgICAg
ICAgcm9sZSA9IFRleHRGaWVsZFJvbGU7CisKKyAgICByb2xlID0gcmVtYXBBcmlhUm9sZUR1ZVRv
UGFyZW50KHJvbGUpOworICAgIAorICAgIGlmIChyb2xlKQorICAgICAgICByZXR1cm4gcm9sZTsK
KworICAgIHJldHVybiBVbmtub3duUm9sZTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9hcmlhUm9sZTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OnJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKSBj
b25zdAoreworICAgIC8vIFNvbWUgb2JqZWN0cyBjaGFuZ2UgdGhlaXIgcm9sZSBiYXNlZCBvbiB0
aGVpciBwYXJlbnQuCisgICAgLy8gSG93ZXZlciwgYXNraW5nIGZvciB0aGUgdW5pZ25vcmVkUGFy
ZW50IGNhbGxzIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSwgd2hpY2ggY2FuIHRyaWdnZXIgYSBs
b29wLiAKKyAgICAvLyBXaGlsZSBpbnNpZGUgdGhlIGNhbGwgc3RhY2sgb2YgY3JlYXRpbmcgYW4g
ZWxlbWVudCwgd2UgbmVlZCB0byBhdm9pZCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MTc0CisKKyAgICBp
ZiAocm9sZSAhPSBMaXN0Qm94T3B0aW9uUm9sZSAmJiByb2xlICE9IE1lbnVJdGVtUm9sZSkKKyAg
ICAgICAgcmV0dXJuIHJvbGU7CisgICAgCisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnQgPSBwYXJlbnRPYmplY3QoKTsgcGFyZW50ICYmICFwYXJlbnQtPmFjY2Vzc2liaWxpdHlJ
c0lnbm9yZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgeworICAgICAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRBcmlhUm9sZSA9IHBhcmVudC0+YXJpYVJvbGVBdHRyaWJ1
dGUoKTsKKworICAgICAgICAvLyBTZWxlY3RzIGFuZCBsaXN0Ym94ZXMgYm90aCBoYXZlIG9wdGlv
bnMgYXMgY2hpbGQgcm9sZXMsIGJ1dCB0aGV5IG1hcCB0byBkaWZmZXJlbnQgcm9sZXMgd2l0aGlu
IFdlYkNvcmUuCisgICAgICAgIGlmIChyb2xlID09IExpc3RCb3hPcHRpb25Sb2xlICYmIHBhcmVu
dEFyaWFSb2xlID09IE1lbnVSb2xlKQorICAgICAgICAgICAgcmV0dXJuIE1lbnVJdGVtUm9sZTsK
KyAgICAgICAgLy8gQW4gYXJpYSAibWVudWl0ZW0iIG1heSBtYXAgdG8gTWVudUJ1dHRvbiBvciBN
ZW51SXRlbSBkZXBlbmRpbmcgb24gaXRzIHBhcmVudC4KKyAgICAgICAgaWYgKHJvbGUgPT0gTWVu
dUl0ZW1Sb2xlICYmIHBhcmVudEFyaWFSb2xlID09IEdyb3VwUm9sZSkKKyAgICAgICAgICAgIHJl
dHVybiBNZW51QnV0dG9uUm9sZTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHRoZSBwYXJlbnQg
aGFkIGEgZGlmZmVyZW50IHJvbGUsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjb250aW51ZSBzZWFy
Y2hpbmcgdXAgdGhlIGNoYWluLgorICAgICAgICBpZiAocGFyZW50QXJpYVJvbGUpCisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHJvbGU7Cit9ICAgCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3RfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCisKKyNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCisjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBB
WE9iamVjdENhY2hlOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEZyYW1lOworY2xhc3MgRnJhbWVW
aWV3OworY2xhc3MgSGl0VGVzdFJlc3VsdDsKK2NsYXNzIEhUTUxBbmNob3JFbGVtZW50OworY2xh
c3MgSFRNTEFyZWFFbGVtZW50OworY2xhc3MgSFRNTEVsZW1lbnQ7CitjbGFzcyBIVE1MTGFiZWxF
bGVtZW50OworY2xhc3MgSFRNTE1hcEVsZW1lbnQ7CitjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsK
K2NsYXNzIEludFBvaW50OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE5vZGU7CitjbGFzcyBSZW5k
ZXJMaXN0Qm94OworY2xhc3MgUmVuZGVyVGV4dENvbnRyb2w7CitjbGFzcyBSZW5kZXJWaWV3Owor
Y2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKK2NsYXNzIFdpZGdldDsKKyAgICAKK2NsYXNzIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0IDogcHVibGljIEFjY2Vzc2liaWxpdHlPYmplY3QgeworcHJvdGVj
dGVkOgorICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KE5vZGUqKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdD4gY3JlYXRlKE5vZGUqKTsK
KyAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpOworCisgICAgdmlydHVhbCB2
b2lkIGluaXQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRG
b2N1c0F0dHJpYnV0ZSgpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9i
amVjdCogZmlyc3RDaGlsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVj
dCogbGFzdENoaWxkKCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
cmV2aW91c1NpYmxpbmcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IG5leHRTaWJsaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnRPYmplY3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudE9iamVjdElmRXhpc3RzKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE5vZGUoTm9kZSopOwor
ICAgIHZpcnR1YWwgTm9kZSogbm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIHZp
cnR1YWwgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGV0
YWNoKCk7CisgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdlZCgpOworICAgIHZvaWQgdXBk
YXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKKworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50
UmVjdCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgQWNjZXNzaWJpbGl0eVJvbGUgbV9hcmlh
Um9sZTsKKyAgICBib29sIG1fY2hpbGRyZW5EaXJ0eTsKKyAgICBtdXRhYmxlIEFjY2Vzc2liaWxp
dHlSb2xlIG1fcm9sZUZvck1TQUE7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNEZXRhY2hlZCgpIGNv
bnN0IHsgcmV0dXJuICFtX25vZGU7IH0KKworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJvbGUg
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRy
ZW4oKTsKKyAgICB2aXJ0dWFsIGJvb2wgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0Owor
ICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7CisgICAgQWNj
ZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKKyAgICBB
Y2Nlc3NpYmlsaXR5Um9sZSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQoQWNjZXNzaWJpbGl0eVJv
bGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIE5vZGUqIG1fbm9kZTsKK307CisKK2lubGluZSBB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCogdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCo+KG9iamVjdCk7Cit9CisKK2lubGluZSBjb25zdCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdCogdG9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChjb25zdCBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBvYmplY3QpCit7CisgICAgQVNTRVJUKCFvYmplY3QgfHwgb2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCo+KG9iamVjdCk7Cit9CisKKy8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdChjb25zdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCopOworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExG
CgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmgJKHJldmlzaW9uIDEyMzE2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3
LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlP
YmplY3Q+ID4gQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yOwogICAgIAorICAgIHZpcnR1YWwg
Ym9vbCBpc0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0g
ICAgCiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVNjcm9s
bGJhcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNz
aWJpbGl0eVNjcm9sbFZpZXcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yLmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw3ICs0MSw5IEBAIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRv
cjo6QWNjZXNzaWIKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I+
IEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKFJlbmRlclByb2dyZXNzKiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlQcm9ncmVz
c0luZGljYXRvcihyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRv
ciogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcihyZW5kZXJlcik7Cisg
ICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNj
ZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsMTQgKzkzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6QWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQotICAgIDogQWNjZXNz
aWJpbGl0eU9iamVjdCgpCisgICAgOiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChyZW5kZXJlci0+
bm9kZSgpKQogICAgICwgbV9yZW5kZXJlcihyZW5kZXJlcikKLSAgICAsIG1fYXJpYVJvbGUoVW5r
bm93blJvbGUpCi0gICAgLCBtX2NoaWxkcmVuRGlydHkoZmFsc2UpCi0gICAgLCBtX3JvbGVGb3JN
U0FBKFVua25vd25Sb2xlKQogewotICAgIG1fcm9sZSA9IGRldGVybWluZUFjY2Vzc2liaWxpdHlS
b2xlKCk7Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgbV9yZW5kZXJlci0+c2V0SGFzQVhPYmplY3Qo
dHJ1ZSk7CiAjZW5kaWYKQEAgLTExMSwyMSArMTA2LDI3IEBAIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6On5BY2Nlc3NpYmlsaXQKICAgICBBU1NFUlQoaXNEZXRhY2hlZCgpKTsKIH0KIAordm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KCkKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aW5pdCgpOworfQorCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q+IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIG9iaiA9IG5l
dyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpkZXRhY2goKQogewotICAgIGNsZWFyQ2hpbGRyZW4oKTsKLSAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpkZXRhY2goKTsKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0YWNo
KCk7CiAgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgIGlmIChtX3JlbmRlcmVyKQogICAgICAgICBt
X3JlbmRlcmVyLT5zZXRIYXNBWE9iamVjdChmYWxzZSk7CiAjZW5kaWYKLSAgICBtX3JlbmRlcmVy
ID0gMDsgICAgCisgICAgbV9yZW5kZXJlciA9IDA7CiB9CiAKIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW5kZXJCb3hNb2RlbE9iamVjdCgpIGNvbnN0
CkBAIC0xMzUsNiArMTM2LDEyIEBAIFJlbmRlckJveE1vZGVsT2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGUKICAgICByZXR1cm4gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChtX3JlbmRlcmVyKTsKIH0K
IAordm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJlcihSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQoreworICAgIG1fcmVuZGVyZXIgPSByZW5kZXJlcjsKKyAgICBzZXROb2Rl
KHJlbmRlcmVyLT5ub2RlKCkpOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVXaXRo
Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogb2JqZWN0KQogewogICAgIGlmICghb2JqZWN0LT5p
c0JveE1vZGVsT2JqZWN0KCkpCkBAIC0zMDg0LDc1ICszMDkxLDYgQEAgQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlcgogICAgIHJldHVybiAwOwogfQogCi1BY2Nlc3NpYmls
aXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpyZW1hcEFyaWFSb2xlRHVlVG9QYXJl
bnQoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkgY29uc3QKLXsKLSAgICAvLyBTb21lIG9iamVjdHMg
Y2hhbmdlIHRoZWlyIHJvbGUgYmFzZWQgb24gdGhlaXIgcGFyZW50LgotICAgIC8vIEhvd2V2ZXIs
IGFza2luZyBmb3IgdGhlIHVuaWdub3JlZFBhcmVudCBjYWxscyBhY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCksIHdoaWNoIGNhbiB0cmlnZ2VyIGEgbG9vcC4gCi0gICAgLy8gV2hpbGUgaW5zaWRlIHRo
ZSBjYWxsIHN0YWNrIG9mIGNyZWF0aW5nIGFuIGVsZW1lbnQsIHdlIG5lZWQgdG8gYXZvaWQgYWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCgpLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTE3NAotCi0gICAgaWYgKHJvbGUgIT0gTGlzdEJveE9wdGlvblJvbGUg
JiYgcm9sZSAhPSBNZW51SXRlbVJvbGUpCi0gICAgICAgIHJldHVybiByb2xlOwotICAgIAotICAg
IGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVu
dCAmJiAhcGFyZW50LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50T2JqZWN0KCkpIHsKLSAgICAgICAgQWNjZXNzaWJpbGl0eVJvbGUgcGFyZW50QXJpYVJv
bGUgPSBwYXJlbnQtPmFyaWFSb2xlQXR0cmlidXRlKCk7Ci0KLSAgICAgICAgLy8gU2VsZWN0cyBh
bmQgbGlzdGJveGVzIGJvdGggaGF2ZSBvcHRpb25zIGFzIGNoaWxkIHJvbGVzLCBidXQgdGhleSBt
YXAgdG8gZGlmZmVyZW50IHJvbGVzIHdpdGhpbiBXZWJDb3JlLgotICAgICAgICBpZiAocm9sZSA9
PSBMaXN0Qm94T3B0aW9uUm9sZSAmJiBwYXJlbnRBcmlhUm9sZSA9PSBNZW51Um9sZSkKLSAgICAg
ICAgICAgIHJldHVybiBNZW51SXRlbVJvbGU7Ci0gICAgICAgIC8vIEFuIGFyaWEgIm1lbnVpdGVt
IiBtYXkgbWFwIHRvIE1lbnVCdXR0b24gb3IgTWVudUl0ZW0gZGVwZW5kaW5nIG9uIGl0cyBwYXJl
bnQuCi0gICAgICAgIGlmIChyb2xlID09IE1lbnVJdGVtUm9sZSAmJiBwYXJlbnRBcmlhUm9sZSA9
PSBHcm91cFJvbGUpCi0gICAgICAgICAgICByZXR1cm4gTWVudUJ1dHRvblJvbGU7Ci0gICAgICAg
IAotICAgICAgICAvLyBJZiB0aGUgcGFyZW50IGhhZCBhIGRpZmZlcmVudCByb2xlLCB0aGVuIHdl
IGRvbid0IG5lZWQgdG8gY29udGludWUgc2VhcmNoaW5nIHVwIHRoZSBjaGFpbi4KLSAgICAgICAg
aWYgKHBhcmVudEFyaWFSb2xlKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiByb2xlOwotfQotICAgIAotQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6ZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdAotewotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYXJpYVJvbGUgPSBnZXRBdHRyaWJ1dGUocm9sZUF0dHIpOwotICAg
IGlmIChhcmlhUm9sZS5pc051bGwoKSB8fCBhcmlhUm9sZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBVbmtub3duUm9sZTsKLSAgICAKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXJp
YVJvbGVUb1dlYkNvcmVSb2xlKGFyaWFSb2xlKTsKLQotICAgIC8vIEFSSUEgc3RhdGVzIGlmIGFu
IGl0ZW0gY2FuIGdldCBmb2N1cywgaXQgc2hvdWxkIG5vdCBiZSBwcmVzZW50YXRpb25hbC4KLSAg
ICBpZiAocm9sZSA9PSBQcmVzZW50YXRpb25hbFJvbGUgJiYgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUo
KSkKLSAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOwotICAgIAotICAgIGlmIChyb2xlID09IEJ1
dHRvblJvbGUgJiYgYXJpYUhhc1BvcHVwKCkpCi0gICAgICAgIHJvbGUgPSBQb3BVcEJ1dHRvblJv
bGU7Ci0KLSAgICBpZiAocm9sZSA9PSBUZXh0QXJlYVJvbGUgJiYgIWFyaWFJc011bHRpbGluZSgp
KQotICAgICAgICByb2xlID0gVGV4dEZpZWxkUm9sZTsKLQotICAgIHJvbGUgPSByZW1hcEFyaWFS
b2xlRHVlVG9QYXJlbnQocm9sZSk7Ci0gICAgCi0gICAgaWYgKHJvbGUpCi0gICAgICAgIHJldHVy
biByb2xlOwotCi0gICAgcmV0dXJuIFVua25vd25Sb2xlOwotfQotCi1BY2Nlc3NpYmlsaXR5Um9s
ZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fYXJpYVJvbGU7Ci19Ci0gICAgCi12b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCkKLXsKLSAgICBib29sIGlnbm9yZWRT
dGF0dXMgPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7Ci0gICAgbV9yb2xlID0gZGV0ZXJtaW5l
QWNjZXNzaWJpbGl0eVJvbGUoKTsKLSAgICAKLSAgICAvLyBUaGUgQVggaGllcmFyY2h5IG9ubHkg
bmVlZHMgdG8gYmUgdXBkYXRlZCBpZiB0aGUgaWdub3JlZCBzdGF0dXMgb2YgYW4gZWxlbWVudCBo
YXMgY2hhbmdlZC4KLSAgICBpZiAoaWdub3JlZFN0YXR1cyAhPSBhY2Nlc3NpYmlsaXR5SXNJZ25v
cmVkKCkpCi0gICAgICAgIGNoaWxkcmVuQ2hhbmdlZCgpOwotfQotICAgIAogYm9vbCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0Ojppc0Rlc2NlbmRhbnRPZkVsZW1lbnRUeXBlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUpIGNvbnN0CiB7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIHBhcmVu
dCA9IG1fcmVuZGVyZXItPnBhcmVudCgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50
KCkpIHsKQEAgLTMzODksMjUgKzMzMjcsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFyaWFSb2xlCiAgICAgfQogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNhblNldEZvY3VzQXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICBOb2RlKiBub2RlID0gdGhpcy0+
bm9kZSgpOwotCi0gICAgaWYgKGlzV2ViQXJlYSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAKLSAgICAvLyBOT1RFOiBJdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIHRvIGFzayB0aGUgZG9j
dW1lbnQgd2hldGhlciBzZXRGb2N1c2VkTm9kZSgpIHdvdWxkCi0gICAgLy8gZG8gYW55dGhpbmcu
ICBGb3IgZXhhbXBsZSwgc2V0Rm9jdXNlZE5vZGUoKSB3aWxsIGRvIG5vdGhpbmcgaWYgdGhlIGN1
cnJlbnQgZm9jdXNlZAotICAgIC8vIG5vZGUgd2lsbCBub3QgcmVsaW5xdWlzaCB0aGUgZm9jdXMu
Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobm9kZS0+
aXNFbGVtZW50Tm9kZSgpICYmICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRW5hYmxl
ZEZvcm1Db250cm9sKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBub2Rl
LT5zdXBwb3J0c0ZvY3VzKCk7Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3QKIHsKICAgICAvLyBBbiBvYmplY3Qg
Y2FuIGJlIGV4cGFuZGVkIGlmIGl0IGFyaWEtZXhwYW5kZWQgaXMgdHJ1ZSBvciBmYWxzZS4KQEAg
LTM0NTQsMzkgKzMzNzMsMTUgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb250
ZW50QwogICAgIH0KIH0KICAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2hp
bGRyZW5DaGFuZ2VkKCkKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBpcyBtZWFudCBhcyBhIHF1aWNr
IHdheSBvZiBtYXJraW5nIGEgcG9ydGlvbiBvZiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGRpcnR5
LgotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXhPYmplY3RD
YWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHRoaXMsIGRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6
OkFYQ2hpbGRyZW5DaGFuZ2VkLCB0cnVlKTsKLQotICAgIC8vIEdvIHVwIHRoZSBhY2Nlc3NpYmls
aXR5IHBhcmVudCBjaGFpbiwgYnV0IG9ubHkgaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBleGlzdHMu
IFRoaXMgbWV0aG9kIGlzCi0gICAgLy8gY2FsbGVkIGR1cmluZyByZW5kZXIgbGF5b3V0cywgbWlu
aW1hbCB3b3JrIHNob3VsZCBiZSBkb25lLiAKLSAgICAvLyBJZiBBWCBlbGVtZW50cyBhcmUgY3Jl
YXRlZCBub3csIHRoZXkgY291bGQgaW50ZXJyb2dhdGUgdGhlIHJlbmRlciB0cmVlIHdoaWxlIGl0
J3MgaW4gYSBmdW5reSBzdGF0ZS4KLSAgICAvLyBBdCB0aGUgc2FtZSB0aW1lLCBwcm9jZXNzIEFS
SUEgbGl2ZSByZWdpb24gY2hhbmdlcy4KLSAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBh
cmVudCA9IHRoaXM7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3RJZkV4aXN0
cygpKSB7Ci0gICAgICAgIHBhcmVudC0+c2V0TmVlZHNUb1VwZGF0ZUNoaWxkcmVuKCk7Ci0KLSAg
ICAgICAgLy8gVGhlc2Ugbm90aWZpY2F0aW9ucyBhbHdheXMgbmVlZCB0byBiZSBzZW50IGJlY2F1
c2Ugc2NyZWVucmVhZGVycyBhcmUgcmVsaWFudCBvbiB0aGVtIHRvIHBlcmZvcm0uIAotICAgICAg
ICAvLyBJbiBvdGhlciB3b3JkcywgdGhleSBuZWVkIHRvIGJlIHNlbnQgZXZlbiB3aGVuIHRoZSBz
Y3JlZW4gcmVhZGVyIGhhcyBub3QgYWNjZXNzZWQgdGhpcyBsaXZlIHJlZ2lvbiBzaW5jZSB0aGUg
bGFzdCB1cGRhdGUuCi0KLSAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IHN1cHBvcnRzIEFSSUEg
bGl2ZSByZWdpb25zLCB0aGVuIG5vdGlmeSB0aGUgQVQgb2YgY2hhbmdlcy4KLSAgICAgICAgaWYg
KHBhcmVudC0+c3VwcG9ydHNBUklBTGl2ZVJlZ2lvbigpKQotICAgICAgICAgICAgYXhPYmplY3RD
YWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKHBhcmVudCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9i
amVjdENhY2hlOjpBWExpdmVSZWdpb25DaGFuZ2VkLCB0cnVlKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIElmIHRoaXMgZWxlbWVudCBpcyBhbiBBUklBIHRleHQgY29udHJvbCwgbm90aWZ5IHRoZSBB
VCBvZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5pc0FSSUFUZXh0Q29udHJvbCgpICYm
ICFwYXJlbnQtPmlzTmF0aXZlVGV4dENvbnRyb2woKSAmJiAhcGFyZW50LT5ub2RlKCktPnJlbmRl
cmVySXNFZGl0YWJsZSgpKQotICAgICAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZp
Y2F0aW9uKHBhcmVudCwgcGFyZW50LT5kb2N1bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWFZhbHVl
Q2hhbmdlZCwgdHJ1ZSk7Ci0gICAgfQotfQotICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXJlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIC8vIENhbnZhcyBpcyBhIHNwZWNpYWwg
Y2FzZTsgaXRzIHJvbGUgaXMgSW1hZ2VSb2xlIGJ1dCBpdCBpcyBhbGxvd2VkIHRvIGhhdmUgY2hp
bGRyZW4uCisgICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICAvLyBFbGVtZW50cyB0aGF0IHNob3VsZCBub3Qg
aGF2ZSBjaGlsZHJlbgogICAgIHN3aXRjaCAocm9sZVZhbHVlKCkpIHsKICAgICBjYXNlIEltYWdl
Um9sZToKQEAgLTM1NTksNiArMzQ1NCwxNSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmFkZFRleHRGCiAgICAgbV9jaGlsZHJlbi5hcHBlbmQoYXhTcGluQnV0dG9uKTsKIH0KIAor
dm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDYW52YXNDaGlsZHJlbigpCit7Cisg
ICAgLy8gSWYgaXQncyBhIGNhbnZhcywgaXQgd29uJ3QgaGF2ZSByZW5kZXJlZCBjaGlsZHJlbiwg
YnV0IGl0IG1pZ2h0IGhhdmUgYWNjZXNzaWJsZSBmYWxsYmFjayBjb250ZW50LgorICAgIGlmIChu
b2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpIHsKKyAgICAgICAgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQXR0YWNobWVudENoaWxk
cmVuKCkKIHsKICAgICBpZiAoIWlzQXR0YWNobWVudCgpKQpAQCAtMzU5NSwxMSArMzQ5OSw3IEBA
IHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGQKICAgICAvLyBJZiB0aGUg
bmVlZCB0byBhZGQgbW9yZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJl
biBhcmlzZXMsIAogICAgIC8vIGNoaWxkcmVuQ2hhbmdlZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxl
ZCwgbGVhdmluZyB0aGUgb2JqZWN0IHdpdGggbm8gY2hpbGRyZW4uCiAgICAgQVNTRVJUKCFtX2hh
dmVDaGlsZHJlbik7IAotICAgIAotICAgIC8vIG5vdGhpbmcgdG8gYWRkIGlmIHRoZXJlIGlzIG5v
IFJlbmRlck9iamVjdAotICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IAorCiAgICAgbV9oYXZlQ2hpbGRyZW4gPSB0cnVlOwogICAgIAogICAgIGlmICghY2FuSGF2ZUNo
aWxkcmVuKCkpCkBAIC0zNjA3LDcgKzM1MDcsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmFkZENoaWxkCiAgICAgCiAgICAgLy8gYWRkIGFsbCB1bmlnbm9yZWQgYWNjIGNoaWxk
cmVuCiAgICAgZm9yIChSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gZmlyc3RDaGls
ZCgpOyBvYmo7IG9iaiA9IG9iai0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAKICAgICAgICAg
Ly8gSWYgdGhlIHBhcmVudCBpcyBhc2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhl
biBlaXRoZXIgaXQncyB0aGUgZmlyc3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLCAK
ICAgICAgICAgLy8gb3IgaXRzIHZpc2liaWxpdHkgaGFzIGNoYW5nZWQuIEluIHRoZSBsYXR0ZXIg
Y2FzZSwgdGhpcyBjaGlsZCBtYXkgaGF2ZSBhIHN0YWxlIGNoaWxkIGNhY2hlZC4gCiAgICAgICAg
IC8vIFRoaXMgY2FuIHByZXZlbnQgYXJpYS1oaWRkZW4gY2hhbmdlcyBmcm9tIHdvcmtpbmcgY29y
cmVjdGx5LiBIZW5jZSwgd2hlbmV2ZXIgYSBwYXJlbnQgaXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5z
dXJlIGRhdGEgaXMgbm90IHN0YWxlLgpAQCAtMzYyNyw2ICszNTI2LDcgQEAgdm9pZCBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGlsZAogICAgIGFkZEF0dGFjaG1lbnRDaGlsZHJlbigp
OwogICAgIGFkZEltYWdlTWFwQ2hpbGRyZW4oKTsKICAgICBhZGRUZXh0RmllbGRDaGlsZHJlbigp
OworICAgIGFkZENhbnZhc0NoaWxkcmVuKCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdXBk
YXRlQXR0YWNobWVudFZpZXdQYXJlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdF9oCiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3RfaAogCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIFJlbmRlclZpZXc7
CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgV2lkZ2V0OwogICAgIAotY2xhc3MgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKK2Ns
YXNzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QgewogcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoUmVuZGVy
T2JqZWN0Kik7CiBwdWJsaWM6CkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlz
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAg
IHZpcnR1YWwgdm9pZCBpbml0KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQW5jaG9yKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0OwpAQCAtMTExLDcg
KzExMyw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2FtZVN0eWxlKFJlbmRlck9i
amVjdCopIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBjYW5TZXRUZXh0UmFuZ2VBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIGNhblNldFZhbHVlQXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNl
dEV4cGFuZGVkQXR0cmlidXRlKCkgY29uc3Q7CkBAIC0xNDksMTAgKzE1MCw4IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhcmlhT3duc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FSSUFPd25zKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0aW9uYWxDaGlsZHJl
bigpIGNvbnN0OwotICAgIHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKICAgICAKICAg
ICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uIHRoZSByb290IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRv
IGtpY2sgb2ZmIGEgaGl0IHRlc3QuCiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBh
Y2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMTY4LDE0ICsx
NjcsMTUgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50UmVjdCgpIGNv
bnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY2xpY2tQb2ludCgpOwogICAgIAotICAgIHZvaWQg
c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVy
ZXI7IH0KKyAgICB2b2lkIHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0KiByZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KICAg
ICBSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgRG9jdW1lbnQqIGRv
Y3VtZW50KCkgY29uc3Q7CisKICAgICBSZW5kZXJWaWV3KiB0b3BSZW5kZXJlcigpIGNvbnN0Owog
ICAgIFJlbmRlclRleHRDb250cm9sKiB0ZXh0Q29udHJvbCgpIGNvbnN0OwotICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0OwogICAgIEZyYW1lVmlldyogdG9wRG9jdW1lbnRGcmFtZVZpZXco
KSBjb25zdDsgIAogICAgIERvY3VtZW50KiB0b3BEb2N1bWVudCgpIGNvbnN0OwogICAgIEhUTUxM
YWJlbEVsZW1lbnQqIGxhYmVsRWxlbWVudENvbnRhaW5lcigpIGNvbnN0OwpAQCAtMjE0LDcgKzIx
NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGRldGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudENoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
YWRkQ2hpbGRyZW4oKTsKICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Q7
CkBAIC0yNjAsOCArMjU5LDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2Jq
ZWN0KiBtX3JlbmRlcmVyOwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fYXJpYVJvbGU7Ci0gICAg
Ym9vbCBtX2NoaWxkcmVuRGlydHk7CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJPYmplY3QoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KICAgICB2b2lk
IGFyaWFMYWJlbGVkQnlFbGVtZW50cyhWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29uc3Q7
CkBAIC0yNzEsNiArMjY4LDggQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBp
c0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcmVuZGVyZXI7IH0KIAorICAgIHZpcnR1YWwg
QWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKKwogcHJpdmF0
ZToKICAgICB2b2lkIGFyaWFMaXN0Ym94U2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW5WZWN0b3ImKTsKICAgICB2b2lkIGFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKEFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwpAQCAtMjg2LDkgKzI4NSw2IEBAIHByaXZhdGU6CiAK
ICAgICBFbGVtZW50KiBtZW51RWxlbWVudEZvck1lbnVCdXR0b24oKSBjb25zdDsKICAgICBFbGVt
ZW50KiBtZW51SXRlbUVsZW1lbnRGb3JNZW51KCkgY29uc3Q7Ci0gICAgQWNjZXNzaWJpbGl0eVJv
bGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBk
ZXRlcm1pbmVBcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlSb2xl
IHJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CiAKICAg
ICBib29sIGlzVGFiSXRlbVNlbGVjdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBhbHRlclNsaWRlclZh
bHVlKGJvb2wgaW5jcmVhc2UpOwpAQCAtMzA1LDYgKzMwMSw3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGFkZFRleHRGaWVsZENoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRJbWFnZU1hcENoaWxkcmVu
KCk7CisgICAgdm9pZCBhZGRDYW52YXNDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkQXR0YWNobWVu
dENoaWxkcmVuKCk7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlQXR0YWNobWVu
dFZpZXdQYXJlbnRzKCk7CkBAIC0zMjgsOCArMzI1LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IGJvb2wgYXJpYUxpdmVSZWdpb25CdXN5KCkgY29uc3Q7ICAgIAogICAgIAogICAgIGJvb2wgaW5o
ZXJpdHNQcmVzZW50YXRpb25hbFJvbGUoKSBjb25zdDsKLSAgICAKLSAgICBtdXRhYmxlIEFjY2Vz
c2liaWxpdHlSb2xlIG1fcm9sZUZvck1TQUE7CiB9OwogCiBpbmxpbmUgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdCogdG9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVNsaWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsOSBAQCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpBY2Nlc3NpYmlsaXR5U2xp
ZGVyCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVNsaWRlcj4gQWNjZXNzaWJpbGl0eVNsaWRl
cjo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBY2Nlc3NpYmlsaXR5U2xpZGVyKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVNs
aWRlciogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpOworICAgIG9iai0+
aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBBY2Nlc3NpYmlsaXR5T3Jp
ZW50YXRpb24gQWNjZXNzaWJpbGl0eVNsaWRlcjo6b3JpZW50YXRpb24oKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAkocmV2aXNpb24gMTIzMTY4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNSBAQCBB
Y2Nlc3NpYmlsaXR5VGFibGU6OkFjY2Vzc2liaWxpdHlUYWJsZShSCiAgICAgOiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKSwKICAgICBtX2hlYWRlckNvbnRhaW5lcigwKQogewor
fQorCitBY2Nlc3NpYmlsaXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUoKQoreworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlUYWJsZTo6aW5pdCgpCit7CisgICAgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aW5pdCgpOwogI2lmIEFDQ0VTU0lCSUxJVFlfVEFCTEVTCiAgICAgbV9pc0FjY2Vz
c2liaWxpdHlUYWJsZSA9IGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwog
I2Vsc2UKQEAgLTU4LDEzICs2NywxMSBAQCBBY2Nlc3NpYmlsaXR5VGFibGU6OkFjY2Vzc2liaWxp
dHlUYWJsZShSCiAjZW5kaWYKIH0KIAotQWNjZXNzaWJpbGl0eVRhYmxlOjp+QWNjZXNzaWJpbGl0
eVRhYmxlKCkKLXsKLX0KLQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGFibGU+IEFjY2Vzc2li
aWxpdHlUYWJsZTo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5VGFibGUocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3Np
YmlsaXR5VGFibGUqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5VGFibGUocmVuZGVyZXIpOworICAg
IG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlUYWJsZTo6aGFzQVJJQVJvbGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCShyZXZpc2lvbiAxMjMx
NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGFibGU+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICB2
aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5VGFibGUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7
CisKICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgaXNEYXRhVGFibGUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCShy
ZXZpc2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw5IEBAIEFjY2Vz
c2liaWxpdHlUYWJsZUNlbGw6On5BY2Nlc3NpYmlsaXR5VGEKIAogUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsPiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjcmVhdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGwocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBvYmogPSBu
ZXcgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCShyZXZp
c2lvbiAxMjMxNjgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDkgQEAgQWNjZXNzaWJp
bGl0eVRhYmxlUm93Ojp+QWNjZXNzaWJpbGl0eVRhYgogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlUYWJsZVJvdz4gQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlUYWJsZVJv
dyhyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJvdyogb2JqID0gbmV3IEFjY2Vz
c2liaWxpdHlUYWJsZVJvdyhyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG9iaik7CiB9CiAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdzo6cm9sZVZhbHVlKCkgY29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzE3OCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTA3LTE5ICBEb21pbmljIE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAg
IEFYOiBOZWVkIEFjY2Vzc2liaWxpdHlPYmplY3RzIGZvciBub2RlcyB3aXRob3V0IHJlbmRlcmVy
cyBpbiBjYW52YXMgc3VidHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODc4OTkKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4K
KworICAgICAgICBUaGlzIG5ldyB0ZXN0IGFkZHMgYSBidW5jaCBvZiBlbGVtZW50cyB0byBhIG5v
cm1hbCBjb250YWluZXIgYW5kIHRoZSBzYW1lIGVsZW1lbnRzIHRvCisgICAgICAgIGEgY2FudmFz
IHN1YnRyZWUsIHRoZW4gaXQgaXRlcmF0ZXMgb3ZlciBhbGwgb2YgdGhlIGFjY2Vzc2libGUgb2Jq
ZWN0cyB3aXRoaW4gZWFjaAorICAgICAgICBjb250YWluZXIgYW5kIG1ha2VzIHN1cmUgdGhleSBo
YXZlIGlkZW50aWNhbCByb2xlcy4gQmVjYXVzZSB3ZSBrbm93IHRoZSBub2RlcyBpbiB0aGUKKyAg
ICAgICAgY2FudmFzIHN1YnRyZWUgZG9uJ3QgaGF2ZSByZW5kZXJlcnMsIHRoaXMgc3VjY2Vzc2Z1
bGx5IHRlc3RzIHRoYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzCisgICAgICAgIGFyZSBnZXR0
aW5nIGNyZWF0ZWQgZm9yIHRoZXNlIG5vZGVzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9j
YW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNy0xOSAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgRm9ybSBzdGF0ZSByZXN0b3JlOiBOZWVkIHRvIGlkZW50aWZ5IGEgZm9ybSBieSBp
dHMgY29udGVudApJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNz
aWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxpdHlub2Rlb2JqZWN0LWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vz
c2liaWxpdHlub2Rlb2JqZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MCBAQAorTGluayAgQnV0dG9uICAgICAgICAgICBBUklBIGJ1dHRvbiBBUklBIGxpbmsKK1RoaXMg
dGVzdCBtYWtlcyBzdXJlIHRoYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzIGFyZSBjcmVhdGVk
IGZvciBlbGVtZW50cyBpbiBhIGNhbnZhcyBzdWJ0cmVlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBheFJlbmRlck9iamVjdHMubGVuZ3RoIGlzIGF4Tm9kZU9iamVjdHMu
bGVuZ3RoCitQQVNTIGkgPT0gMDsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qu
cm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gMTsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVP
YmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gMjsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBh
eE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gMzsgYXhSZW5kZXJPYmplY3Qucm9s
ZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gNDsgYXhSZW5kZXJPYmpl
Y3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gNTsgYXhSZW5k
ZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gNjsg
YXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkg
PT0gNzsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQ
QVNTIGkgPT0gODsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0
cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNj
ZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
b2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFz
LWFjY2Vzc2liaWxpdHlub2Rlb2JqZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxpdHlu
b2Rlb2JqZWN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBI
VE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisKKzxkaXYgaWQ9Im15Q29udGFpbmVyIiB0YWJpbmRl
eD0iLTEiPgorICA8YSBocmVmPSIjIj5MaW5rPC9hPgorICA8YnV0dG9uPkJ1dHRvbjwvYnV0dG9u
PgorICA8aW5wdXQgdHlwZT0idGV4dCI+CisgIDxpbnB1dCB0eXBlPSJjaGVja2JveCI+CisgIDxp
bnB1dCB0eXBlPSJyYWRpbyI+CisgIDxpbnB1dCB0eXBlPSJzdWJtaXQiPgorICA8c2VsZWN0Pjxv
cHRpb24+MTxvcHRpb24+Mjwvc2VsZWN0PgorICA8c3BhbiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0
dG9uIj5BUklBIGJ1dHRvbjwvc3Bhbj4KKyAgPHNwYW4gdGFiaW5kZXg9IjAiIHJvbGU9Imxpbmsi
PkFSSUEgbGluazwvc3Bhbj4KKzwvZGl2PgorCis8Y2FudmFzIGlkPSJteUNhbnZhcyIgd2lkdGg9
IjMwMCIgaGVpZ2h0PSIzMDAiIHRhYmluZGV4PSItMSI+CisgIDxhIGhyZWY9IiMiPkxpbms8L2E+
CisgIDxidXR0b24+QnV0dG9uPC9idXR0b24+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KKyAgPGlu
cHV0IHR5cGU9ImNoZWNrYm94Ij4KKyAgPGlucHV0IHR5cGU9InJhZGlvIj4KKyAgPGlucHV0IHR5
cGU9InN1Ym1pdCI+CisgIDxzZWxlY3Q+PG9wdGlvbj4xPG9wdGlvbj4yPC9zZWxlY3Q+CisgIDxz
cGFuIHRhYmluZGV4PSIwIiByb2xlPSJidXR0b24iPkFSSUEgYnV0dG9uPC9zcGFuPgorICA8c3Bh
biB0YWJpbmRleD0iMCIgcm9sZT0ibGluayI+QVJJQSBsaW5rPC9zcGFuPgorPC9jYW52YXM+CisK
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRl
c3QgbWFrZXMgc3VyZSB0aGF0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0cyBhcmUgY3JlYXRlZCBm
b3IgZWxlbWVudHMgaW4gYSBjYW52YXMgc3VidHJlZS4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24g
YXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMoYXhPYmplY3QsIGF4Rm9jdXNhYmxlTGlzdCkgewor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF4T2JqZWN0LmNoaWxkcmVuQ291bnQ7IGkrKykg
eworICAgICAgICAgICAgdmFyIGF4Q2hpbGQgPSBheE9iamVjdC5jaGlsZEF0SW5kZXgoaSk7Cisg
ICAgICAgICAgICBpZiAoYXhDaGlsZC5pc0ZvY3VzYWJsZSkKKyAgICAgICAgICAgICAgICBheEZv
Y3VzYWJsZUxpc3QucHVzaChheENoaWxkKTsKKyAgICAgICAgICAgIGFwcGVuZEZvY3VzYWJsZURl
c2NlbmRhbnRzKGF4Q2hpbGQsIGF4Rm9jdXNhYmxlTGlzdCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15Q29udGFpbmVy
Iik7CisgICAgY29udGFpbmVyLmZvY3VzKCk7CisgICAgdmFyIGF4Q29udGFpbmVyID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICB2YXIgY2FudmFzID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15Q2FudmFzIik7CisgICAgY2FudmFzLmZvY3VzKCk7Cisg
ICAgdmFyIGF4Q2FudmFzID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7
CisKKyAgICB2YXIgYXhSZW5kZXJPYmplY3RzID0gW107CisgICAgdmFyIGF4Tm9kZU9iamVjdHMg
PSBbXTsKKworICAgIGFwcGVuZEZvY3VzYWJsZURlc2NlbmRhbnRzKGF4Q29udGFpbmVyLCBheFJl
bmRlck9iamVjdHMpOworICAgIGFwcGVuZEZvY3VzYWJsZURlc2NlbmRhbnRzKGF4Q2FudmFzLCBh
eE5vZGVPYmplY3RzKTsKKworICAgIHNob3VsZEJlKCJheFJlbmRlck9iamVjdHMubGVuZ3RoIiwg
ImF4Tm9kZU9iamVjdHMubGVuZ3RoIik7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF4UmVu
ZGVyT2JqZWN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgYXhSZW5kZXJPYmplY3QgPSBh
eFJlbmRlck9iamVjdHNbaV07CisgICAgICAgIHZhciBheE5vZGVPYmplY3QgPSBheE5vZGVPYmpl
Y3RzW2ldOworICAgICAgICBzaG91bGRCZSgiaSA9PSAiICsgaSArICI7IGF4UmVuZGVyT2JqZWN0
LnJvbGUgPT0gYXhOb2RlT2JqZWN0LnJvbGUiLCAidHJ1ZSIpOworICAgIH0KK30KKworPC9zY3Jp
cHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153582</attachid>
            <date>2012-07-20 13:27:46 -0700</date>
            <delta_ts>2012-07-22 23:00:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87899-20120720132742.patch</filename>
            <type>text/plain</type>
            <size>65656</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMi0wNy0yMCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3JzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgc28gdGhhdCBpdCBpbmhlcml0cyBmcm9t
IGEgbmV3IGNsYXNzLAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgdGhhdCBjYW4g
YmUgY29uc3RydWN0ZWQgZnJvbSBhIE5vZGUgd2l0aG91dCBhCisgICAgICAgIHJlbmRlcmVyLiBN
b2RpZmllcyBBWE9iamVjdENhY2hlIHNvIHRoYXQgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFu
CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGZvciBlbGVtZW50cyBpbiBhIGNhbnZh
cyBzdWJ0cmVlIGJ1dCBub3Qgb3RoZXJ3aXNlLgorICAgICAgICBBIG5ldyBsYXlvdXQgdGVzdCB2
ZXJpZmllcyB0aGF0IHRoaXMgY29ycmVjdGx5IGV4cG9zZXMgYW4gYWNjZXNzaWJpbGl0eQorICAg
ICAgICB0cmVlIHdpdGggYXBwcm9wcmlhdGUgcm9sZXMgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFz
IHN1YnRyZWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCB0cnkgdG8gY29tcGxldGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LiBN
b3N0IEFYIG1ldGhvZHMgYXJlIHN0aWxsIHVuaW1wbGVtZW50ZWQgYW5kIG5lZWQKKyAgICAgICAg
dG8gYmUgbWlncmF0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHRvIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIG91dHNpZGUgb2Yg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5LCBzbworICAgICAgICB0aGUgcmVzdCBvZiBXZWJDb3JlIG9u
bHkgY2FsbHMgQVhPYmplY3RDYWNoZSB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGEKKyAgICAg
ICAgUmVuZGVyT2JqZWN0LCBub3QgdG8gYSBOb2RlLiBBY2Nlc3NpYmxlIG5vdGlmaWNhdGlvbnMg
b24gbm9kZXMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3Jp
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2V0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vz
c2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlh
Um9sZUR1ZVRvUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJlcik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2FudmFzQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmNyZWF0ZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlOjpBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRhYmxl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmNyZWF0ZSk6CisKIDIwMTItMDctMjAgIEhh
biBTaGVuICA8c2hlbmhhbkBnb29nbGUuY29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQ29tcGls
YXRpb24gZmFpbHMgdW5kZXIgZ2NjIDQuNwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC05MzUsNiArOTM1LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcAogICAgIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TW9ja09iamVjdC5jcHAKKyAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKICAg
ICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAKICAgICBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTEzMTcsNiArMTMxNyw4IEBA
IHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5TWVudUxpc3RQb3B1cC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09iamVjdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBcCisJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBcCiAJU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuY3BwIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQkocmV2aXNpb24gMTIzMjUzKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQko
d29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmNwcCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TGlzdEJveC5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb24uY3BwIFwKKyAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcCBcCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3Iu
Y3BwIFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIFwK
ICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwIFwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMTc5Miw2ICsxNzkyLDggQEAKICAgICAgICAgICAgICdh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmgnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwJywKICAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmgnLAorICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwJywKKyAgICAgICAgICAg
ICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgnLAogICAgICAgICAgICAg
J2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCcsCiAgICAgICAg
ICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IuaCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJ
KHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCw2ICsxODgsMjMgQEAgQWNjZXNzaWJp
bGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KAogICAgIHJldHVybiBtX29iamVjdHMuZ2V0
KGF4SUQpLmdldCgpOyAgICAKIH0KIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNo
ZTo6Z2V0KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIC8vIEFsd2F5cyBwcmVmZXIgYnVpbGRpbmcgdGhlIEFjY2Vzc2liaWxpdHlPYmplY3Qg
ZnJvbSB0aGUgcmVuZGVyZXIgaWYgdGhlcmUgaXMgb25lLgorICAgIGlmIChub2RlLT5yZW5kZXJl
cigpKQorICAgICAgICByZXR1cm4gZ2V0KG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgQVhJRCBh
eElEID0gbV9ub2RlT2JqZWN0TWFwcGluZy5nZXQobm9kZSk7CisgICAgQVNTRVJUKCFIYXNoVHJh
aXRzPEFYSUQ+Ojppc0RlbGV0ZWRWYWx1ZShheElEKSk7CisgICAgaWYgKCFheElEKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX29iamVjdHMuZ2V0KGF4SUQpLmdldCgpOworfQor
CiAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBiZWxvbmdzIG9uIE5vZGUuCiAvLyBGSVhNRTogVGhp
cyBzaG91bGQgdGFrZSBhIGNvbnN0IGNoYXIqLCBidXQgb25lIGNhbGxlciBwYXNzZXMgbnVsbEF0
b20uCiBib29sIG5vZGVIYXNSb2xlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKQEAg
LTI1Miw2ICsyNjksMTEgQEAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
YwogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjcmVhdGUocmVuZGVyZXIp
OwogfQogCitzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcm9t
Tm9kZShOb2RlKiBub2RlKQoreworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
Y3JlYXRlKG5vZGUpOworfQorCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpn
ZXRPckNyZWF0ZShXaWRnZXQqIHdpZGdldCkKIHsKICAgICBpZiAoIXdpZGdldCkKQEAgLTI3Myw3
ICsyOTUsMzIgQEAgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0TwogICAg
IGF0dGFjaFdyYXBwZXIobmV3T2JqLmdldCgpKTsKICAgICByZXR1cm4gbmV3T2JqLmdldCgpOwog
fQotICAgIAorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0
ZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqID0gZ2V0KG5vZGUpKQorICAgICAgICByZXR1
cm4gb2JqOworCisgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBnZXRP
ckNyZWF0ZShub2RlLT5yZW5kZXJlcigpKTsKKworICAgIC8vIEl0J3Mgb25seSBhbGxvd2VkIHRv
IGNyZWF0ZSBhbiBBY2Nlc3NpYmlsaXR5T2JqZWN0IGZyb20gYSBOb2RlIGlmIGl0J3MgaW4gYSBj
YW52YXMgc3VidHJlZS4KKyAgICBpZiAoIW5vZGUtPnBhcmVudEVsZW1lbnQoKSB8fCAhbm9kZS0+
cGFyZW50RWxlbWVudCgpLT5pc0luQ2FudmFzU3VidHJlZSgpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBuZXdPYmogPSBjcmVhdGVGcm9tTm9k
ZShub2RlKTsKKworICAgIGdldEFYSUQobmV3T2JqLmdldCgpKTsKKworICAgIG1fbm9kZU9iamVj
dE1hcHBpbmcuc2V0KG5vZGUsIG5ld09iai0+YXhPYmplY3RJRCgpKTsKKyAgICBtX29iamVjdHMu
c2V0KG5ld09iai0+YXhPYmplY3RJRCgpLCBuZXdPYmopOworICAgIGF0dGFjaFdyYXBwZXIobmV3
T2JqLmdldCgpKTsKKyAgICByZXR1cm4gbmV3T2JqLmdldCgpOworfQorCiBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogewogICAgIGlmICghcmVuZGVyZXIpCkBAIC0zODgsNiArNDM1LDI0IEBAIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCoKICAgICBtX3JlbmRlck9iamVjdE1hcHBpbmcu
cmVtb3ZlKHJlbmRlcmVyKTsKIH0KIAordm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIHJlbW92ZU5v
ZGVGb3JVc2Uobm9kZSk7CisKKyAgICAvLyBUaGlzIGlzIGFsbCBzYWZlIGV2ZW4gaWYgd2UgZGlk
bid0IGhhdmUgYSBtYXBwaW5nLgorICAgIEFYSUQgYXhJRCA9IG1fbm9kZU9iamVjdE1hcHBpbmcu
Z2V0KG5vZGUpOworICAgIHJlbW92ZShheElEKTsKKyAgICBtX25vZGVPYmplY3RNYXBwaW5nLnJl
bW92ZShub2RlKTsKKworICAgIGlmIChub2RlLT5yZW5kZXJlcigpKSB7CisgICAgICAgIHJlbW92
ZShub2RlLT5yZW5kZXJlcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwogdm9pZCBB
WE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KiB2aWV3KQogewogICAgIGlmICghdmlldykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZp
c2lvbiAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgLy8gRm9y
IEFYIG9iamVjdHMgd2l0aCBlbGVtZW50cyB0aGF0IGJhY2sgdGhlbS4KICAgICBBY2Nlc3NpYmls
aXR5T2JqZWN0KiBnZXRPckNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBnZXRPckNyZWF0ZShXaWRnZXQqKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBn
ZXRPckNyZWF0ZShOb2RlKik7CiAKICAgICAvLyB1c2VkIGZvciBvYmplY3RzIHdpdGhvdXQgYmFj
a2luZyBlbGVtZW50cwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKEFjY2Vz
c2liaWxpdHlSb2xlKTsKQEAgLTc3LDggKzc4LDEwIEBAIHB1YmxpYzoKICAgICAvLyB3aWxsIG9u
bHkgcmV0dXJuIHRoZSBBY2Nlc3NpYmlsaXR5T2JqZWN0IGlmIGl0IGFscmVhZHkgZXhpc3RzCiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFJlbmRlck9iamVjdCopOwogICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGdldChXaWRnZXQqKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQo
Tm9kZSopOwogICAgIAogICAgIHZvaWQgcmVtb3ZlKFJlbmRlck9iamVjdCopOworICAgIHZvaWQg
cmVtb3ZlKE5vZGUqKTsKICAgICB2b2lkIHJlbW92ZShXaWRnZXQqKTsKICAgICB2b2lkIHJlbW92
ZShBWElEKTsKIApAQCAtMTgyLDYgKzE4NSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxBWElE
LCBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPiBtX29iamVjdHM7CiAgICAgSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBBWElEPiBtX3JlbmRlck9iamVjdE1hcHBpbmc7CiAgICAgSGFzaE1hcDxX
aWRnZXQqLCBBWElEPiBtX3dpZGdldE9iamVjdE1hcHBpbmc7CisgICAgSGFzaE1hcDxOb2RlKiwg
QVhJRD4gbV9ub2RlT2JqZWN0TWFwcGluZzsKICAgICBIYXNoU2V0PE5vZGUqPiBtX3RleHRNYXJr
ZXJOb2RlczsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuYWJsZWQ7CiAgICAgc3Rh
dGljIGJvb2wgZ0FjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVkOwpAQCAt
MjA0LDkgKzIwOCwxMSBAQCBpbmxpbmUgQVhPYmplY3RDYWNoZTo6QVhPYmplY3RDYWNoZShjb25z
CiBpbmxpbmUgQVhPYmplY3RDYWNoZTo6fkFYT2JqZWN0Q2FjaGUoKSB7IH0KIGlubGluZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpmb2N1c2VkVUlFbGVtZW50Rm9yUGFnZShj
b25zdCBQYWdlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFY
T2JqZWN0Q2FjaGU6OmdldChSZW5kZXJPYmplY3QqKSB7IHJldHVybiAwOyB9CitpbmxpbmUgQWNj
ZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KE5vZGUqKSB7IHJldHVybiAwOyB9
CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFdpZGdldCop
IHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hl
OjpnZXRPckNyZWF0ZShBY2Nlc3NpYmlsaXR5Um9sZSkgeyByZXR1cm4gMDsgfQogaW5saW5lIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFJlbmRlck9iamVj
dCopIHsgcmV0dXJuIDA7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENh
Y2hlOjpnZXRPckNyZWF0ZShOb2RlKikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCopIHsgcmV0dXJuIDA7
IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpyb290T2JqZWN0
KCkgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2Fj
aGU6OnJvb3RPYmplY3RGb3JGcmFtZShGcmFtZSopIHsgcmV0dXJuIDA7IH0KQEAgLTIzMyw2ICsy
MzksNyBAQCBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0Tm90aWZpY2F0CiBpbmxpbmUg
dm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0
eU9iamVjdCosIEFYTm90aWZpY2F0aW9uKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6
OnJlbW92ZShBWElEKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShSZW5k
ZXJPYmplY3QqKSB7IH0KK2lubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShOb2RlKikg
eyB9CiBpbmxpbmUgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoV2lkZ2V0KikgeyB9CiBpbmxp
bmUgdm9pZCBBWE9iamVjdENhY2hlOjpzZWxlY3RlZENoaWxkcmVuQ2hhbmdlZChSZW5kZXJPYmpl
Y3QqKSB7IH0KICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcAkocmV2aXNpb24gMTIzMjUzKQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3JpZChSZW5kZXJPYmplY3QqIHJl
bmRlcmVyKQogICAgIDogQWNjZXNzaWJpbGl0eVRhYmxlKHJlbmRlcmVyKQogeworfQorCitBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6On5BY2Nlc3NpYmlsaXR5QVJJQUdyaWQoKQoreworfQorCit2b2lk
IEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6aW5pdCgpCit7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxl
Ojppbml0KCk7CiAjaWYgQUNDRVNTSUJJTElUWV9UQUJMRVMKICAgICBtX2lzQWNjZXNzaWJpbGl0
eVRhYmxlID0gdHJ1ZTsKICNlbHNlCkBAIC01MCwxMyArNTksMTEgQEAgQWNjZXNzaWJpbGl0eUFS
SUFHcmlkOjpBY2Nlc3NpYmlsaXR5QVJJQQogI2VuZGlmCiB9CiAKLUFjY2Vzc2liaWxpdHlBUklB
R3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCgpCi17Ci19Ci0KIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eUFSSUFHcmlkPiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmNyZWF0ZShSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eUFS
SUFHcmlkKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eUFSSUFHcmlkKiBvYmogPSBuZXcg
QWNjZXNzaWJpbGl0eUFSSUFHcmlkKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFk
ZENoaWxkKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkLCBIYXNoU2V0PEFjY2Vzc2liaWxpdHlP
YmplY3QqPiYgYXBwZW5kZWRSb3dzLCB1bnNpZ25lZCYgY29sdW1uQ291bnQpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmgJKHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eUFSSUFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAgcHJp
dmF0ZToKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJQUdy
aWQ+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5QVJJ
QUdyaWQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7CiAgICAgCiAgICAgdmlydHVhbCBi
b29sIGlzQXJpYVRhYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAgICAKICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5QVJJQUdyaWRDZWxsLmNwcAkocmV2aXNpb24gMTIzMjUzKQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsOSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjp+QWNjZXNzaWJp
bGl0CiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbD4gQWNjZXNzaWJpbGl0
eUFSSUFHcmlkQ2VsbDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsKHJlbmRlcmVyKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJl
ZihvYmopOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRD
ZWxsOjpwYXJlbnRUYWJsZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZFJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3cuY3BwCShyZXZpc2lv
biAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlB
UklBR3JpZFJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDkgQEAgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93Ojp+QWNjZXNzaWJpbGl0eQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlBUklBR3JpZFJvdz4gQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93OjpjcmVhdGUoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlB
UklBR3JpZFJvdyhyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdyogb2Jq
ID0gbmV3IEFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdyhyZW5kZXJlcik7CisgICAgb2JqLT5pbml0
KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eUFS
SUFHcmlkUm93Ojppc0FSSUFUcmVlR3JpZFJvdygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxsSW5PbmUuY3BwCShy
ZXZpc2lvbiAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNw
cCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAiCiAjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU9iamVjdC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbFZpZXcuY3BwIgpJbmRleDogU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAJ
KHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw5IEBAIEFjY2Vzc2li
aWxpdHlMaXN0Ojp+QWNjZXNzaWJpbGl0eUxpc3QoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlMaXN0PiBBY2Nlc3NpYmlsaXR5TGlzdDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5TGlzdChyZW5kZXJlcikp
OworICAgIEFjY2Vzc2liaWxpdHlMaXN0KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUxpc3QocmVu
ZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQog
CiBib29sIEFjY2Vzc2liaWxpdHlMaXN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3guY3BwCShyZXZpc2lvbiAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
NyArNTQsOSBAQCBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6fkFjY2Vzc2liaWxpdHlMaXN0CiAgICAg
CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlMaXN0Qm94PiBBY2Nlc3NpYmlsaXR5TGlzdEJveDo6
Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBBY2Nlc3NpYmlsaXR5TGlzdEJveChyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlMaXN0
Qm94KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUxpc3RCb3gocmVuZGVyZXIpOworICAgIG9iai0+
aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogICAgIAogYm9vbCBBY2Nlc3Np
YmlsaXR5TGlzdEJveDo6Y2FuU2V0U2VsZWN0ZWRDaGlsZHJlbkF0dHJpYnV0ZSgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRpYUNvbnRy
b2xzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcAkocmV2aXNpb24gMTIzMjUzKQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY3LDggKzY3LDExIEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVj
dD4gQWNjZXNzaWIKICAgICBjYXNlIE1lZGlhQ29udHJvbHNQYW5lbDoKICAgICAgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpjcmVhdGUocmVuZGVyZXIpOwog
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5
TWVkaWFDb250cm9sKHJlbmRlcmVyKSk7CisgICAgZGVmYXVsdDogeworICAgICAgICBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbChy
ZW5kZXJlcik7CisgICAgICAgIG9iai0+aW5pdCgpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
b2JqKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMjA3LDcgKzIxMCw5IEBAIEFjY2Vzc2li
aWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpBY2MKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmls
aXR5T2JqZWN0PiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6Y3JlYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHNDb250YWluZXIocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBh
ZG9wdFJlZihvYmopOwogfQogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250
YWluZXI6OmFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0yNTEsNyArMjU2LDkg
QEAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OkFjY2Vzc2liaWxpdAogCiBQYXNzUmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjpjcmVhdGUo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vz
c2liaWxpdHlNZWRpYVRpbWVsaW5lKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eU1lZGlh
VGltZWxpbmUqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZShyZW5kZXJlcik7
CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIFN0cmlu
ZyBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6dmFsdWVEZXNjcmlwdGlvbigpIGNvbnN0CkBA
IC0yODEsNyArMjg4LDkgQEAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OkFjY2Vzc2li
aQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYVRp
bWVEaXNwbGF5OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KHJlbmRlcmVyKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXkqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5
TWVkaWFUaW1lRGlzcGxheShyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6
OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmNwcAkocmV2aXNp
b24gMTIzMjUzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywxMyBAQCBBY2Nlc3NpYmls
aXR5TWVudUxpc3Q6OkFjY2Vzc2liaWxpdHlNZW51CiB7CiB9CiAKK1Bhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eU1lbnVMaXN0PiBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZShSZW5kZXJNZW51
TGlzdCogcmVuZGVyZXIpCit7CisgICAgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KiBvYmogPSBuZXcg
QWNjZXNzaWJpbGl0eU1lbnVMaXN0KHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYob2JqKTsKK30KKwogYm9vbCBBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OnBy
ZXNzKCkgY29uc3QKIHsKICAgICBSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJNZW51TGlzdCo+KG1fcmVuZGVyZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oCShyZXZpc2lvbiAx
MjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFJlbmRlck1lbnVM
aXN0OwogCiBjbGFzcyBBY2Nlc3NpYmlsaXR5TWVudUxpc3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJp
bGl0eU1lbnVMaXN0PiBjcmVhdGUoUmVuZGVyTWVudUxpc3QqIHJlbmRlcmVyKSB7IHJldHVybiBh
ZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lbnVMaXN0KHJlbmRlcmVyKSk7IH0KKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0ZShSZW5kZXJNZW51TGlz
dCogcmVuZGVyZXIpOwogCiAgICAgdmlydHVhbCBib29sIGlzQ29sbGFwc2VkKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIHByZXNzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NyBAQAorLyoKKyogQ29weXJp
Z2h0IChDKSAyMDEyLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCisjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUltYWdlTWFwTGluay5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlMaXN0Qm94LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNwaW5CdXR0b24uaCIKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCisjaW5jbHVkZSAiSFRNTEFyZWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZpZWxkU2V0
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTExlZ2VuZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPcHRHcm91cEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25z
Q29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkhUTUxQbHVnSW5JbWFnZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgorI2luY2x1ZGUgIkhp
dFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgorI2luY2x1ZGUgIkxv
Y2FsaXplZFN0cmluZ3MuaCIKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5v
ZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5o
IgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMu
aCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNs
dWRlICJodG1sZWRpdGluZy5oIgorI2luY2x1ZGUgInZpc2libGVfdW5pdHMuaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKKworQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
KE5vZGUqIG5vZGUpCisgICAgOiBBY2Nlc3NpYmlsaXR5T2JqZWN0KCkKKyAgICAsIG1fYXJpYVJv
bGUoVW5rbm93blJvbGUpCisgICAgLCBtX2NoaWxkcmVuRGlydHkoZmFsc2UpCisgICAgLCBtX3Jv
bGVGb3JNU0FBKFVua25vd25Sb2xlKQorICAgICwgbV9ub2RlKG5vZGUpCit7Cit9CisKK0FjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0Ojp+QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKQoreworICAgIEFT
U0VSVChpc0RldGFjaGVkKCkpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
bml0KCkKK3sKKyAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpOworfQor
CitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0PiBBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6Y3JlYXRlKE5vZGUqIG5vZGUpCit7CisgICAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qq
IG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChub2RlKTsKKyAgICBvYmotPmluaXQo
KTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6ZGV0YWNoKCkKK3sKKyAgICBjbGVhckNoaWxkcmVuKCk7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6ZGV0YWNoKCk7CisgICAgbV9ub2RlID0gMDsKK30KKwordm9pZCBBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKCkKK3sKKyAgICAvLyBUaGlzIG1ldGhv
ZCBpcyBtZWFudCBhcyBhIHF1aWNrIHdheSBvZiBtYXJraW5nIGEgcG9ydGlvbiBvZiB0aGUgYWNj
ZXNzaWJpbGl0eSB0cmVlIGRpcnR5LgorICAgIGlmICghbm9kZSgpICYmICFyZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24o
dGhpcywgZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhDaGlsZHJlbkNoYW5nZWQsIHRydWUp
OworCisgICAgLy8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWluLCBidXQgb25s
eSBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMKKyAgICAvLyBj
YWxsZWQgZHVyaW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxkIGJlIGRvbmUu
IAorICAgIC8vIElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBjb3VsZCBpbnRl
cnJvZ2F0ZSB0aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0YXRlLgorICAg
IC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBjaGFuZ2VzLgor
ICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKKyAgICAgICAgcGFyZW50LT5z
ZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKTsKKworICAgICAgICAvLyBUaGVzZSBub3RpZmljYXRp
b25zIGFsd2F5cyBuZWVkIHRvIGJlIHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJzIGFyZSByZWxp
YW50IG9uIHRoZW0gdG8gcGVyZm9ybS4gCisgICAgICAgIC8vIEluIG90aGVyIHdvcmRzLCB0aGV5
IG5lZWQgdG8gYmUgc2VudCBldmVuIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzIG5vdCBhY2Nl
c3NlZCB0aGlzIGxpdmUgcmVnaW9uIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KKworICAgICAgICAv
LyBJZiB0aGlzIGVsZW1lbnQgc3VwcG9ydHMgQVJJQSBsaXZlIHJlZ2lvbnMsIHRoZW4gbm90aWZ5
IHRoZSBBVCBvZiBjaGFuZ2VzLgorICAgICAgICBpZiAocGFyZW50LT5zdXBwb3J0c0FSSUFMaXZl
UmVnaW9uKCkpCisgICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24o
cGFyZW50LCBwYXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTGl2ZVJlZ2lvbkNo
YW5nZWQsIHRydWUpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50IGlzIGFu
IEFSSUEgdGV4dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCisgICAgICAgIGlm
IChwYXJlbnQtPmlzQVJJQVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+aXNOYXRpdmVUZXh0Q29u
dHJvbCgpICYmICFwYXJlbnQtPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCisgICAgICAg
ICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBwYXJlbnQtPmRv
Y3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKKyAgICB9Cit9
CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xl
KCkKK3sKKyAgICBib29sIGlnbm9yZWRTdGF0dXMgPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCk7
CisgICAgbV9yb2xlID0gZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKKyAgICAKKyAgICAv
LyBUaGUgQVggaGllcmFyY2h5IG9ubHkgbmVlZHMgdG8gYmUgdXBkYXRlZCBpZiB0aGUgaWdub3Jl
ZCBzdGF0dXMgb2YgYW4gZWxlbWVudCBoYXMgY2hhbmdlZC4KKyAgICBpZiAoaWdub3JlZFN0YXR1
cyAhPSBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCisgICAgICAgIGNoaWxkcmVuQ2hhbmdlZCgp
OworfQorICAgIAorQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmZpcnN0Q2hpbGQoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBOb2RlKiBmaXJzdENoaWxkID0gbm9kZSgpLT5maXJzdENoaWxkKCk7CisK
KyAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVy
biBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGZpcnN0Q2hpbGQpOworfQorCitBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKCkgY29uc3QK
K3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgTm9kZSog
bGFzdENoaWxkID0gbm9kZSgpLT5sYXN0Q2hpbGQoKTsKKyAgICBpZiAoIWxhc3RDaGlsZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JD
cmVhdGUobGFzdENoaWxkKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnByZXZpb3VzU2libGluZygpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gbm9kZSgp
LT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBpZiAoIXByZXZpb3VzU2libGluZykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShwcmV2
aW91c1NpYmxpbmcpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6bmV4dFNpYmxpbmcoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIE5vZGUqIG5leHRTaWJsaW5nID0gbm9kZSgpLT5uZXh0U2libGlu
ZygpOworICAgIGlmICghbmV4dFNpYmxpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUobmV4dFNpYmxpbmcpOworfQorICAgIAor
QWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnBhcmVudE9iamVj
dElmRXhpc3RzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGFyZW50T2JqZWN0KCk7Cit9CisgICAg
CitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2Jq
ZWN0KCkgY29uc3QKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBOb2RlKiBwYXJlbnRPYmogPSBub2RlKCktPnBhcmVudE5vZGUoKTsKKyAgICBpZiAocGFyZW50
T2JqKQorICAgICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShwYXJlbnRP
YmopOworICAgIAorICAgIHJldHVybiAwOworfQorCitMYXlvdXRSZWN0IEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjplbGVtZW50UmVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGJvdW5kaW5nQm94
UmVjdCgpOworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpzZXROb2RlKE5vZGUq
IG5vZGUpCit7CisgICAgbV9ub2RlID0gbm9kZTsKK30KKworRG9jdW1lbnQqIEFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIHJldHVybiBub2RlKCktPmRvY3VtZW50KCk7Cit9CisKK0FjY2Vz
c2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmls
aXR5Um9sZSgpCit7CisgICAgaWYgKCFub2RlKCkpCisgICAgICAgIHJldHVybiBVbmtub3duUm9s
ZTsKKworICAgIG1fYXJpYVJvbGUgPSBkZXRlcm1pbmVBcmlhUm9sZUF0dHJpYnV0ZSgpOworICAg
IAorICAgIEFjY2Vzc2liaWxpdHlSb2xlIGFyaWFSb2xlID0gYXJpYVJvbGVBdHRyaWJ1dGUoKTsK
KyAgICBpZiAoYXJpYVJvbGUgIT0gVW5rbm93blJvbGUpCisgICAgICAgIHJldHVybiBhcmlhUm9s
ZTsKKworICAgIGlmIChub2RlKCktPmlzTGluaygpKQorICAgICAgICByZXR1cm4gV2ViQ29yZUxp
bmtSb2xlOworICAgIGlmIChub2RlKCktPmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIFN0
YXRpY1RleHRSb2xlOworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoYnV0dG9uVGFnKSkKKyAg
ICAgICAgcmV0dXJuIGFyaWFIYXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9s
ZTsKKyAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihub2Rl
KCkpOworICAgICAgICBpZiAoaW5wdXQtPmlzQ2hlY2tib3goKSkKKyAgICAgICAgICAgIHJldHVy
biBDaGVja0JveFJvbGU7CisgICAgICAgIGlmIChpbnB1dC0+aXNSYWRpb0J1dHRvbigpKQorICAg
ICAgICAgICAgcmV0dXJuIFJhZGlvQnV0dG9uUm9sZTsKKyAgICAgICAgaWYgKGlucHV0LT5pc1Rl
eHRCdXR0b24oKSkKKyAgICAgICAgICAgIHJldHVybiBhcmlhSGFzUG9wdXAoKSA/IFBvcFVwQnV0
dG9uUm9sZSA6IEJ1dHRvblJvbGU7CisgICAgICAgIHJldHVybiBUZXh0RmllbGRSb2xlOworICAg
IH0KKyAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsKKyAgICAgICAgSFRN
TFNlbGVjdEVsZW1lbnQqIHNlbGVjdEVsZW1lbnQgPSB0b0hUTUxTZWxlY3RFbGVtZW50KG5vZGUo
KSk7CisgICAgICAgIHJldHVybiBzZWxlY3RFbGVtZW50LT5tdWx0aXBsZSgpID8gTGlzdFJvbGUg
OiBQb3BVcEJ1dHRvblJvbGU7CisgICAgfQorICAgIGlmIChub2RlKCktPmlzRm9jdXNhYmxlKCkp
CisgICAgICAgIHJldHVybiBHcm91cFJvbGU7CisgICAgCisgICAgcmV0dXJuIFVua25vd25Sb2xl
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbigpCit7Cisg
ICAgLy8gSWYgdGhlIG5lZWQgdG8gYWRkIG1vcmUgY2hpbGRyZW4gaW4gYWRkaXRpb24gdG8gZXhp
c3RpbmcgY2hpbGRyZW4gYXJpc2VzLCAKKyAgICAvLyBjaGlsZHJlbkNoYW5nZWQgc2hvdWxkIGhh
dmUgYmVlbiBjYWxsZWQsIGxlYXZpbmcgdGhlIG9iamVjdCB3aXRoIG5vIGNoaWxkcmVuLgorICAg
IEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4pOyAKKyAgICAKKyAgICBpZiAoIW1fbm9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9oYXZlQ2hpbGRyZW4gPSB0cnVlOworCisgICAgLy8gVGhlIG9u
bHkgdGltZSB3ZSBhZGQgY2hpbGRyZW4gZnJvbSB0aGUgRE9NIHRyZWUgdG8gYSBub2RlIHdpdGgg
YSByZW5kZXJlciBpcyB3aGVuIGl0J3MgYSBjYW52YXMuCisgICAgaWYgKHJlbmRlcmVyKCkgJiYg
IW1fbm9kZS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IG1fbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gb2JqID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7CisgICAgICAg
IG9iai0+Y2xlYXJDaGlsZHJlbigpOworICAgICAgICBpZiAob2JqLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKKyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBjaGls
ZHJlbiA9IG9iai0+Y2hpbGRyZW4oKTsKKyAgICAgICAgICAgIHNpemVfdCBsZW5ndGggPSBjaGls
ZHJlbi5zaXplKCk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQorICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKGNoaWxkcmVuW2ldKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChvYmotPnBhcmVudE9iamVjdCgpID09
IHRoaXMpOworICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQob2JqKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6YWNjZXNzaWJpbGl0eUlz
SWdub3JlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcm9sZSA9PSBVbmtub3duUm9sZTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBj
b25zdAoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CisKKyAgICBpZiAoaXNXZWJB
cmVhKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIC8vIE5PVEU6IEl0IHdvdWxk
IGJlIG1vcmUgYWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZvY3VzZWRO
b2RlKCkgd291bGQKKyAgICAvLyBkbyBhbnl0aGluZy4gRm9yIGV4YW1wbGUsIHNldEZvY3VzZWRO
b2RlKCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBjdXJyZW50IGZvY3VzZWQKKyAgICAvLyBub2Rl
IHdpbGwgbm90IHJlbGlucXVpc2ggdGhlIGZvY3VzLgorICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0VuYWJsZWRGb3JtQ29udHJvbCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbm9kZS0+c3VwcG9ydHNGb2N1cygpOworfQorCitB
Y2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZGV0ZXJtaW5lQXJpYVJv
bGVBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYVJvbGUg
PSBnZXRBdHRyaWJ1dGUocm9sZUF0dHIpOworICAgIGlmIChhcmlhUm9sZS5pc051bGwoKSB8fCBh
cmlhUm9sZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBVbmtub3duUm9sZTsKKyAgICAKKyAg
ICBBY2Nlc3NpYmlsaXR5Um9sZSByb2xlID0gYXJpYVJvbGVUb1dlYkNvcmVSb2xlKGFyaWFSb2xl
KTsKKworICAgIC8vIEFSSUEgc3RhdGVzIGlmIGFuIGl0ZW0gY2FuIGdldCBmb2N1cywgaXQgc2hv
dWxkIG5vdCBiZSBwcmVzZW50YXRpb25hbC4KKyAgICBpZiAocm9sZSA9PSBQcmVzZW50YXRpb25h
bFJvbGUgJiYgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgcmV0dXJuIFVua25vd25S
b2xlOworICAgIAorICAgIGlmIChyb2xlID09IEJ1dHRvblJvbGUgJiYgYXJpYUhhc1BvcHVwKCkp
CisgICAgICAgIHJvbGUgPSBQb3BVcEJ1dHRvblJvbGU7CisKKyAgICBpZiAocm9sZSA9PSBUZXh0
QXJlYVJvbGUgJiYgIWFyaWFJc011bHRpbGluZSgpKQorICAgICAgICByb2xlID0gVGV4dEZpZWxk
Um9sZTsKKworICAgIHJvbGUgPSByZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQocm9sZSk7CisgICAg
CisgICAgaWYgKHJvbGUpCisgICAgICAgIHJldHVybiByb2xlOworCisgICAgcmV0dXJuIFVua25v
d25Sb2xlOworfQorCitBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6
YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2FyaWFSb2xlOworfQor
CitBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlhUm9s
ZUR1ZVRvUGFyZW50KEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpIGNvbnN0Cit7CisgICAgLy8gU29t
ZSBvYmplY3RzIGNoYW5nZSB0aGVpciByb2xlIGJhc2VkIG9uIHRoZWlyIHBhcmVudC4KKyAgICAv
LyBIb3dldmVyLCBhc2tpbmcgZm9yIHRoZSB1bmlnbm9yZWRQYXJlbnQgY2FsbHMgYWNjZXNzaWJp
bGl0eUlzSWdub3JlZCgpLCB3aGljaCBjYW4gdHJpZ2dlciBhIGxvb3AuIAorICAgIC8vIFdoaWxl
IGluc2lkZSB0aGUgY2FsbCBzdGFjayBvZiBjcmVhdGluZyBhbiBlbGVtZW50LCB3ZSBuZWVkIHRv
IGF2b2lkIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjUxNzQKKworICAgIGlmIChyb2xlICE9IExpc3RCb3hP
cHRpb25Sb2xlICYmIHJvbGUgIT0gTWVudUl0ZW1Sb2xlKQorICAgICAgICByZXR1cm4gcm9sZTsK
KyAgICAKKyAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVj
dCgpOyBwYXJlbnQgJiYgIXBhcmVudC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBwYXJlbnQg
PSBwYXJlbnQtPnBhcmVudE9iamVjdCgpKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBh
cmVudEFyaWFSb2xlID0gcGFyZW50LT5hcmlhUm9sZUF0dHJpYnV0ZSgpOworCisgICAgICAgIC8v
IFNlbGVjdHMgYW5kIGxpc3Rib3hlcyBib3RoIGhhdmUgb3B0aW9ucyBhcyBjaGlsZCByb2xlcywg
YnV0IHRoZXkgbWFwIHRvIGRpZmZlcmVudCByb2xlcyB3aXRoaW4gV2ViQ29yZS4KKyAgICAgICAg
aWYgKHJvbGUgPT0gTGlzdEJveE9wdGlvblJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gTWVudVJv
bGUpCisgICAgICAgICAgICByZXR1cm4gTWVudUl0ZW1Sb2xlOworICAgICAgICAvLyBBbiBhcmlh
ICJtZW51aXRlbSIgbWF5IG1hcCB0byBNZW51QnV0dG9uIG9yIE1lbnVJdGVtIGRlcGVuZGluZyBv
biBpdHMgcGFyZW50LgorICAgICAgICBpZiAocm9sZSA9PSBNZW51SXRlbVJvbGUgJiYgcGFyZW50
QXJpYVJvbGUgPT0gR3JvdXBSb2xlKQorICAgICAgICAgICAgcmV0dXJuIE1lbnVCdXR0b25Sb2xl
OworICAgICAgICAKKyAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBoYWQgYSBkaWZmZXJlbnQgcm9s
ZSwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNvbnRpbnVlIHNlYXJjaGluZyB1cCB0aGUgY2hhaW4u
CisgICAgICAgIGlmIChwYXJlbnRBcmlhUm9sZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gcm9sZTsKK30gICAKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICAr
IExGCgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdF9oCisjZGVmaW5l
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0X2gKKworI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3QuaCIKKyNpbmNsdWRlICJMYXlvdXRUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIEFYT2JqZWN0Q2FjaGU7CitjbGFz
cyBFbGVtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBGcmFtZVZpZXc7CitjbGFzcyBIaXRUZXN0
UmVzdWx0OworY2xhc3MgSFRNTEFuY2hvckVsZW1lbnQ7CitjbGFzcyBIVE1MQXJlYUVsZW1lbnQ7
CitjbGFzcyBIVE1MRWxlbWVudDsKK2NsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CitjbGFzcyBIVE1M
TWFwRWxlbWVudDsKK2NsYXNzIEhUTUxTZWxlY3RFbGVtZW50OworY2xhc3MgSW50UG9pbnQ7Citj
bGFzcyBJbnRTaXplOworY2xhc3MgTm9kZTsKK2NsYXNzIFJlbmRlckxpc3RCb3g7CitjbGFzcyBS
ZW5kZXJUZXh0Q29udHJvbDsKK2NsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBWaXNpYmxlU2VsZWN0
aW9uOworY2xhc3MgV2lkZ2V0OworICAgIAorY2xhc3MgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qg
OiBwdWJsaWMgQWNjZXNzaWJpbGl0eU9iamVjdCB7Citwcm90ZWN0ZWQ6CisgICAgQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QoTm9kZSopOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0PiBjcmVhdGUoTm9kZSopOworICAgIHZpcnR1YWwgfkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCBib29sIGNhblNldEZvY3VzQXR0cmlidXRlKCkgY29u
c3Q7CisgICAgCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmaXJzdENoaWxkKCkg
Y29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHByZXZpb3VzU2libGluZygpIGNv
bnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogbmV4dFNpYmxpbmcoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudE9iamVjdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50T2JqZWN0SWZFeGlzdHMo
KSBjb25zdDsKKworICAgIHZvaWQgc2V0Tm9kZShOb2RlKik7CisgICAgdmlydHVhbCBOb2RlKiBu
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CisgICAgdmlydHVhbCBEb2N1bWVudCogZG9j
dW1lbnQoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBkZXRhY2goKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CisgICAgdm9pZCB1cGRhdGVBY2Nlc3NpYmlsaXR5Um9s
ZSgpOworCisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGVsZW1lbnRSZWN0KCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBtX2FyaWFSb2xlOworICAgIGJvb2wgbV9j
aGlsZHJlbkRpcnR5OworICAgIG11dGFibGUgQWNjZXNzaWJpbGl0eVJvbGUgbV9yb2xlRm9yTVNB
QTsKKworICAgIHZpcnR1YWwgYm9vbCBpc0RldGFjaGVkKCkgY29uc3QgeyByZXR1cm4gIW1fbm9k
ZTsgfQorCisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBY2Nlc3NpYmls
aXR5Um9sZSgpOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZHJlbigpOworICAgIHZpcnR1YWwg
Ym9vbCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3Q7CisgICAgQWNjZXNzaWJpbGl0eVJv
bGUgYXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKKyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRl
cm1pbmVBcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OworICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJl
bWFwQXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgTm9kZSogbV9ub2RlOworfTsKKworaW5saW5lIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0KiB0b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
Kj4ob2JqZWN0KTsKK30KKworaW5saW5lIGNvbnN0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KiB0
b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0Kj4ob2JqZWN0KTsKK30KKworLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBh
biB1bm5lY2Vzc2FyeSBjYXN0Lgordm9pZCB0b0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KGNvbnN0
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Kik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0X2gKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNp
b24gMTIzMjUzKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw2ICszMTcsNyBAQCBwdWJsaWM6CiAKICAg
ICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gPiBBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3I7CiAgICAgCisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAgICAKICAgICB2aXJ0dWFsIGJv
b2wgaXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nlc3NpYmlsaXR5U2Nyb2xsVmlldygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3Iu
Y3BwCShyZXZpc2lvbiAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcg
KzQxLDkgQEAgQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yOjpBY2Nlc3NpYgogCiBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcj4gQWNjZXNzaWJpbGl0eVByb2dy
ZXNzSW5kaWNhdG9yOjpjcmVhdGUoUmVuZGVyUHJvZ3Jlc3MqIHJlbmRlcmVyKQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yKHJlbmRlcmVy
KSk7CisgICAgQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yKiBvYmogPSBuZXcgQWNjZXNz
aWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJ
bmRpY2F0b3I6OmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCShyZXZpc2lvbiAxMjMyNTMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Mywx
NCArOTMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCi0gICAgOiBBY2Nlc3NpYmlsaXR5T2JqZWN0KCkKKyAg
ICA6IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KHJlbmRlcmVyLT5ub2RlKCkpCiAgICAgLCBtX3Jl
bmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKLSAgICAsIG1f
Y2hpbGRyZW5EaXJ0eShmYWxzZSkKLSAgICAsIG1fcm9sZUZvck1TQUEoVW5rbm93blJvbGUpCiB7
Ci0gICAgbV9yb2xlID0gZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKLQogI2lmbmRlZiBO
REVCVUcKICAgICBtX3JlbmRlcmVyLT5zZXRIYXNBWE9iamVjdCh0cnVlKTsKICNlbmRpZgpAQCAt
MTExLDIxICsxMDYsMjcgQEAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6fkFjY2Vzc2liaWxp
dAogICAgIEFTU0VSVChpc0RldGFjaGVkKCkpOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmluaXQoKQoreworICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KCk7
Cit9CisKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdD4gQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJl
ZihvYmopOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCgpCiB7
Ci0gICAgY2xlYXJDaGlsZHJlbigpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaCgp
OworICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2goKTsKICAgICAKICNpZm5kZWYg
TkRFQlVHCiAgICAgaWYgKG1fcmVuZGVyZXIpCiAgICAgICAgIG1fcmVuZGVyZXItPnNldEhhc0FY
T2JqZWN0KGZhbHNlKTsKICNlbmRpZgotICAgIG1fcmVuZGVyZXIgPSAwOyAgICAKKyAgICBtX3Jl
bmRlcmVyID0gMDsKIH0KIAogUmVuZGVyQm94TW9kZWxPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3QKQEAgLTEzNSw2ICsxMzYsMTIg
QEAgUmVuZGVyQm94TW9kZWxPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZQogICAgIHJldHVybiB0
b1JlbmRlckJveE1vZGVsT2JqZWN0KG1fcmVuZGVyZXIpOwogfQogCit2b2lkIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7Cisg
ICAgbV9yZW5kZXJlciA9IHJlbmRlcmVyOworICAgIHNldE5vZGUocmVuZGVyZXItPm5vZGUoKSk7
Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZVdpdGhDb250aW51YXRpb24oUmVuZGVy
T2JqZWN0KiBvYmplY3QpCiB7CiAgICAgaWYgKCFvYmplY3QtPmlzQm94TW9kZWxPYmplY3QoKSkK
QEAgLTMwODQsNzUgKzMwOTEsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
UmVuZGVyCiAgICAgcmV0dXJuIDA7CiB9CiAKLUFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9s
ZSByb2xlKSBjb25zdAotewotICAgIC8vIFNvbWUgb2JqZWN0cyBjaGFuZ2UgdGhlaXIgcm9sZSBi
YXNlZCBvbiB0aGVpciBwYXJlbnQuCi0gICAgLy8gSG93ZXZlciwgYXNraW5nIGZvciB0aGUgdW5p
Z25vcmVkUGFyZW50IGNhbGxzIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSwgd2hpY2ggY2FuIHRy
aWdnZXIgYSBsb29wLiAKLSAgICAvLyBXaGlsZSBpbnNpZGUgdGhlIGNhbGwgc3RhY2sgb2YgY3Jl
YXRpbmcgYW4gZWxlbWVudCwgd2UgbmVlZCB0byBhdm9pZCBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVk
KCkuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1MTc0
Ci0KLSAgICBpZiAocm9sZSAhPSBMaXN0Qm94T3B0aW9uUm9sZSAmJiByb2xlICE9IE1lbnVJdGVt
Um9sZSkKLSAgICAgICAgcmV0dXJuIHJvbGU7Ci0gICAgCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsgcGFyZW50ICYmICFwYXJlbnQtPmFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKTsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRPYmplY3QoKSkgewot
ICAgICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBwYXJlbnRBcmlhUm9sZSA9IHBhcmVudC0+YXJpYVJv
bGVBdHRyaWJ1dGUoKTsKLQotICAgICAgICAvLyBTZWxlY3RzIGFuZCBsaXN0Ym94ZXMgYm90aCBo
YXZlIG9wdGlvbnMgYXMgY2hpbGQgcm9sZXMsIGJ1dCB0aGV5IG1hcCB0byBkaWZmZXJlbnQgcm9s
ZXMgd2l0aGluIFdlYkNvcmUuCi0gICAgICAgIGlmIChyb2xlID09IExpc3RCb3hPcHRpb25Sb2xl
ICYmIHBhcmVudEFyaWFSb2xlID09IE1lbnVSb2xlKQotICAgICAgICAgICAgcmV0dXJuIE1lbnVJ
dGVtUm9sZTsKLSAgICAgICAgLy8gQW4gYXJpYSAibWVudWl0ZW0iIG1heSBtYXAgdG8gTWVudUJ1
dHRvbiBvciBNZW51SXRlbSBkZXBlbmRpbmcgb24gaXRzIHBhcmVudC4KLSAgICAgICAgaWYgKHJv
bGUgPT0gTWVudUl0ZW1Sb2xlICYmIHBhcmVudEFyaWFSb2xlID09IEdyb3VwUm9sZSkKLSAgICAg
ICAgICAgIHJldHVybiBNZW51QnV0dG9uUm9sZTsKLSAgICAgICAgCi0gICAgICAgIC8vIElmIHRo
ZSBwYXJlbnQgaGFkIGEgZGlmZmVyZW50IHJvbGUsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBjb250
aW51ZSBzZWFyY2hpbmcgdXAgdGhlIGNoYWluLgotICAgICAgICBpZiAocGFyZW50QXJpYVJvbGUp
Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJvbGU7Ci19Ci0g
ICAgCi1BY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZXRlcm1p
bmVBcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBh
cmlhUm9sZSA9IGdldEF0dHJpYnV0ZShyb2xlQXR0cik7Ci0gICAgaWYgKGFyaWFSb2xlLmlzTnVs
bCgpIHx8IGFyaWFSb2xlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOwot
ICAgIAotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBhcmlhUm9sZVRvV2ViQ29yZVJvbGUo
YXJpYVJvbGUpOwotCi0gICAgLy8gQVJJQSBzdGF0ZXMgaWYgYW4gaXRlbSBjYW4gZ2V0IGZvY3Vz
LCBpdCBzaG91bGQgbm90IGJlIHByZXNlbnRhdGlvbmFsLgotICAgIGlmIChyb2xlID09IFByZXNl
bnRhdGlvbmFsUm9sZSAmJiBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQotICAgICAgICByZXR1cm4g
VW5rbm93blJvbGU7Ci0gICAgCi0gICAgaWYgKHJvbGUgPT0gQnV0dG9uUm9sZSAmJiBhcmlhSGFz
UG9wdXAoKSkKLSAgICAgICAgcm9sZSA9IFBvcFVwQnV0dG9uUm9sZTsKLQotICAgIGlmIChyb2xl
ID09IFRleHRBcmVhUm9sZSAmJiAhYXJpYUlzTXVsdGlsaW5lKCkpCi0gICAgICAgIHJvbGUgPSBU
ZXh0RmllbGRSb2xlOwotCi0gICAgcm9sZSA9IHJlbWFwQXJpYVJvbGVEdWVUb1BhcmVudChyb2xl
KTsKLSAgICAKLSAgICBpZiAocm9sZSkKLSAgICAgICAgcmV0dXJuIHJvbGU7Ci0KLSAgICByZXR1
cm4gVW5rbm93blJvbGU7Ci19Ci0KLUFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OmFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hcmlh
Um9sZTsKLX0KLSAgICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6dXBkYXRlQWNj
ZXNzaWJpbGl0eVJvbGUoKQotewotICAgIGJvb2wgaWdub3JlZFN0YXR1cyA9IGFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKTsKLSAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgp
OwotICAgIAotICAgIC8vIFRoZSBBWCBoaWVyYXJjaHkgb25seSBuZWVkcyB0byBiZSB1cGRhdGVk
IGlmIHRoZSBpZ25vcmVkIHN0YXR1cyBvZiBhbiBlbGVtZW50IGhhcyBjaGFuZ2VkLgotICAgIGlm
IChpZ25vcmVkU3RhdHVzICE9IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgY2hp
bGRyZW5DaGFuZ2VkKCk7Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmlzRGVzY2VuZGFudE9mRWxlbWVudFR5cGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkg
Y29uc3QKIHsKICAgICBmb3IgKFJlbmRlck9iamVjdCogcGFyZW50ID0gbV9yZW5kZXJlci0+cGFy
ZW50KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnQoKSkgewpAQCAtMzM4OSwyNSAr
MzMyNyw2IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYVJvbGUKICAgICB9
CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKSBjb25zdAotewotICAgIE5vZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7Ci0KLSAgICBpZiAo
aXNXZWJBcmVhKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIC8vIE5PVEU6IEl0
IHdvdWxkIGJlIG1vcmUgYWNjdXJhdGUgdG8gYXNrIHRoZSBkb2N1bWVudCB3aGV0aGVyIHNldEZv
Y3VzZWROb2RlKCkgd291bGQKLSAgICAvLyBkbyBhbnl0aGluZy4gIEZvciBleGFtcGxlLCBzZXRG
b2N1c2VkTm9kZSgpIHdpbGwgZG8gbm90aGluZyBpZiB0aGUgY3VycmVudCBmb2N1c2VkCi0gICAg
Ly8gbm9kZSB3aWxsIG5vdCByZWxpbnF1aXNoIHRoZSBmb2N1cy4KLSAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYg
IXN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+aXNFbmFibGVkRm9ybUNvbnRyb2woKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG5vZGUtPnN1cHBvcnRzRm9jdXMoKTsK
LX0KLSAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y2FuU2V0RXhwYW5kZWRB
dHRyaWJ1dGUoKSBjb25zdAogewogICAgIC8vIEFuIG9iamVjdCBjYW4gYmUgZXhwYW5kZWQgaWYg
aXQgYXJpYS1leHBhbmRlZCBpcyB0cnVlIG9yIGZhbHNlLgpAQCAtMzQ1NCwzOSArMzM3MywxNSBA
QCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNvbnRlbnRDCiAgICAgfQogfQogICAg
IAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKQotewot
ICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IGFzIGEgcXVpY2sgd2F5IG9mIG1hcmtpbmcgYSBw
b3J0aW9uIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZGlydHkuCi0gICAgaWYgKCFtX3JlbmRl
cmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmlj
YXRpb24odGhpcywgZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhDaGlsZHJlbkNoYW5nZWQs
IHRydWUpOwotCi0gICAgLy8gR28gdXAgdGhlIGFjY2Vzc2liaWxpdHkgcGFyZW50IGNoYWluLCBi
dXQgb25seSBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGV4aXN0cy4gVGhpcyBtZXRob2QgaXMKLSAg
ICAvLyBjYWxsZWQgZHVyaW5nIHJlbmRlciBsYXlvdXRzLCBtaW5pbWFsIHdvcmsgc2hvdWxkIGJl
IGRvbmUuIAotICAgIC8vIElmIEFYIGVsZW1lbnRzIGFyZSBjcmVhdGVkIG5vdywgdGhleSBjb3Vs
ZCBpbnRlcnJvZ2F0ZSB0aGUgcmVuZGVyIHRyZWUgd2hpbGUgaXQncyBpbiBhIGZ1bmt5IHN0YXRl
LgotICAgIC8vIEF0IHRoZSBzYW1lIHRpbWUsIHByb2Nlc3MgQVJJQSBsaXZlIHJlZ2lvbiBjaGFu
Z2VzLgotICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gdGhpczsgcGFyZW50
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE9iamVjdElmRXhpc3RzKCkpIHsKLSAgICAgICAgcGFy
ZW50LT5zZXROZWVkc1RvVXBkYXRlQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBUaGVzZSBub3Rp
ZmljYXRpb25zIGFsd2F5cyBuZWVkIHRvIGJlIHNlbnQgYmVjYXVzZSBzY3JlZW5yZWFkZXJzIGFy
ZSByZWxpYW50IG9uIHRoZW0gdG8gcGVyZm9ybS4gCi0gICAgICAgIC8vIEluIG90aGVyIHdvcmRz
LCB0aGV5IG5lZWQgdG8gYmUgc2VudCBldmVuIHdoZW4gdGhlIHNjcmVlbiByZWFkZXIgaGFzIG5v
dCBhY2Nlc3NlZCB0aGlzIGxpdmUgcmVnaW9uIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZS4KLQotICAg
ICAgICAvLyBJZiB0aGlzIGVsZW1lbnQgc3VwcG9ydHMgQVJJQSBsaXZlIHJlZ2lvbnMsIHRoZW4g
bm90aWZ5IHRoZSBBVCBvZiBjaGFuZ2VzLgotICAgICAgICBpZiAocGFyZW50LT5zdXBwb3J0c0FS
SUFMaXZlUmVnaW9uKCkpCi0gICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmlj
YXRpb24ocGFyZW50LCBwYXJlbnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYTGl2ZVJl
Z2lvbkNoYW5nZWQsIHRydWUpOwotICAgICAgICAKLSAgICAgICAgLy8gSWYgdGhpcyBlbGVtZW50
IGlzIGFuIEFSSUEgdGV4dCBjb250cm9sLCBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCi0gICAg
ICAgIGlmIChwYXJlbnQtPmlzQVJJQVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+aXNOYXRpdmVU
ZXh0Q29udHJvbCgpICYmICFwYXJlbnQtPm5vZGUoKS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCi0g
ICAgICAgICAgICBheE9iamVjdENhY2hlKCktPnBvc3ROb3RpZmljYXRpb24ocGFyZW50LCBwYXJl
bnQtPmRvY3VtZW50KCksIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLSAg
ICB9Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNhbkhhdmVDaGls
ZHJlbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCisgICAgLy8gQ2FudmFzIGlzIGEgc3BlY2lhbCBjYXNlOyBpdHMgcm9sZSBpcyBJ
bWFnZVJvbGUgYnV0IGl0IGlzIGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbi4KKyAgICBpZiAobm9k
ZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShjYW52YXNUYWcpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKwogICAgIC8vIEVsZW1lbnRzIHRoYXQgc2hvdWxkIG5vdCBoYXZlIGNoaWxkcmVuCiAgICAg
c3dpdGNoIChyb2xlVmFsdWUoKSkgewogICAgIGNhc2UgSW1hZ2VSb2xlOgpAQCAtMzU1OSw2ICsz
NDU0LDE4IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkVGV4dEYKICAgICBt
X2NoaWxkcmVuLmFwcGVuZChheFNwaW5CdXR0b24pOwogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmFkZENhbnZhc0NoaWxkcmVuKCkKK3sKKyAgICAvLyBJZiBpdCdzIGEgY2Fu
dmFzLCBpdCB3b24ndCBoYXZlIHJlbmRlcmVkIGNoaWxkcmVuLCBidXQgaXQgbWlnaHQgaGF2ZSBh
Y2Nlc3NpYmxlIGZhbGxiYWNrIGNvbnRlbnQuCisgICAgaWYgKG5vZGUoKSAmJiBub2RlKCktPmhh
c1RhZ05hbWUoY2FudmFzVGFnKSkgeworICAgICAgICAvLyBDbGVhciBtX2hhdmVDaGlsZHJlbiBi
ZWNhdXNlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphZGRDaGlsZHJlbiB3aWxsIGV4cGVjdCBp
dCB0byBiZSBmYWxzZS4KKyAgICAgICAgQVNTRVJUKCFtX2NoaWxkcmVuLnNpemUoKSk7CisgICAg
ICAgIG1faGF2ZUNoaWxkcmVuID0gZmFsc2U7CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphZGRDaGlsZHJlbigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCiB2b2lkIEFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZEF0dGFjaG1lbnRDaGlsZHJlbigpCiB7CiAgICAg
aWYgKCFpc0F0dGFjaG1lbnQoKSkKQEAgLTM1OTUsMTEgKzM1MDIsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxkCiAgICAgLy8gSWYgdGhlIG5lZWQgdG8gYWRkIG1v
cmUgY2hpbGRyZW4gaW4gYWRkaXRpb24gdG8gZXhpc3RpbmcgY2hpbGRyZW4gYXJpc2VzLCAKICAg
ICAvLyBjaGlsZHJlbkNoYW5nZWQgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQsIGxlYXZpbmcgdGhl
IG9iamVjdCB3aXRoIG5vIGNoaWxkcmVuLgogICAgIEFTU0VSVCghbV9oYXZlQ2hpbGRyZW4pOyAK
LSAgICAKLSAgICAvLyBub3RoaW5nIHRvIGFkZCBpZiB0aGVyZSBpcyBubyBSZW5kZXJPYmplY3QK
LSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIG1faGF2
ZUNoaWxkcmVuID0gdHJ1ZTsKICAgICAKICAgICBpZiAoIWNhbkhhdmVDaGlsZHJlbigpKQpAQCAt
MzYwNyw3ICszNTEwLDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphZGRDaGls
ZAogICAgIAogICAgIC8vIGFkZCBhbGwgdW5pZ25vcmVkIGFjYyBjaGlsZHJlbgogICAgIGZvciAo
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IGZpcnN0Q2hpbGQoKTsgb2JqOyBvYmog
PSBvYmotPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgCiAgICAgICAgIC8vIElmIHRoZSBwYXJl
bnQgaXMgYXNraW5nIGZvciB0aGlzIGNoaWxkJ3MgY2hpbGRyZW4sIHRoZW4gZWl0aGVyIGl0J3Mg
dGhlIGZpcnN0IHRpbWUgKGFuZCBjbGVhcmluZyBpcyBhIG5vLW9wKSwgCiAgICAgICAgIC8vIG9y
IGl0cyB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgY2hp
bGQgbWF5IGhhdmUgYSBzdGFsZSBjaGlsZCBjYWNoZWQuIAogICAgICAgICAvLyBUaGlzIGNhbiBw
cmV2ZW50IGFyaWEtaGlkZGVuIGNoYW5nZXMgZnJvbSB3b3JraW5nIGNvcnJlY3RseS4gSGVuY2Us
IHdoZW5ldmVyIGEgcGFyZW50IGlzIGdldHRpbmcgY2hpbGRyZW4sIGVuc3VyZSBkYXRhIGlzIG5v
dCBzdGFsZS4KQEAgLTM2MjcsNiArMzUyOSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGQKICAgICBhZGRBdHRhY2htZW50Q2hpbGRyZW4oKTsKICAgICBhZGRJbWFn
ZU1hcENoaWxkcmVuKCk7CiAgICAgYWRkVGV4dEZpZWxkQ2hpbGRyZW4oKTsKKyAgICBhZGRDYW52
YXNDaGlsZHJlbigpOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHVwZGF0ZUF0dGFjaG1lbnRW
aWV3UGFyZW50cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDEyMzI1MykKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaWZuZGVmIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3RfaAogI2RlZmluZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0X2gKIAotI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdC5oIgogI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KIApAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBSZW5kZXJWaWV3OwogY2xhc3MgVmlzaWJs
ZVNlbGVjdGlvbjsKIGNsYXNzIFdpZGdldDsKICAgICAKLWNsYXNzIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU9iamVjdCB7CitjbGFzcyBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0IDogcHVibGljIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IHsKIHByb3Rl
Y3RlZDoKICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCopOwogcHVi
bGljOgpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdCgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
aW5pdCgpOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FuY2hvcigpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBpc0F0dGFjaG1lbnQoKSBjb25zdDsKQEAgLTExMSw3ICsxMTMsNiBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGhhc1NhbWVTdHlsZShSZW5kZXJPYmplY3QqKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzVW5kZXJsaW5lKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgY2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0
VGV4dFJhbmdlQXR0cmlidXRlcygpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRWYWx1
ZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRFeHBhbmRlZEF0dHJp
YnV0ZSgpIGNvbnN0OwpAQCAtMTQ5LDEwICsxNTAsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgYXJpYU93bnNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBUklBT3ducygpIGNvbnN0OwotICAgIHZpcnR1
YWwgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIGJvb2wgaXNQcmVzZW50YXRpb25hbENoaWxkT2ZBcmlhUm9sZSgpIGNvbnN0OwogICAgIHZp
cnR1YWwgYm9vbCBhcmlhUm9sZUhhc1ByZXNlbnRhdGlvbmFsQ2hpbGRyZW4oKSBjb25zdDsKLSAg
ICB2b2lkIHVwZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CiAgICAgCiAgICAgLy8gU2hvdWxkIGJl
IGNhbGxlZCBvbiB0aGUgcm9vdCBhY2Nlc3NpYmlsaXR5IG9iamVjdCB0byBraWNrIG9mZiBhIGhp
dCB0ZXN0LgogICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eUhp
dFRlc3QoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKQEAgLTE2OCwxNCArMTY3LDE1IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIExheW91dFJlY3QgZWxlbWVudFJlY3QoKSBjb25zdDsKICAgICB2aXJ0
dWFsIEludFBvaW50IGNsaWNrUG9pbnQoKTsKICAgICAKLSAgICB2b2lkIHNldFJlbmRlcmVyKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CisgICAgdm9p
ZCBzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCog
cmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmVyOyB9CiAgICAgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIHJlbmRlckJveE1vZGVsT2JqZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBOb2Rl
KiBub2RlKCkgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
OworCiAgICAgUmVuZGVyVmlldyogdG9wUmVuZGVyZXIoKSBjb25zdDsKICAgICBSZW5kZXJUZXh0
Q29udHJvbCogdGV4dENvbnRyb2woKSBjb25zdDsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQoKSBj
b25zdDsKICAgICBGcmFtZVZpZXcqIHRvcERvY3VtZW50RnJhbWVWaWV3KCkgY29uc3Q7ICAKICAg
ICBEb2N1bWVudCogdG9wRG9jdW1lbnQoKSBjb25zdDsKICAgICBIVE1MTGFiZWxFbGVtZW50KiBs
YWJlbEVsZW1lbnRDb250YWluZXIoKSBjb25zdDsKQEAgLTIxNCw3ICsyMTQsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRlY3JlbWVudCgpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBk
ZXRhY2goKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgdmlydHVh
bCB2b2lkIGNvbnRlbnRDaGFuZ2VkKCk7CiAgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkcmVuKCk7
CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OwpAQCAtMjYwLDggKzI1
OSw2IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJl
cjsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBtX2FyaWFSb2xlOwotICAgIGJvb2wgbV9jaGlsZHJl
bkRpcnR5OwogICAgIAogICAgIHZvaWQgc2V0UmVuZGVyT2JqZWN0KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpIHsgbV9yZW5kZXJlciA9IHJlbmRlcmVyOyB9CiAgICAgdm9pZCBhcmlhTGFiZWxlZEJ5
RWxlbWVudHMoVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpIGNvbnN0OwpAQCAtMjcxLDYgKzI2
OCw4IEBAIHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNEZXRhY2hlZCgpIGNv
bnN0IHsgcmV0dXJuICFtX3JlbmRlcmVyOyB9CiAKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlS
b2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBh
cmlhTGlzdGJveFNlbGVjdGVkQ2hpbGRyZW4oQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7
CiAgICAgdm9pZCBhcmlhTGlzdGJveFZpc2libGVDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImKTsKQEAgLTI4Niw5ICsyODUsNiBAQCBwcml2YXRlOgogCiAgICAgRWxlbWVudCog
bWVudUVsZW1lbnRGb3JNZW51QnV0dG9uKCkgY29uc3Q7CiAgICAgRWxlbWVudCogbWVudUl0ZW1F
bGVtZW50Rm9yTWVudSgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKCk7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQXJpYVJv
bGVBdHRyaWJ1dGUoKSBjb25zdDsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSByZW1hcEFyaWFSb2xl
RHVlVG9QYXJlbnQoQWNjZXNzaWJpbGl0eVJvbGUpIGNvbnN0OwogCiAgICAgYm9vbCBpc1RhYkl0
ZW1TZWxlY3RlZCgpIGNvbnN0OwogICAgIHZvaWQgYWx0ZXJTbGlkZXJWYWx1ZShib29sIGluY3Jl
YXNlKTsKQEAgLTMwNSw2ICszMDEsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRUZXh0Rmll
bGRDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkSW1hZ2VNYXBDaGlsZHJlbigpOworICAgIHZvaWQg
YWRkQ2FudmFzQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZEF0dGFjaG1lbnRDaGlsZHJlbigpOwog
I2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHVwZGF0ZUF0dGFjaG1lbnRWaWV3UGFyZW50cygp
OwpAQCAtMzI4LDggKzMyNSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGFyaWFMaXZl
UmVnaW9uQnVzeSgpIGNvbnN0OyAgICAKICAgICAKICAgICBib29sIGluaGVyaXRzUHJlc2VudGF0
aW9uYWxSb2xlKCkgY29uc3Q7Ci0gICAgCi0gICAgbXV0YWJsZSBBY2Nlc3NpYmlsaXR5Um9sZSBt
X3JvbGVGb3JNU0FBOwogfTsKIAogaW5saW5lIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QqIHRv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTbGlkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVNsaWRlci5jcHAJKHJldmlzaW9uIDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDkgQEAgQWNjZXNzaWJpbGl0eVNsaWRlcjo6QWNjZXNzaWJpbGl0eVNsaWRlcgogCiBQYXNzUmVm
UHRyPEFjY2Vzc2liaWxpdHlTbGlkZXI+IEFjY2Vzc2liaWxpdHlTbGlkZXI6OmNyZWF0ZShSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJp
bGl0eVNsaWRlcihyZW5kZXJlcikpOworICAgIEFjY2Vzc2liaWxpdHlTbGlkZXIqIG9iaiA9IG5l
dyBBY2Nlc3NpYmlsaXR5U2xpZGVyKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uIEFjY2Vz
c2liaWxpdHlTbGlkZXI6Om9yaWVudGF0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHJldmlzaW9u
IDEyMzI1MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTUgQEAgQWNjZXNzaWJpbGl0eVRh
YmxlOjpBY2Nlc3NpYmlsaXR5VGFibGUoUgogICAgIDogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dChyZW5kZXJlciksCiAgICAgbV9oZWFkZXJDb250YWluZXIoMCkKIHsKK30KKworQWNjZXNzaWJp
bGl0eVRhYmxlOjp+QWNjZXNzaWJpbGl0eVRhYmxlKCkKK3sKK30KKwordm9pZCBBY2Nlc3NpYmls
aXR5VGFibGU6OmluaXQoKQoreworICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmluaXQo
KTsKICNpZiBBQ0NFU1NJQklMSVRZX1RBQkxFUwogICAgIG1faXNBY2Nlc3NpYmlsaXR5VGFibGUg
PSBpc1RhYmxlRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKTsKICNlbHNlCkBAIC01OCwx
MyArNjcsMTEgQEAgQWNjZXNzaWJpbGl0eVRhYmxlOjpBY2Nlc3NpYmlsaXR5VGFibGUoUgogI2Vu
ZGlmCiB9CiAKLUFjY2Vzc2liaWxpdHlUYWJsZTo6fkFjY2Vzc2liaWxpdHlUYWJsZSgpCi17Ci19
Ci0KIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlPiBBY2Nlc3NpYmlsaXR5VGFibGU6OmNy
ZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QWNjZXNzaWJpbGl0eVRhYmxlKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBv
YmogPSBuZXcgQWNjZXNzaWJpbGl0eVRhYmxlKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6
Omhhc0FSSUFSb2xlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAkocmV2aXNpb24gMTIzMjUzKQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVRhYmxlPiBjcmVhdGUoUmVuZGVyT2JqZWN0Kik7CiAgICAgdmlydHVhbCB+QWNjZXNz
aWJpbGl0eVRhYmxlKCk7CiAKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdCgpOworCiAgICAgdmlydHVh
bCBib29sIGlzQWNjZXNzaWJpbGl0eVRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlz
RGF0YVRhYmxlKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAkocmV2aXNpb24gMTIzMjUz
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsOSBAQCBBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsOjp+QWNjZXNzaWJpbGl0eVRhCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bD4gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKHJlbmRl
cmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbCogb2JqID0gbmV3IEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGwocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9w
dFJlZihvYmopOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAkocmV2aXNpb24gMTIzMjUzKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw5IEBAIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
fkFjY2Vzc2liaWxpdHlUYWIKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGFibGVSb3c+IEFj
Y2Vzc2liaWxpdHlUYWJsZVJvdzo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5VGFibGVSb3cocmVuZGVyZXIpKTsK
KyAgICBBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5VGFibGVS
b3cocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmop
OwogfQogCiBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OnJvbGVWYWx1
ZSgpIGNvbnN0CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjMyNTMpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMi0wNy0yMCAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBuZXcgdGVzdCBhZGRzIGEgYnVuY2ggb2YgZWxlbWVudHMgdG8gYSBub3JtYWwgY29udGFpbmVy
IGFuZCB0aGUgc2FtZSBlbGVtZW50cyB0bworICAgICAgICBhIGNhbnZhcyBzdWJ0cmVlLCB0aGVu
IGl0IGl0ZXJhdGVzIG92ZXIgYWxsIG9mIHRoZSBhY2Nlc3NpYmxlIG9iamVjdHMgd2l0aGluIGVh
Y2gKKyAgICAgICAgY29udGFpbmVyIGFuZCBtYWtlcyBzdXJlIHRoZXkgaGF2ZSBpZGVudGljYWwg
cm9sZXMuIEJlY2F1c2Ugd2Uga25vdyB0aGUgbm9kZXMgaW4gdGhlCisgICAgICAgIGNhbnZhcyBz
dWJ0cmVlIGRvbid0IGhhdmUgcmVuZGVyZXJzLCB0aGlzIHN1Y2Nlc3NmdWxseSB0ZXN0cyB0aGF0
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0cworICAgICAgICBhcmUgZ2V0dGluZyBjcmVhdGVkIGZv
ciB0aGVzZSBub2Rlcy4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2li
aWxpdHlub2Rlb2JqZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbDogQWRkZWQuCisKIDIwMTIt
MDctMjAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21p
dW1dIFJlYmFzZWxpbmUgY3NzMy9maWx0ZXJzL2N1c3RvbSB0ZXN0cwpJbmRleDogTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vz
c2liaWxpdHlub2Rlb2JqZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxpdHlub2Rlb2JqZWN0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorTGluayAgQnV0dG9uICAgICAgICAg
ICBBUklBIGJ1dHRvbiBBUklBIGxpbmsKK1RoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3RzIGFyZSBjcmVhdGVkIGZvciBlbGVtZW50cyBpbiBhIGNhbnZhcyBz
dWJ0cmVlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBheFJlbmRlck9i
amVjdHMubGVuZ3RoIGlzIGF4Tm9kZU9iamVjdHMubGVuZ3RoCitQQVNTIGkgPT0gMDsgYXhSZW5k
ZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gMTsg
YXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkg
PT0gMjsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQ
QVNTIGkgPT0gMzsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0
cnVlCitQQVNTIGkgPT0gNDsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9s
ZSBpcyB0cnVlCitQQVNTIGkgPT0gNTsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmpl
Y3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gNjsgYXhSZW5kZXJPYmplY3Qucm9sZSA9PSBheE5v
ZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gNzsgYXhSZW5kZXJPYmplY3Qucm9sZSA9
PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIGkgPT0gODsgYXhSZW5kZXJPYmplY3Qu
cm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0
ZWQudHh0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxpdHlub2Rlb2JqZWN0Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNz
aWJpbGl0eW5vZGVvYmplY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvY2FudmFzLWFjY2Vzc2liaWxpdHlub2Rlb2JqZWN0Lmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzMgQEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisK
KzxkaXYgaWQ9Im15Q29udGFpbmVyIiB0YWJpbmRleD0iLTEiPgorICA8YSBocmVmPSIjIj5MaW5r
PC9hPgorICA8YnV0dG9uPkJ1dHRvbjwvYnV0dG9uPgorICA8aW5wdXQgdHlwZT0idGV4dCI+Cisg
IDxpbnB1dCB0eXBlPSJjaGVja2JveCI+CisgIDxpbnB1dCB0eXBlPSJyYWRpbyI+CisgIDxpbnB1
dCB0eXBlPSJzdWJtaXQiPgorICA8c2VsZWN0PjxvcHRpb24+MTxvcHRpb24+Mjwvc2VsZWN0Pgor
ICA8c3BhbiB0YWJpbmRleD0iMCIgcm9sZT0iYnV0dG9uIj5BUklBIGJ1dHRvbjwvc3Bhbj4KKyAg
PHNwYW4gdGFiaW5kZXg9IjAiIHJvbGU9ImxpbmsiPkFSSUEgbGluazwvc3Bhbj4KKzwvZGl2Pgor
Cis8Y2FudmFzIGlkPSJteUNhbnZhcyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIHRhYmluZGV4
PSItMSI+CisgIDxhIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24+QnV0dG9uPC9idXR0b24+
CisgIDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KKyAgPGlucHV0IHR5cGU9ImNoZWNrYm94Ij4KKyAgPGlu
cHV0IHR5cGU9InJhZGlvIj4KKyAgPGlucHV0IHR5cGU9InN1Ym1pdCI+CisgIDxzZWxlY3Q+PG9w
dGlvbj4xPG9wdGlvbj4yPC9zZWxlY3Q+CisgIDxzcGFuIHRhYmluZGV4PSIwIiByb2xlPSJidXR0
b24iPkFSSUEgYnV0dG9uPC9zcGFuPgorICA8c3BhbiB0YWJpbmRleD0iMCIgcm9sZT0ibGluayI+
QVJJQSBsaW5rPC9zcGFuPgorPC9jYW52YXM+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0cyBhcmUgY3JlYXRlZCBmb3IgZWxlbWVudHMgaW4gYSBjYW52YXMgc3Vi
dHJlZS4iKTsKKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciAmJiB3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworCisgICAgZnVuY3Rpb24gYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMo
YXhPYmplY3QsIGF4Rm9jdXNhYmxlTGlzdCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGF4T2JqZWN0LmNoaWxkcmVuQ291bnQ7IGkrKykgeworICAgICAgICAgICAgdmFyIGF4Q2hpbGQg
PSBheE9iamVjdC5jaGlsZEF0SW5kZXgoaSk7CisgICAgICAgICAgICBpZiAoYXhDaGlsZC5pc0Zv
Y3VzYWJsZSkKKyAgICAgICAgICAgICAgICBheEZvY3VzYWJsZUxpc3QucHVzaChheENoaWxkKTsK
KyAgICAgICAgICAgIGFwcGVuZEZvY3VzYWJsZURlc2NlbmRhbnRzKGF4Q2hpbGQsIGF4Rm9jdXNh
YmxlTGlzdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2YXIgY29udGFpbmVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm15Q29udGFpbmVyIik7CisgICAgY29udGFpbmVyLmZvY3VzKCk7
CisgICAgdmFyIGF4Q29udGFpbmVyID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVs
ZW1lbnQ7CisKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15Q2Fu
dmFzIik7CisgICAgY2FudmFzLmZvY3VzKCk7CisgICAgdmFyIGF4Q2FudmFzID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisKKyAgICB2YXIgYXhSZW5kZXJPYmplY3Rz
ID0gW107CisgICAgdmFyIGF4Tm9kZU9iamVjdHMgPSBbXTsKKworICAgIGFwcGVuZEZvY3VzYWJs
ZURlc2NlbmRhbnRzKGF4Q29udGFpbmVyLCBheFJlbmRlck9iamVjdHMpOworICAgIGFwcGVuZEZv
Y3VzYWJsZURlc2NlbmRhbnRzKGF4Q2FudmFzLCBheE5vZGVPYmplY3RzKTsKKworICAgIHNob3Vs
ZEJlKCJheFJlbmRlck9iamVjdHMubGVuZ3RoIiwgImF4Tm9kZU9iamVjdHMubGVuZ3RoIik7CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF4UmVuZGVyT2JqZWN0cy5sZW5ndGg7IGkrKykgewor
ICAgICAgICB2YXIgYXhSZW5kZXJPYmplY3QgPSBheFJlbmRlck9iamVjdHNbaV07CisgICAgICAg
IHZhciBheE5vZGVPYmplY3QgPSBheE5vZGVPYmplY3RzW2ldOworICAgICAgICBzaG91bGRCZSgi
aSA9PSAiICsgaSArICI7IGF4UmVuZGVyT2JqZWN0LnJvbGUgPT0gYXhOb2RlT2JqZWN0LnJvbGUi
LCAidHJ1ZSIpOworICAgIH0KK30KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMt
YWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9odG1sCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153732</attachid>
            <date>2012-07-22 23:00:34 -0700</date>
            <delta_ts>2012-07-23 23:26:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87899-20120722230027.patch</filename>
            <type>text/plain</type>
            <size>65637</size>
            <attacher name="Dominic Mazzoni">dmazzoni</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNCBAQAorMjAxMi0wNy0yMiAgRG9taW5p
YyBNYXp6b25pICA8ZG1henpvbmlAZ29vZ2xlLmNvbT4KKworICAgICAgICBBWDogTmVlZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0cyBmb3Igbm9kZXMgd2l0aG91dCByZW5kZXJlcnMgaW4gY2FudmFzIHN1
YnRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
ODk5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVm
YWN0b3JzIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qgc28gdGhhdCBpdCBpbmhlcml0cyBmcm9t
IGEgbmV3IGNsYXNzLAorICAgICAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCwgdGhhdCBjYW4g
YmUgY29uc3RydWN0ZWQgZnJvbSBhIE5vZGUgd2l0aG91dCBhCisgICAgICAgIHJlbmRlcmVyLiBN
b2RpZmllcyBBWE9iamVjdENhY2hlIHNvIHRoYXQgaXQgYXV0b21hdGljYWxseSBjcmVhdGVzIGFu
CisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0IGZvciBlbGVtZW50cyBpbiBhIGNhbnZh
cyBzdWJ0cmVlIGJ1dCBub3Qgb3RoZXJ3aXNlLgorICAgICAgICBBIG5ldyBsYXlvdXQgdGVzdCB2
ZXJpZmllcyB0aGF0IHRoaXMgY29ycmVjdGx5IGV4cG9zZXMgYW4gYWNjZXNzaWJpbGl0eQorICAg
ICAgICB0cmVlIHdpdGggYXBwcm9wcmlhdGUgcm9sZXMgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFz
IHN1YnRyZWUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCB0cnkgdG8gY29tcGxldGUg
dGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICAgIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LiBN
b3N0IEFYIG1ldGhvZHMgYXJlIHN0aWxsIHVuaW1wbGVtZW50ZWQgYW5kIG5lZWQKKyAgICAgICAg
dG8gYmUgbWlncmF0ZWQgZnJvbSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHRvIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0CisgICAgICAgIGluIGEgZnV0dXJlIHBhdGNoLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCBhbHNvIGRvZXNuJ3QgY2hhbmdlIGFueXRoaW5nIG91dHNpZGUgb2Yg
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5LCBzbworICAgICAgICB0aGUgcmVzdCBvZiBXZWJDb3JlIG9u
bHkgY2FsbHMgQVhPYmplY3RDYWNoZSB3aGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGEKKyAgICAg
ICAgUmVuZGVyT2JqZWN0LCBub3QgdG8gYSBOb2RlLiBBY2Nlc3NpYmxlIG5vdGlmaWNhdGlvbnMg
b24gbm9kZXMgd2l0aG91dAorICAgICAgICByZW5kZXJlcnMgbmVlZCB0byBiZSBpbXBsZW1lbnRl
ZCBpbiBhIGZ1dHVyZSBwYXRjaC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmlsaXR5L2NhbnZh
cy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVGcm9tTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpnZXRPckNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpBWE9iamVjdENhY2hlOjpyZW1vdmUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oOgorICAgICAgICAoQVhPYmplY3RDYWNoZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
Z2V0T3JDcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cmVtb3ZlKToK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBR3Jp
ZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlB
UklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklBR3JpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5QVJJQUdyaWQ6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eUFSSUFHcmlkOjpjcmVhdGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmg6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5QVJJQUdyaWQpOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZFJvdzo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
TGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUp
OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheTo6
Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWVudUxpc3Q6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlN
ZW51TGlzdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eU1lbnVMaXN0KToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpB
Y2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6fkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OmRldGFjaCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwcmV2aW91c1NpYmxpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om5leHRTaWJsaW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpwYXJlbnRPYmplY3RJZkV4aXN0cyk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cGFyZW50T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjplbGVtZW50UmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6c2V0Tm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6ZG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFjY2Vz
c2liaWxpdHlSb2xlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dDo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cmVtYXBBcmlh
Um9sZUR1ZVRvUGFyZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChBY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6bm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aXNEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjp0b0FjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmlzQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVByb2dyZXNzSW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlQ
cm9ncmVzc0luZGljYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppbml0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGFjaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzZXRSZW5kZXJlcik6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjYW5IYXZlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRk
Q2FudmFzQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6YWRkQ2hpbGRyZW4pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTbGlkZXI6OmNyZWF0ZSk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlOjpBY2Nlc3NpYmlsaXR5VGFibGUpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjppbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVRhYmxl
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmNyZWF0ZSk6CisKIDIwMTItMDctMjIgIEtl
bnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0gQ29kZUdl
bmVyYXRvclY4LnBtIHNob3VsZCBzdXBwb3J0IHN0YXRpYyBhdHRyaWJ1dGVzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTIzMzA4KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkzNSw2ICs5MzUsNyBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uY3Bw
CiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5jcHAKICAgICBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmNwcAorICAgIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNz
SW5kaWNhdG9yLmNwcAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTIzMzA4
KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpA
QCAtMTMxNyw2ICsxMzE3LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdFBvcHVwLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tPYmplY3QuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNb2NrT2JqZWN0LmggXAorCVNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Lmgg
XAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGlj
YXRvci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCShyZXZpc2lvbiAxMjMzMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3QuY3BwIFwKICAgICBh
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBcCiAgICAgYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAgXAorICAgIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwIFwKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlQcm9ncmVzc0luZGljYXRvci5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAgXAogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9s
bGJhci5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gMTIzMzA4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0xNzkyLDYgKzE3OTIs
OCBAQAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9w
dXAuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TW9ja09iamVj
dC5jcHAnLAogICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1vY2tPYmpl
Y3QuaCcsCisgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVj
dC5jcHAnLAorICAgICAgICAgICAgJ2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3QuaCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCcsCiAgICAgICAgICAgICAnYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRp
Y2F0b3IuY3BwJywKICAgICAgICAgICAgICdhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlQcm9n
cmVzc0luZGljYXRvci5oJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24gMTIzMzA4KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDYg
KzE4OCwyMyBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoCiAgICAg
cmV0dXJuIG1fb2JqZWN0cy5nZXQoYXhJRCkuZ2V0KCk7ICAgIAogfQogCitBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gQWx3YXlzIHByZWZlciBidWlsZGluZyB0aGUg
QWNjZXNzaWJpbGl0eU9iamVjdCBmcm9tIHRoZSByZW5kZXJlciBpZiB0aGVyZSBpcyBvbmUuCisg
ICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBnZXQobm9kZS0+cmVuZGVy
ZXIoKSk7CisKKyAgICBBWElEIGF4SUQgPSBtX25vZGVPYmplY3RNYXBwaW5nLmdldChub2RlKTsK
KyAgICBBU1NFUlQoIUhhc2hUcmFpdHM8QVhJRD46OmlzRGVsZXRlZFZhbHVlKGF4SUQpKTsKKyAg
ICBpZiAoIWF4SUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fb2JqZWN0cy5n
ZXQoYXhJRCkuZ2V0KCk7Cit9CisKIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IGJlbG9uZ3Mgb24g
Tm9kZS4KIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB0YWtlIGEgY29uc3QgY2hhciosIGJ1dCBvbmUg
Y2FsbGVyIHBhc3NlcyBudWxsQXRvbS4KIGJvb2wgbm9kZUhhc1JvbGUoTm9kZSogbm9kZSwgY29u
c3QgU3RyaW5nJiByb2xlKQpAQCAtMjUyLDYgKzI2OSwxMSBAQCBzdGF0aWMgUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5T2JqZWN0PiBjCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6OmNyZWF0ZShyZW5kZXJlcik7CiB9CiAKK3N0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxp
dHlPYmplY3Q+IGNyZWF0ZUZyb21Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUobm9kZSk7Cit9CisKIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFdpZGdldCogd2lkZ2V0KQogewogICAgIGlm
ICghd2lkZ2V0KQpAQCAtMjczLDcgKzI5NSwzMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9i
amVjdENhY2hlOjpnZXRPCiAgICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOwogICAgIHJl
dHVybiBuZXdPYmouZ2V0KCk7CiB9Ci0gICAgCisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmogPSBnZXQo
bm9kZSkpCisgICAgICAgIHJldHVybiBvYmo7CisKKyAgICBpZiAobm9kZS0+cmVuZGVyZXIoKSkK
KyAgICAgICAgcmV0dXJuIGdldE9yQ3JlYXRlKG5vZGUtPnJlbmRlcmVyKCkpOworCisgICAgLy8g
SXQncyBvbmx5IGFsbG93ZWQgdG8gY3JlYXRlIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgZnJvbSBh
IE5vZGUgaWYgaXQncyBpbiBhIGNhbnZhcyBzdWJ0cmVlLgorICAgIGlmICghbm9kZS0+cGFyZW50
RWxlbWVudCgpIHx8ICFub2RlLT5wYXJlbnRFbGVtZW50KCktPmlzSW5DYW52YXNTdWJ0cmVlKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG5l
d09iaiA9IGNyZWF0ZUZyb21Ob2RlKG5vZGUpOworCisgICAgZ2V0QVhJRChuZXdPYmouZ2V0KCkp
OworCisgICAgbV9ub2RlT2JqZWN0TWFwcGluZy5zZXQobm9kZSwgbmV3T2JqLT5heE9iamVjdElE
KCkpOworICAgIG1fb2JqZWN0cy5zZXQobmV3T2JqLT5heE9iamVjdElEKCksIG5ld09iaik7Cisg
ICAgYXR0YWNoV3JhcHBlcihuZXdPYmouZ2V0KCkpOworICAgIHJldHVybiBuZXdPYmouZ2V0KCk7
Cit9CisKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCiB7CiAgICAgaWYgKCFyZW5kZXJlcikKQEAgLTM4OCw2ICs0
MzUsMjQgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpyZW1vdmUoUmVuZGVyT2JqZWN0KgogICAgIG1f
cmVuZGVyT2JqZWN0TWFwcGluZy5yZW1vdmUocmVuZGVyZXIpOwogfQogCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OnJlbW92ZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgcmVtb3ZlTm9kZUZvclVzZShub2RlKTsKKworICAgIC8vIFRoaXMgaXMgYWxs
IHNhZmUgZXZlbiBpZiB3ZSBkaWRuJ3QgaGF2ZSBhIG1hcHBpbmcuCisgICAgQVhJRCBheElEID0g
bV9ub2RlT2JqZWN0TWFwcGluZy5nZXQobm9kZSk7CisgICAgcmVtb3ZlKGF4SUQpOworICAgIG1f
bm9kZU9iamVjdE1hcHBpbmcucmVtb3ZlKG5vZGUpOworCisgICAgaWYgKG5vZGUtPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgcmVtb3ZlKG5vZGUtPnJlbmRlcmVyKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorfQorCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92ZShXaWRnZXQqIHZpZXcpCiB7
CiAgICAgaWYgKCF2aWV3KQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBA
IHB1YmxpYzoKICAgICAvLyBGb3IgQVggb2JqZWN0cyB3aXRoIGVsZW1lbnRzIHRoYXQgYmFjayB0
aGVtLgogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFJlbmRlck9iamVjdCop
OwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKFdpZGdldCopOworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGdldE9yQ3JlYXRlKE5vZGUqKTsKIAogICAgIC8vIHVzZWQgZm9y
IG9iamVjdHMgd2l0aG91dCBiYWNraW5nIGVsZW1lbnRzCiAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogZ2V0T3JDcmVhdGUoQWNjZXNzaWJpbGl0eVJvbGUpOwpAQCAtNzcsOCArNzgsMTAgQEAgcHVi
bGljOgogICAgIC8vIHdpbGwgb25seSByZXR1cm4gdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QgaWYg
aXQgYWxyZWFkeSBleGlzdHMKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBnZXQoUmVuZGVyT2Jq
ZWN0Kik7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0KFdpZGdldCopOworICAgIEFjY2Vz
c2liaWxpdHlPYmplY3QqIGdldChOb2RlKik7CiAgICAgCiAgICAgdm9pZCByZW1vdmUoUmVuZGVy
T2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmUoTm9kZSopOwogICAgIHZvaWQgcmVtb3ZlKFdpZGdl
dCopOwogICAgIHZvaWQgcmVtb3ZlKEFYSUQpOwogCkBAIC0xODIsNiArMTg1LDcgQEAgcHJpdmF0
ZToKICAgICBIYXNoTWFwPEFYSUQsIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiA+IG1fb2Jq
ZWN0czsKICAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIEFYSUQ+IG1fcmVuZGVyT2JqZWN0TWFw
cGluZzsKICAgICBIYXNoTWFwPFdpZGdldCosIEFYSUQ+IG1fd2lkZ2V0T2JqZWN0TWFwcGluZzsK
KyAgICBIYXNoTWFwPE5vZGUqLCBBWElEPiBtX25vZGVPYmplY3RNYXBwaW5nOwogICAgIEhhc2hT
ZXQ8Tm9kZSo+IG1fdGV4dE1hcmtlck5vZGVzOwogICAgIHN0YXRpYyBib29sIGdBY2Nlc3NpYmls
aXR5RW5hYmxlZDsKICAgICBzdGF0aWMgYm9vbCBnQWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlcklu
dGVyZmFjZUVuYWJsZWQ7CkBAIC0yMDQsOSArMjA4LDExIEBAIGlubGluZSBBWE9iamVjdENhY2hl
OjpBWE9iamVjdENhY2hlKGNvbnMKIGlubGluZSBBWE9iamVjdENhY2hlOjp+QVhPYmplY3RDYWNo
ZSgpIHsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmZvY3Vz
ZWRVSUVsZW1lbnRGb3JQYWdlKGNvbnN0IFBhZ2UqKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNj
ZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0KFJlbmRlck9iamVjdCopIHsgcmV0
dXJuIDA7IH0KK2lubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVjdENhY2hlOjpnZXQo
Tm9kZSopIHsgcmV0dXJuIDA7IH0KIGlubGluZSBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBWE9iamVj
dENhY2hlOjpnZXQoV2lkZ2V0KikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKEFjY2Vzc2liaWxpdHlSb2xlKSB7IHJl
dHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0
T3JDcmVhdGUoUmVuZGVyT2JqZWN0KikgeyByZXR1cm4gMDsgfQoraW5saW5lIEFjY2Vzc2liaWxp
dHlPYmplY3QqIEFYT2JqZWN0Q2FjaGU6OmdldE9yQ3JlYXRlKE5vZGUqKSB7IHJldHVybiAwOyB9
CiBpbmxpbmUgQWNjZXNzaWJpbGl0eU9iamVjdCogQVhPYmplY3RDYWNoZTo6Z2V0T3JDcmVhdGUo
V2lkZ2V0KikgeyByZXR1cm4gMDsgfQogaW5saW5lIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFYT2Jq
ZWN0Q2FjaGU6OnJvb3RPYmplY3QoKSB7IHJldHVybiAwOyB9CiBpbmxpbmUgQWNjZXNzaWJpbGl0
eU9iamVjdCogQVhPYmplY3RDYWNoZTo6cm9vdE9iamVjdEZvckZyYW1lKEZyYW1lKikgeyByZXR1
cm4gMDsgfQpAQCAtMjMzLDYgKzIzOSw3IEBAIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBv
c3ROb3RpZmljYXQKIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlm
aWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQVhOb3RpZmljYXRpb24pIHsgfQogaW5saW5l
IHZvaWQgQVhPYmplY3RDYWNoZTo6cmVtb3ZlKEFYSUQpIHsgfQogaW5saW5lIHZvaWQgQVhPYmpl
Y3RDYWNoZTo6cmVtb3ZlKFJlbmRlck9iamVjdCopIHsgfQoraW5saW5lIHZvaWQgQVhPYmplY3RD
YWNoZTo6cmVtb3ZlKE5vZGUqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnJlbW92
ZShXaWRnZXQqKSB7IH0KIGlubGluZSB2b2lkIEFYT2JqZWN0Q2FjaGU6OnNlbGVjdGVkQ2hpbGRy
ZW5DaGFuZ2VkKFJlbmRlck9iamVjdCopIHsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCShy
ZXZpc2lvbiAxMjMzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDE1IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIEFjY2Vzc2liaWxpdHlBUklBR3JpZDo6QWNjZXNzaWJpbGl0eUFSSUFH
cmlkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAgICAgOiBBY2Nlc3NpYmlsaXR5VGFibGUocmVu
ZGVyZXIpCiB7Cit9CisKK0FjY2Vzc2liaWxpdHlBUklBR3JpZDo6fkFjY2Vzc2liaWxpdHlBUklB
R3JpZCgpCit7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjppbml0KCkKK3sKKyAg
ICBBY2Nlc3NpYmlsaXR5VGFibGU6OmluaXQoKTsKICNpZiBBQ0NFU1NJQklMSVRZX1RBQkxFUwog
ICAgIG1faXNBY2Nlc3NpYmlsaXR5VGFibGUgPSB0cnVlOwogI2Vsc2UKQEAgLTUwLDEzICs1OSwx
MSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OkFjY2Vzc2liaWxpdHlBUklBCiAjZW5kaWYKIH0K
IAotQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjp+QWNjZXNzaWJpbGl0eUFSSUFHcmlkKCkKLXsKLX0K
LQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ+IEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZDo6Y3JlYXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5
QVJJQUdyaWQqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQocmVuZGVyZXIpOworICAg
IG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBib29sIEFjY2Vz
c2liaWxpdHlBUklBR3JpZDo6YWRkQ2hpbGQoQWNjZXNzaWJpbGl0eU9iamVjdCogY2hpbGQsIEhh
c2hTZXQ8QWNjZXNzaWJpbGl0eU9iamVjdCo+JiBhcHBlbmRlZFJvd3MsIHVuc2lnbmVkJiBjb2x1
bW5Db3VudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUFSSUFHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkocmV2aXNpb24gMTIzMzA4KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsOCBAQCBwcml2YXRlOgogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEFjY2Vzc2liaWxpdHlBUklBR3JpZD4gY3JlYXRlKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1
YWwgfkFjY2Vzc2liaWxpdHlBUklBR3JpZCgpOworCisgICAgdmlydHVhbCB2b2lkIGluaXQoKTsK
ICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaXNBcmlhVGFibGUoKSBjb25zdCB7IHJldHVybiB0cnVl
OyB9ICAgIAogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCShyZXZpc2lvbiAxMjMzMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw5IEBAIEFjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGw6On5BY2Nlc3NpYmlsaXQKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsPiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlBUklBR3Jp
ZENlbGwocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsKiBvYmogPSBu
ZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFj
Y2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OnBhcmVudFRhYmxlKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZFJvdy5jcHAJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsOSBAQCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6On5BY2Nlc3NpYmlsaXR5CiAKIFBh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93PiBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRS
b3c6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJp
bGl0eUFSSUFHcmlkUm93KiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0eUFSSUFHcmlkUm93KHJlbmRl
cmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAog
Ym9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRSb3c6OmlzQVJJQVRyZWVHcmlkUm93KCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFsbEluT25l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eU1lZGlhQ29udHJvbHMuY3BwIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Nyb2xs
Vmlldy5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlMaXN0LmNwcAkocmV2aXNpb24gMTIzMzA4KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDcgKzUwLDkgQEAgQWNjZXNzaWJpbGl0eUxpc3Q6On5BY2Nlc3NpYmlsaXR5TGlzdCgpCiAKIFBh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eUxpc3Q+IEFjY2Vzc2liaWxpdHlMaXN0OjpjcmVhdGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2li
aWxpdHlMaXN0KHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eUxpc3QqIG9iaiA9IG5ldyBB
Y2Nlc3NpYmlsaXR5TGlzdChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3Q6OmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAJKHJldmlzaW9uIDEyMzMwOCkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw5IEBAIEFjY2Vzc2liaWxpdHlMaXN0Qm94Ojp+QWNj
ZXNzaWJpbGl0eUxpc3QKICAgICAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eUxpc3RCb3g+IEFj
Y2Vzc2liaWxpdHlMaXN0Qm94OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlMaXN0Qm94KHJlbmRlcmVyKSk7Cisg
ICAgQWNjZXNzaWJpbGl0eUxpc3RCb3gqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TGlzdEJveChy
ZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9
CiAgICAgCiBib29sIEFjY2Vzc2liaWxpdHlMaXN0Qm94OjpjYW5TZXRTZWxlY3RlZENoaWxkcmVu
QXR0cmlidXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwCShyZXZpc2lvbiAx
MjMzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZWRp
YUNvbnRyb2xzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsOCArNjcsMTEgQEAgUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBBY2Nlc3NpYgogICAgIGNhc2UgTWVkaWFDb250cm9sc1Bh
bmVsOgogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6
OmNyZWF0ZShyZW5kZXJlcik7CiAKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wocmVuZGVyZXIpKTsKKyAgICBkZWZhdWx0
OiB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2wqIG9iaiA9IG5ldyBBY2Nlc3Np
YmlsaXR5TWVkaWFDb250cm9sKHJlbmRlcmVyKTsKKyAgICAgICAgb2JqLT5pbml0KCk7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihvYmopOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yMDcs
NyArMjEwLDkgQEAgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXI6OkFjYwogCiBQ
YXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xz
Q29udGFpbmVyOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzQ29udGFpbmVyKHJlbmRlcmVy
KSk7CisgICAgQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHNDb250YWluZXIqIG9iaiA9IG5ldyBB
Y2Nlc3NpYmlsaXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcihyZW5kZXJlcik7CisgICAgb2JqLT5p
bml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIFN0cmluZyBBY2Nlc3NpYmls
aXR5TWVkaWFDb250cm9sc0NvbnRhaW5lcjo6YWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKCkgY29u
c3QKQEAgLTI1MSw3ICsyNTYsOSBAQCBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZTo6QWNjZXNz
aWJpbGl0CiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gQWNjZXNzaWJpbGl0eU1l
ZGlhVGltZWxpbmU6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZWxpbmUocmVuZGVyZXIpKTsKKyAg
ICBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lbGluZSogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlNZWRp
YVRpbWVsaW5lKHJlbmRlcmVyKTsKKyAgICBvYmotPmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYob2JqKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVsaW5lOjp2YWx1ZURl
c2NyaXB0aW9uKCkgY29uc3QKQEAgLTI4MSw3ICsyODgsOSBAQCBBY2Nlc3NpYmlsaXR5TWVkaWFU
aW1lRGlzcGxheTo6QWNjZXNzaWJpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
QWNjZXNzaWJpbGl0eU1lZGlhVGltZURpc3BsYXk6OmNyZWF0ZShSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQWNjZXNzaWJpbGl0eU1lZGlhVGltZURp
c3BsYXkocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5TWVkaWFUaW1lRGlzcGxheSogb2Jq
ID0gbmV3IEFjY2Vzc2liaWxpdHlNZWRpYVRpbWVEaXNwbGF5KHJlbmRlcmVyKTsKKyAgICBvYmot
PmluaXQoKTsKKyAgICByZXR1cm4gYWRvcHRSZWYob2JqKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmls
aXR5TWVkaWFUaW1lRGlzcGxheTo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwCShyZXZpc2lvbiAxMjMzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYg
KzM3LDEzIEBAIEFjY2Vzc2liaWxpdHlNZW51TGlzdDo6QWNjZXNzaWJpbGl0eU1lbnUKIHsKIH0K
IAorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IEFjY2Vzc2liaWxpdHlNZW51TGlz
dDo6Y3JlYXRlKFJlbmRlck1lbnVMaXN0KiByZW5kZXJlcikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5
TWVudUxpc3QqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5TWVudUxpc3QocmVuZGVyZXIpOworICAg
IG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOworfQorCiBib29sIEFjY2Vz
c2liaWxpdHlNZW51TGlzdDo6cHJlc3MoKSBjb25zdAogewogICAgIFJlbmRlck1lbnVMaXN0KiBt
ZW51TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4obV9yZW5kZXJlcik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1l
bnVMaXN0LmgJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcg
QEAgY2xhc3MgUmVuZGVyTWVudUxpc3Q7CiAKIGNsYXNzIEFjY2Vzc2liaWxpdHlNZW51TGlzdCA6
IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5TWVudUxpc3Q+IGNyZWF0ZShSZW5kZXJNZW51TGlzdCog
cmVuZGVyZXIpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5TWVudUxpc3QocmVu
ZGVyZXIpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlNZW51TGlzdD4g
Y3JlYXRlKFJlbmRlck1lbnVMaXN0KiByZW5kZXJlcik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXND
b2xsYXBzZWQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgcHJlc3MoKSBjb25zdDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
Mzg3IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTIsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuaCIKKworI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5SW1hZ2VNYXBMaW5rLmgiCisj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
U3BpbkJ1dHRvbi5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MQXJlYUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MRmllbGRTZXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50
LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKKyNpbmNsdWRlICJIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxMYWJlbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGVnZW5kRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxNYXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAi
SFRNTE9wdEdyb3VwRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTFBsdWdJbklt
YWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTFRleHRBcmVhRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVz
dWx0LmgiCisjaW5jbHVkZSAiTG9jYWxpemVkU3RyaW5ncy5oIgorI2luY2x1ZGUgIk1hdGhNTE5h
bWVzLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRD
b250cm9sSW5uZXJFbGVtZW50cy5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1
ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCisjaW5jbHVkZSAidmlzaWJs
ZV91bml0cy5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFt
ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QoTm9kZSogbm9kZSkKKyAgICA6IEFjY2Vzc2liaWxpdHlPYmpl
Y3QoKQorICAgICwgbV9hcmlhUm9sZShVbmtub3duUm9sZSkKKyAgICAsIG1fY2hpbGRyZW5EaXJ0
eShmYWxzZSkKKyAgICAsIG1fcm9sZUZvck1TQUEoVW5rbm93blJvbGUpCisgICAgLCBtX25vZGUo
bm9kZSkKK3sKK30KKworQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6On5BY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdCgpCit7CisgICAgQVNTRVJUKGlzRGV0YWNoZWQoKSk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmluaXQoKQoreworICAgIG1fcm9sZSA9IGRldGVybWluZUFjY2Vz
c2liaWxpdHlSb2xlKCk7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+
IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjcmVhdGUoTm9kZSogbm9kZSkKK3sKKyAgICBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0KG5v
ZGUpOworICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOworfQorCit2
b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpkZXRhY2goKQoreworICAgIGNsZWFyQ2hpbGRy
ZW4oKTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpkZXRhY2goKTsKKyAgICBtX25vZGUgPSAw
OworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjaGlsZHJlbkNoYW5nZWQoKQor
eworICAgIC8vIFRoaXMgbWV0aG9kIGlzIG1lYW50IGFzIGEgcXVpY2sgd2F5IG9mIG1hcmtpbmcg
YSBwb3J0aW9uIG9mIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUgZGlydHkuCisgICAgaWYgKCFub2Rl
KCkgJiYgIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBkb2N1bWVudCgpLCBBWE9iamVjdENhY2hlOjpBWENo
aWxkcmVuQ2hhbmdlZCwgdHJ1ZSk7CisKKyAgICAvLyBHbyB1cCB0aGUgYWNjZXNzaWJpbGl0eSBw
YXJlbnQgY2hhaW4sIGJ1dCBvbmx5IGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3RzLiBUaGlz
IG1ldGhvZCBpcworICAgIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVyIGxheW91dHMsIG1pbmltYWwg
d29yayBzaG91bGQgYmUgZG9uZS4gCisgICAgLy8gSWYgQVggZWxlbWVudHMgYXJlIGNyZWF0ZWQg
bm93LCB0aGV5IGNvdWxkIGludGVycm9nYXRlIHRoZSByZW5kZXIgdHJlZSB3aGlsZSBpdCdzIGlu
IGEgZnVua3kgc3RhdGUuCisgICAgLy8gQXQgdGhlIHNhbWUgdGltZSwgcHJvY2VzcyBBUklBIGxp
dmUgcmVnaW9uIGNoYW5nZXMuCisgICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQg
PSB0aGlzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0SWZFeGlzdHMoKSkg
eworICAgICAgICBwYXJlbnQtPnNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpOworCisgICAgICAg
IC8vIFRoZXNlIG5vdGlmaWNhdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgc2VudCBiZWNhdXNlIHNj
cmVlbnJlYWRlcnMgYXJlIHJlbGlhbnQgb24gdGhlbSB0byBwZXJmb3JtLiAKKyAgICAgICAgLy8g
SW4gb3RoZXIgd29yZHMsIHRoZXkgbmVlZCB0byBiZSBzZW50IGV2ZW4gd2hlbiB0aGUgc2NyZWVu
IHJlYWRlciBoYXMgbm90IGFjY2Vzc2VkIHRoaXMgbGl2ZSByZWdpb24gc2luY2UgdGhlIGxhc3Qg
dXBkYXRlLgorCisgICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBzdXBwb3J0cyBBUklBIGxpdmUg
cmVnaW9ucywgdGhlbiBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCisgICAgICAgIGlmIChwYXJl
bnQtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKKyAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RD
YWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZCwgdHJ1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBJ
ZiB0aGlzIGVsZW1lbnQgaXMgYW4gQVJJQSB0ZXh0IGNvbnRyb2wsIG5vdGlmeSB0aGUgQVQgb2Yg
Y2hhbmdlcy4KKyAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4dENvbnRyb2woKSAmJiAhcGFy
ZW50LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+bm9kZSgpLT5yZW5kZXJlcklz
RWRpdGFibGUoKSkKKyAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlv
bihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5n
ZWQsIHRydWUpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dXBk
YXRlQWNjZXNzaWJpbGl0eVJvbGUoKQoreworICAgIGJvb2wgaWdub3JlZFN0YXR1cyA9IGFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKTsKKyAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5
Um9sZSgpOworICAgIAorICAgIC8vIFRoZSBBWCBoaWVyYXJjaHkgb25seSBuZWVkcyB0byBiZSB1
cGRhdGVkIGlmIHRoZSBpZ25vcmVkIHN0YXR1cyBvZiBhbiBlbGVtZW50IGhhcyBjaGFuZ2VkLgor
ICAgIGlmIChpZ25vcmVkU3RhdHVzICE9IGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAg
ICAgY2hpbGRyZW5DaGFuZ2VkKCk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6Zmlyc3RDaGlsZCgpIGNvbnN0Cit7CisgICAgaWYgKCFub2Rl
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBub2Rl
KCktPmZpcnN0Q2hpbGQoKTsKKworICAgIGlmICghZmlyc3RDaGlsZCkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZmlyc3RD
aGlsZCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjpsYXN0Q2hpbGQoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICBOb2RlKiBsYXN0Q2hpbGQgPSBub2RlKCktPmxhc3RDaGlsZCgpOworICAg
IGlmICghbGFzdENoaWxkKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gYXhP
YmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYXN0Q2hpbGQpOworfQorCitBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6cHJldmlvdXNTaWJsaW5nKCkgY29uc3QK
K3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBOb2RlKiBwcmV2
aW91c1NpYmxpbmcgPSBub2RlKCktPnByZXZpb3VzU2libGluZygpOworICAgIGlmICghcHJldmlv
dXNTaWJsaW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBheE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKHByZXZpb3VzU2libGluZyk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpuZXh0U2libGluZygpIGNvbnN0Cit7CisgICAg
aWYgKCFub2RlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTm9kZSogbmV4dFNpYmxpbmcg
PSBub2RlKCktPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFuZXh0U2libGluZykKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShuZXh0
U2libGluZyk7Cit9CisgICAgCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6cGFyZW50T2JqZWN0SWZFeGlzdHMoKSBjb25zdAoreworICAgIHJldHVybiBwYXJl
bnRPYmplY3QoKTsKK30KKyAgICAKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0OjpwYXJlbnRPYmplY3QoKSBjb25zdAoreworICAgIGlmICghbm9kZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIE5vZGUqIHBhcmVudE9iaiA9IG5vZGUoKS0+cGFyZW50Tm9k
ZSgpOworICAgIGlmIChwYXJlbnRPYmopCisgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCkt
PmdldE9yQ3JlYXRlKHBhcmVudE9iaik7CisgICAgCisgICAgcmV0dXJuIDA7Cit9CisKK0xheW91
dFJlY3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmVsZW1lbnRSZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYm91bmRpbmdCb3hSZWN0KCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3Q6OnNldE5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBtX25vZGUgPSBub2RlOworfQorCitE
b2N1bWVudCogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRvY3VtZW50KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIG5vZGUoKS0+ZG9j
dW1lbnQoKTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkKK3sKKyAgICBpZiAoIW5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIFVua25vd25Sb2xlOworCisgICAgbV9hcmlhUm9sZSA9IGRldGVybWluZUFyaWFS
b2xlQXR0cmlidXRlKCk7CisgICAgCisgICAgQWNjZXNzaWJpbGl0eVJvbGUgYXJpYVJvbGUgPSBh
cmlhUm9sZUF0dHJpYnV0ZSgpOworICAgIGlmIChhcmlhUm9sZSAhPSBVbmtub3duUm9sZSkKKyAg
ICAgICAgcmV0dXJuIGFyaWFSb2xlOworCisgICAgaWYgKG5vZGUoKS0+aXNMaW5rKCkpCisgICAg
ICAgIHJldHVybiBXZWJDb3JlTGlua1JvbGU7CisgICAgaWYgKG5vZGUoKS0+aXNUZXh0Tm9kZSgp
KQorICAgICAgICByZXR1cm4gU3RhdGljVGV4dFJvbGU7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFn
TmFtZShidXR0b25UYWcpKQorICAgICAgICByZXR1cm4gYXJpYUhhc1BvcHVwKCkgPyBQb3BVcEJ1
dHRvblJvbGUgOiBCdXR0b25Sb2xlOworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoaW5wdXRU
YWcpKSB7CisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KG5vZGUoKSk7CisgICAgICAgIGlmIChpbnB1dC0+aXNDaGVja2JveCgp
KQorICAgICAgICAgICAgcmV0dXJuIENoZWNrQm94Um9sZTsKKyAgICAgICAgaWYgKGlucHV0LT5p
c1JhZGlvQnV0dG9uKCkpCisgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25Sb2xlOworICAg
ICAgICBpZiAoaW5wdXQtPmlzVGV4dEJ1dHRvbigpKQorICAgICAgICAgICAgcmV0dXJuIGFyaWFI
YXNQb3B1cCgpID8gUG9wVXBCdXR0b25Sb2xlIDogQnV0dG9uUm9sZTsKKyAgICAgICAgcmV0dXJu
IFRleHRGaWVsZFJvbGU7CisgICAgfQorICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoc2VsZWN0
VGFnKSkgeworICAgICAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0RWxlbWVudCA9IHRvSFRN
TFNlbGVjdEVsZW1lbnQobm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW1lbnQtPm11
bHRpcGxlKCkgPyBMaXN0Um9sZSA6IFBvcFVwQnV0dG9uUm9sZTsKKyAgICB9CisgICAgaWYgKG5v
ZGUoKS0+aXNGb2N1c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIEdyb3VwUm9sZTsKKyAgICAKKyAg
ICByZXR1cm4gVW5rbm93blJvbGU7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmFkZENoaWxkcmVuKCkKK3sKKyAgICAvLyBJZiB0aGUgbmVlZCB0byBhZGQgbW9yZSBjaGlsZHJl
biBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlzZXMsIAorICAgIC8vIGNoaWxk
cmVuQ2hhbmdlZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgbGVhdmluZyB0aGUgb2JqZWN0IHdp
dGggbm8gY2hpbGRyZW4uCisgICAgQVNTRVJUKCFtX2hhdmVDaGlsZHJlbik7IAorICAgIAorICAg
IGlmICghbV9ub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hhdmVDaGlsZHJlbiA9IHRy
dWU7CisKKyAgICAvLyBUaGUgb25seSB0aW1lIHdlIGFkZCBjaGlsZHJlbiBmcm9tIHRoZSBET00g
dHJlZSB0byBhIG5vZGUgd2l0aCBhIHJlbmRlcmVyIGlzIHdoZW4gaXQncyBhIGNhbnZhcy4KKyAg
ICBpZiAocmVuZGVyZXIoKSAmJiAhbV9ub2RlLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbV9ub2RlLT5maXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisgICAgICAgIFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBvYmogPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGNoaWxkKTsKKyAgICAgICAgb2JqLT5jbGVhckNoaWxkcmVuKCk7CisgICAgICAgIGlmIChv
YmotPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkgeworICAgICAgICAgICAgQWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIGNoaWxkcmVuID0gb2JqLT5jaGlsZHJlbigpOworICAgICAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IGNoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmQoY2hpbGRyZW5baV0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG9i
ai0+cGFyZW50T2JqZWN0KCkgPT0gdGhpcyk7CisgICAgICAgICAgICBtX2NoaWxkcmVuLmFwcGVu
ZChvYmopOworICAgICAgICB9CisgICAgfQorfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjphY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yb2xl
ID09IFVua25vd25Sb2xlOworfQorCitib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5T
ZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0Cit7CisgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUo
KTsKKworICAgIGlmIChpc1dlYkFyZWEoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgLy8gTk9URTogSXQgd291bGQgYmUgbW9yZSBhY2N1cmF0ZSB0byBhc2sgdGhlIGRvY3VtZW50
IHdoZXRoZXIgc2V0Rm9jdXNlZE5vZGUoKSB3b3VsZAorICAgIC8vIGRvIGFueXRoaW5nLiBGb3Ig
ZXhhbXBsZSwgc2V0Rm9jdXNlZE5vZGUoKSB3aWxsIGRvIG5vdGhpbmcgaWYgdGhlIGN1cnJlbnQg
Zm9jdXNlZAorICAgIC8vIG5vZGUgd2lsbCBub3QgcmVsaW5xdWlzaCB0aGUgZm9jdXMuCisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobm9kZS0+aXNFbGVt
ZW50Tm9kZSgpICYmICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmlzRW5hYmxlZEZvcm1D
b250cm9sKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBub2RlLT5zdXBw
b3J0c0ZvY3VzKCk7Cit9CisKK0FjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpkZXRlcm1pbmVBcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Cit7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhcmlhUm9sZSA9IGdldEF0dHJpYnV0ZShyb2xlQXR0cik7CisgICAgaWYgKGFy
aWFSb2xlLmlzTnVsbCgpIHx8IGFyaWFSb2xlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIFVu
a25vd25Sb2xlOworICAgIAorICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBhcmlhUm9sZVRv
V2ViQ29yZVJvbGUoYXJpYVJvbGUpOworCisgICAgLy8gQVJJQSBzdGF0ZXMgaWYgYW4gaXRlbSBj
YW4gZ2V0IGZvY3VzLCBpdCBzaG91bGQgbm90IGJlIHByZXNlbnRhdGlvbmFsLgorICAgIGlmIChy
b2xlID09IFByZXNlbnRhdGlvbmFsUm9sZSAmJiBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpKQorICAg
ICAgICByZXR1cm4gVW5rbm93blJvbGU7CisgICAgCisgICAgaWYgKHJvbGUgPT0gQnV0dG9uUm9s
ZSAmJiBhcmlhSGFzUG9wdXAoKSkKKyAgICAgICAgcm9sZSA9IFBvcFVwQnV0dG9uUm9sZTsKKwor
ICAgIGlmIChyb2xlID09IFRleHRBcmVhUm9sZSAmJiAhYXJpYUlzTXVsdGlsaW5lKCkpCisgICAg
ICAgIHJvbGUgPSBUZXh0RmllbGRSb2xlOworCisgICAgcm9sZSA9IHJlbWFwQXJpYVJvbGVEdWVU
b1BhcmVudChyb2xlKTsKKyAgICAKKyAgICBpZiAocm9sZSkKKyAgICAgICAgcmV0dXJuIHJvbGU7
CisKKyAgICByZXR1cm4gVW5rbm93blJvbGU7Cit9CisKK0FjY2Vzc2liaWxpdHlSb2xlIEFjY2Vz
c2liaWxpdHlOb2RlT2JqZWN0OjphcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fYXJpYVJvbGU7Cit9CisKK0FjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjpyZW1hcEFyaWFSb2xlRHVlVG9QYXJlbnQoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkg
Y29uc3QKK3sKKyAgICAvLyBTb21lIG9iamVjdHMgY2hhbmdlIHRoZWlyIHJvbGUgYmFzZWQgb24g
dGhlaXIgcGFyZW50LgorICAgIC8vIEhvd2V2ZXIsIGFza2luZyBmb3IgdGhlIHVuaWdub3JlZFBh
cmVudCBjYWxscyBhY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCksIHdoaWNoIGNhbiB0cmlnZ2VyIGEg
bG9vcC4gCisgICAgLy8gV2hpbGUgaW5zaWRlIHRoZSBjYWxsIHN0YWNrIG9mIGNyZWF0aW5nIGFu
IGVsZW1lbnQsIHdlIG5lZWQgdG8gYXZvaWQgYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTE3NAorCisgICAg
aWYgKHJvbGUgIT0gTGlzdEJveE9wdGlvblJvbGUgJiYgcm9sZSAhPSBNZW51SXRlbVJvbGUpCisg
ICAgICAgIHJldHVybiByb2xlOworICAgIAorICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50ID0gcGFyZW50T2JqZWN0KCk7IHBhcmVudCAmJiAhcGFyZW50LT5hY2Nlc3NpYmlsaXR5
SXNJZ25vcmVkKCk7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0KCkpIHsKKyAgICAgICAg
QWNjZXNzaWJpbGl0eVJvbGUgcGFyZW50QXJpYVJvbGUgPSBwYXJlbnQtPmFyaWFSb2xlQXR0cmli
dXRlKCk7CisKKyAgICAgICAgLy8gU2VsZWN0cyBhbmQgbGlzdGJveGVzIGJvdGggaGF2ZSBvcHRp
b25zIGFzIGNoaWxkIHJvbGVzLCBidXQgdGhleSBtYXAgdG8gZGlmZmVyZW50IHJvbGVzIHdpdGhp
biBXZWJDb3JlLgorICAgICAgICBpZiAocm9sZSA9PSBMaXN0Qm94T3B0aW9uUm9sZSAmJiBwYXJl
bnRBcmlhUm9sZSA9PSBNZW51Um9sZSkKKyAgICAgICAgICAgIHJldHVybiBNZW51SXRlbVJvbGU7
CisgICAgICAgIC8vIEFuIGFyaWEgIm1lbnVpdGVtIiBtYXkgbWFwIHRvIE1lbnVCdXR0b24gb3Ig
TWVudUl0ZW0gZGVwZW5kaW5nIG9uIGl0cyBwYXJlbnQuCisgICAgICAgIGlmIChyb2xlID09IE1l
bnVJdGVtUm9sZSAmJiBwYXJlbnRBcmlhUm9sZSA9PSBHcm91cFJvbGUpCisgICAgICAgICAgICBy
ZXR1cm4gTWVudUJ1dHRvblJvbGU7CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgcGFyZW50
IGhhZCBhIGRpZmZlcmVudCByb2xlLCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY29udGludWUgc2Vh
cmNoaW5nIHVwIHRoZSBjaGFpbi4KKyAgICAgICAgaWYgKHBhcmVudEFyaWFSb2xlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiByb2xlOworfSAgIAorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0X2gKKyNkZWZpbmUgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RfaAorCisjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkxheW91dFR5cGVzLmgiCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3Mg
QVhPYmplY3RDYWNoZTsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIEZyYW1l
VmlldzsKK2NsYXNzIEhpdFRlc3RSZXN1bHQ7CitjbGFzcyBIVE1MQW5jaG9yRWxlbWVudDsKK2Ns
YXNzIEhUTUxBcmVhRWxlbWVudDsKK2NsYXNzIEhUTUxFbGVtZW50OworY2xhc3MgSFRNTExhYmVs
RWxlbWVudDsKK2NsYXNzIEhUTUxNYXBFbGVtZW50OworY2xhc3MgSFRNTFNlbGVjdEVsZW1lbnQ7
CitjbGFzcyBJbnRQb2ludDsKK2NsYXNzIEludFNpemU7CitjbGFzcyBOb2RlOworY2xhc3MgUmVu
ZGVyTGlzdEJveDsKK2NsYXNzIFJlbmRlclRleHRDb250cm9sOworY2xhc3MgUmVuZGVyVmlldzsK
K2NsYXNzIFZpc2libGVTZWxlY3Rpb247CitjbGFzcyBXaWRnZXQ7CisgICAgCitjbGFzcyBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKK3Byb3Rl
Y3RlZDoKKyAgICBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdChOb2RlKik7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+IGNyZWF0ZShOb2RlKik7
CisgICAgdmlydHVhbCB+QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBpbml0KCk7CisgICAgCisgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuU2V0
Rm9jdXNBdHRyaWJ1dGUoKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGZpcnN0Q2hpbGQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCog
cHJldmlvdXNTaWJsaW5nKCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBuZXh0U2libGluZygpIGNvbnN0OworICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eU9iamVjdCog
cGFyZW50T2JqZWN0KCkgY29uc3Q7CisgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnRPYmplY3RJZkV4aXN0cygpIGNvbnN0OworCisgICAgdm9pZCBzZXROb2RlKE5vZGUqKTsK
KyAgICB2aXJ0dWFsIE5vZGUqIG5vZGUoKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICB2
aXJ0dWFsIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOworICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKKyAgICB2b2lkIHVw
ZGF0ZUFjY2Vzc2liaWxpdHlSb2xlKCk7CisKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgZWxlbWVu
dFJlY3QoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fYXJp
YVJvbGU7CisgICAgYm9vbCBtX2NoaWxkcmVuRGlydHk7CisgICAgbXV0YWJsZSBBY2Nlc3NpYmls
aXR5Um9sZSBtX3JvbGVGb3JNU0FBOworCisgICAgdmlydHVhbCBib29sIGlzRGV0YWNoZWQoKSBj
b25zdCB7IHJldHVybiAhbV9ub2RlOyB9CisKKyAgICB2aXJ0dWFsIEFjY2Vzc2liaWxpdHlSb2xl
IGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCk7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxk
cmVuKCk7CisgICAgdmlydHVhbCBib29sIGFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdDsK
KyAgICBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OworICAgIEFj
Y2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3Q7CisgICAg
QWNjZXNzaWJpbGl0eVJvbGUgcmVtYXBBcmlhUm9sZUR1ZVRvUGFyZW50KEFjY2Vzc2liaWxpdHlS
b2xlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBOb2RlKiBtX25vZGU7Cit9OworCitpbmxpbmUg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3QqIHRvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3QqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgQWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QqIHRvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QoY29uc3QgQWNjZXNz
aWJpbGl0eU9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+
aXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QqPihvYmplY3QpOworfQorCisvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3QoY29uc3QgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QqKTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RfaAoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5Tm9kZU9iamVjdC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBM
RgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5oCShyZXZpc2lvbiAxMjMzMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzE3LDYgKzMx
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5
T2JqZWN0PiA+IEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvcjsKICAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vz
c2liaWxpdHlTY3JvbGxWaWV3KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlQcm9ncmVzc0luZGljYXRvci5jcHAJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQCBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0
b3I6OkFjY2Vzc2liCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9y
PiBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3I6OmNyZWF0ZShSZW5kZXJQcm9ncmVzcyog
cmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmlsaXR5UHJvZ3Jl
c3NJbmRpY2F0b3IocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0
b3IqIG9iaiA9IG5ldyBBY2Nlc3NpYmlsaXR5UHJvZ3Jlc3NJbmRpY2F0b3IocmVuZGVyZXIpOwor
ICAgIG9iai0+aW5pdCgpOworICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBib29sIEFj
Y2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvcjo6YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDEyMzMwOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkzLDE0ICs5Myw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKLSAgICA6IEFjY2Vz
c2liaWxpdHlPYmplY3QoKQorICAgIDogQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QocmVuZGVyZXIt
Pm5vZGUoKSkKICAgICAsIG1fcmVuZGVyZXIocmVuZGVyZXIpCi0gICAgLCBtX2FyaWFSb2xlKFVu
a25vd25Sb2xlKQotICAgICwgbV9jaGlsZHJlbkRpcnR5KGZhbHNlKQotICAgICwgbV9yb2xlRm9y
TVNBQShVbmtub3duUm9sZSkKIHsKLSAgICBtX3JvbGUgPSBkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5
Um9sZSgpOwotCiAjaWZuZGVmIE5ERUJVRwogICAgIG1fcmVuZGVyZXItPnNldEhhc0FYT2JqZWN0
KHRydWUpOwogI2VuZGlmCkBAIC0xMTEsMjEgKzEwNiwyNyBAQCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojp+QWNjZXNzaWJpbGl0CiAgICAgQVNTRVJUKGlzRGV0YWNoZWQoKSk7CiB9CiAKK3Zv
aWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5pdCgpCit7CisgICAgQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OmluaXQoKTsKK30KKwogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0PiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KiBvYmogPSBu
ZXcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6ZGV0YWNoKCkKIHsKLSAgICBjbGVhckNoaWxkcmVuKCk7Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdDo6ZGV0YWNoKCk7CisgICAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmRldGFj
aCgpOwogICAgIAogI2lmbmRlZiBOREVCVUcKICAgICBpZiAobV9yZW5kZXJlcikKICAgICAgICAg
bV9yZW5kZXJlci0+c2V0SGFzQVhPYmplY3QoZmFsc2UpOwogI2VuZGlmCi0gICAgbV9yZW5kZXJl
ciA9IDA7ICAgIAorICAgIG1fcmVuZGVyZXIgPSAwOwogfQogCiBSZW5kZXJCb3hNb2RlbE9iamVj
dCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25z
dApAQCAtMTM1LDYgKzEzNiwxMiBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdCogQWNjZXNzaWJpbGl0
eVJlbmRlCiAgICAgcmV0dXJuIHRvUmVuZGVyQm94TW9kZWxPYmplY3QobV9yZW5kZXJlcik7CiB9
CiAKK3ZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2V0UmVuZGVyZXIoUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKK3sKKyAgICBtX3JlbmRlcmVyID0gcmVuZGVyZXI7CisgICAgc2V0Tm9k
ZShyZW5kZXJlci0+bm9kZSgpKTsKK30KKwogc3RhdGljIGlubGluZSBib29sIGlzSW5saW5lV2l0
aENvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKICAgICBpZiAoIW9iamVjdC0+
aXNCb3hNb2RlbE9iamVjdCgpKQpAQCAtMzA4NCw3NSArMzA5MSw2IEBAIEFjY2Vzc2liaWxpdHlP
YmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICByZXR1cm4gMDsKIH0KIAotQWNjZXNzaWJp
bGl0eVJvbGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6cmVtYXBBcmlhUm9sZUR1ZVRvUGFy
ZW50KEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUpIGNvbnN0Ci17Ci0gICAgLy8gU29tZSBvYmplY3Rz
IGNoYW5nZSB0aGVpciByb2xlIGJhc2VkIG9uIHRoZWlyIHBhcmVudC4KLSAgICAvLyBIb3dldmVy
LCBhc2tpbmcgZm9yIHRoZSB1bmlnbm9yZWRQYXJlbnQgY2FsbHMgYWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpLCB3aGljaCBjYW4gdHJpZ2dlciBhIGxvb3AuIAotICAgIC8vIFdoaWxlIGluc2lkZSB0
aGUgY2FsbCBzdGFjayBvZiBjcmVhdGluZyBhbiBlbGVtZW50LCB3ZSBuZWVkIHRvIGF2b2lkIGFj
Y2Vzc2liaWxpdHlJc0lnbm9yZWQoKS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjUxNzQKLQotICAgIGlmIChyb2xlICE9IExpc3RCb3hPcHRpb25Sb2xl
ICYmIHJvbGUgIT0gTWVudUl0ZW1Sb2xlKQotICAgICAgICByZXR1cm4gcm9sZTsKLSAgICAKLSAg
ICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdCgpOyBwYXJl
bnQgJiYgIXBhcmVudC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOyBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE9iamVjdCgpKSB7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlSb2xlIHBhcmVudEFyaWFS
b2xlID0gcGFyZW50LT5hcmlhUm9sZUF0dHJpYnV0ZSgpOwotCi0gICAgICAgIC8vIFNlbGVjdHMg
YW5kIGxpc3Rib3hlcyBib3RoIGhhdmUgb3B0aW9ucyBhcyBjaGlsZCByb2xlcywgYnV0IHRoZXkg
bWFwIHRvIGRpZmZlcmVudCByb2xlcyB3aXRoaW4gV2ViQ29yZS4KLSAgICAgICAgaWYgKHJvbGUg
PT0gTGlzdEJveE9wdGlvblJvbGUgJiYgcGFyZW50QXJpYVJvbGUgPT0gTWVudVJvbGUpCi0gICAg
ICAgICAgICByZXR1cm4gTWVudUl0ZW1Sb2xlOwotICAgICAgICAvLyBBbiBhcmlhICJtZW51aXRl
bSIgbWF5IG1hcCB0byBNZW51QnV0dG9uIG9yIE1lbnVJdGVtIGRlcGVuZGluZyBvbiBpdHMgcGFy
ZW50LgotICAgICAgICBpZiAocm9sZSA9PSBNZW51SXRlbVJvbGUgJiYgcGFyZW50QXJpYVJvbGUg
PT0gR3JvdXBSb2xlKQotICAgICAgICAgICAgcmV0dXJuIE1lbnVCdXR0b25Sb2xlOwotICAgICAg
ICAKLSAgICAgICAgLy8gSWYgdGhlIHBhcmVudCBoYWQgYSBkaWZmZXJlbnQgcm9sZSwgdGhlbiB3
ZSBkb24ndCBuZWVkIHRvIGNvbnRpbnVlIHNlYXJjaGluZyB1cCB0aGUgY2hhaW4uCi0gICAgICAg
IGlmIChwYXJlbnRBcmlhUm9sZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gcm9sZTsKLX0KLSAgICAKLUFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkgY29uc3QKLXsKLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGFyaWFSb2xlID0gZ2V0QXR0cmlidXRlKHJvbGVBdHRyKTsKLSAg
ICBpZiAoYXJpYVJvbGUuaXNOdWxsKCkgfHwgYXJpYVJvbGUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gVW5rbm93blJvbGU7Ci0gICAgCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IGFy
aWFSb2xlVG9XZWJDb3JlUm9sZShhcmlhUm9sZSk7Ci0KLSAgICAvLyBBUklBIHN0YXRlcyBpZiBh
biBpdGVtIGNhbiBnZXQgZm9jdXMsIGl0IHNob3VsZCBub3QgYmUgcHJlc2VudGF0aW9uYWwuCi0g
ICAgaWYgKHJvbGUgPT0gUHJlc2VudGF0aW9uYWxSb2xlICYmIGNhblNldEZvY3VzQXR0cmlidXRl
KCkpCi0gICAgICAgIHJldHVybiBVbmtub3duUm9sZTsKLSAgICAKLSAgICBpZiAocm9sZSA9PSBC
dXR0b25Sb2xlICYmIGFyaWFIYXNQb3B1cCgpKQotICAgICAgICByb2xlID0gUG9wVXBCdXR0b25S
b2xlOwotCi0gICAgaWYgKHJvbGUgPT0gVGV4dEFyZWFSb2xlICYmICFhcmlhSXNNdWx0aWxpbmUo
KSkKLSAgICAgICAgcm9sZSA9IFRleHRGaWVsZFJvbGU7Ci0KLSAgICByb2xlID0gcmVtYXBBcmlh
Um9sZUR1ZVRvUGFyZW50KHJvbGUpOwotICAgIAotICAgIGlmIChyb2xlKQotICAgICAgICByZXR1
cm4gcm9sZTsKLQotICAgIHJldHVybiBVbmtub3duUm9sZTsKLX0KLQotQWNjZXNzaWJpbGl0eVJv
bGUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YXJpYVJvbGVBdHRyaWJ1dGUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2FyaWFSb2xlOwotfQotICAgIAotdm9pZCBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojp1cGRhdGVBY2Nlc3NpYmlsaXR5Um9sZSgpCi17Ci0gICAgYm9vbCBpZ25vcmVk
U3RhdHVzID0gYWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpOwotICAgIG1fcm9sZSA9IGRldGVybWlu
ZUFjY2Vzc2liaWxpdHlSb2xlKCk7Ci0gICAgCi0gICAgLy8gVGhlIEFYIGhpZXJhcmNoeSBvbmx5
IG5lZWRzIHRvIGJlIHVwZGF0ZWQgaWYgdGhlIGlnbm9yZWQgc3RhdHVzIG9mIGFuIGVsZW1lbnQg
aGFzIGNoYW5nZWQuCi0gICAgaWYgKGlnbm9yZWRTdGF0dXMgIT0gYWNjZXNzaWJpbGl0eUlzSWdu
b3JlZCgpKQotICAgICAgICBjaGlsZHJlbkNoYW5nZWQoKTsKLX0KLSAgICAKIGJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNEZXNjZW5kYW50T2ZFbGVtZW50VHlwZShjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lKSBjb25zdAogewogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBwYXJl
bnQgPSBtX3JlbmRlcmVyLT5wYXJlbnQoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVu
dCgpKSB7CkBAIC0zMzg5LDI1ICszMzI3LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphcmlhUm9sZQogICAgIH0KIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0Ci17Ci0gICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLQotICAgIGlmIChpc1dlYkFyZWEoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgCi0gICAgLy8gTk9URTogSXQgd291bGQgYmUgbW9yZSBhY2N1cmF0ZSB0byBhc2sgdGhlIGRv
Y3VtZW50IHdoZXRoZXIgc2V0Rm9jdXNlZE5vZGUoKSB3b3VsZAotICAgIC8vIGRvIGFueXRoaW5n
LiAgRm9yIGV4YW1wbGUsIHNldEZvY3VzZWROb2RlKCkgd2lsbCBkbyBub3RoaW5nIGlmIHRoZSBj
dXJyZW50IGZvY3VzZWQKLSAgICAvLyBub2RlIHdpbGwgbm90IHJlbGlucXVpc2ggdGhlIGZvY3Vz
LgotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5pc0VuYWJs
ZWRGb3JtQ29udHJvbCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbm9k
ZS0+c3VwcG9ydHNGb2N1cygpOwotfQotICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjpjYW5TZXRFeHBhbmRlZEF0dHJpYnV0ZSgpIGNvbnN0CiB7CiAgICAgLy8gQW4gb2JqZWN0
IGNhbiBiZSBleHBhbmRlZCBpZiBpdCBhcmlhLWV4cGFuZGVkIGlzIHRydWUgb3IgZmFsc2UuCkBA
IC0zNDU0LDM5ICszMzczLDE1IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29u
dGVudEMKICAgICB9CiB9CiAgICAgCi12b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNo
aWxkcmVuQ2hhbmdlZCgpCi17Ci0gICAgLy8gVGhpcyBtZXRob2QgaXMgbWVhbnQgYXMgYSBxdWlj
ayB3YXkgb2YgbWFya2luZyBhIHBvcnRpb24gb2YgdGhlIGFjY2Vzc2liaWxpdHkgdHJlZSBkaXJ0
eS4KLSAgICBpZiAoIW1fcmVuZGVyZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF4T2JqZWN0
Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbih0aGlzLCBkb2N1bWVudCgpLCBBWE9iamVjdENhY2hl
OjpBWENoaWxkcmVuQ2hhbmdlZCwgdHJ1ZSk7Ci0KLSAgICAvLyBHbyB1cCB0aGUgYWNjZXNzaWJp
bGl0eSBwYXJlbnQgY2hhaW4sIGJ1dCBvbmx5IGlmIHRoZSBlbGVtZW50IGFscmVhZHkgZXhpc3Rz
LiBUaGlzIG1ldGhvZCBpcwotICAgIC8vIGNhbGxlZCBkdXJpbmcgcmVuZGVyIGxheW91dHMsIG1p
bmltYWwgd29yayBzaG91bGQgYmUgZG9uZS4gCi0gICAgLy8gSWYgQVggZWxlbWVudHMgYXJlIGNy
ZWF0ZWQgbm93LCB0aGV5IGNvdWxkIGludGVycm9nYXRlIHRoZSByZW5kZXIgdHJlZSB3aGlsZSBp
dCdzIGluIGEgZnVua3kgc3RhdGUuCi0gICAgLy8gQXQgdGhlIHNhbWUgdGltZSwgcHJvY2VzcyBB
UklBIGxpdmUgcmVnaW9uIGNoYW5nZXMuCi0gICAgZm9yIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBw
YXJlbnQgPSB0aGlzOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50T2JqZWN0SWZFeGlz
dHMoKSkgewotICAgICAgICBwYXJlbnQtPnNldE5lZWRzVG9VcGRhdGVDaGlsZHJlbigpOwotCi0g
ICAgICAgIC8vIFRoZXNlIG5vdGlmaWNhdGlvbnMgYWx3YXlzIG5lZWQgdG8gYmUgc2VudCBiZWNh
dXNlIHNjcmVlbnJlYWRlcnMgYXJlIHJlbGlhbnQgb24gdGhlbSB0byBwZXJmb3JtLiAKLSAgICAg
ICAgLy8gSW4gb3RoZXIgd29yZHMsIHRoZXkgbmVlZCB0byBiZSBzZW50IGV2ZW4gd2hlbiB0aGUg
c2NyZWVuIHJlYWRlciBoYXMgbm90IGFjY2Vzc2VkIHRoaXMgbGl2ZSByZWdpb24gc2luY2UgdGhl
IGxhc3QgdXBkYXRlLgotCi0gICAgICAgIC8vIElmIHRoaXMgZWxlbWVudCBzdXBwb3J0cyBBUklB
IGxpdmUgcmVnaW9ucywgdGhlbiBub3RpZnkgdGhlIEFUIG9mIGNoYW5nZXMuCi0gICAgICAgIGlm
IChwYXJlbnQtPnN1cHBvcnRzQVJJQUxpdmVSZWdpb24oKSkKLSAgICAgICAgICAgIGF4T2JqZWN0
Q2FjaGUoKS0+cG9zdE5vdGlmaWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhP
YmplY3RDYWNoZTo6QVhMaXZlUmVnaW9uQ2hhbmdlZCwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAg
ICAvLyBJZiB0aGlzIGVsZW1lbnQgaXMgYW4gQVJJQSB0ZXh0IGNvbnRyb2wsIG5vdGlmeSB0aGUg
QVQgb2YgY2hhbmdlcy4KLSAgICAgICAgaWYgKHBhcmVudC0+aXNBUklBVGV4dENvbnRyb2woKSAm
JiAhcGFyZW50LT5pc05hdGl2ZVRleHRDb250cm9sKCkgJiYgIXBhcmVudC0+bm9kZSgpLT5yZW5k
ZXJlcklzRWRpdGFibGUoKSkKLSAgICAgICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlm
aWNhdGlvbihwYXJlbnQsIHBhcmVudC0+ZG9jdW1lbnQoKSwgQVhPYmplY3RDYWNoZTo6QVhWYWx1
ZUNoYW5nZWQsIHRydWUpOwotICAgIH0KLX0KLSAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Y2FuSGF2ZUNoaWxkcmVuKCkgY29uc3QKIHsKICAgICBpZiAoIW1fcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKKyAgICAvLyBDYW52YXMgaXMgYSBzcGVjaWFs
IGNhc2U7IGl0cyByb2xlIGlzIEltYWdlUm9sZSBidXQgaXQgaXMgYWxsb3dlZCB0byBoYXZlIGNo
aWxkcmVuLgorICAgIGlmIChub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKGNhbnZhc1RhZykp
CisgICAgICAgIHJldHVybiB0cnVlOworCiAgICAgLy8gRWxlbWVudHMgdGhhdCBzaG91bGQgbm90
IGhhdmUgY2hpbGRyZW4KICAgICBzd2l0Y2ggKHJvbGVWYWx1ZSgpKSB7CiAgICAgY2FzZSBJbWFn
ZVJvbGU6CkBAIC0zNTU5LDYgKzM0NTQsMTggQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRUZXh0RgogICAgIG1fY2hpbGRyZW4uYXBwZW5kKGF4U3BpbkJ1dHRvbik7CiB9CiAK
K3ZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQ2FudmFzQ2hpbGRyZW4oKQorewor
ICAgIGlmICghbm9kZSgpIHx8ICFub2RlKCktPmhhc1RhZ05hbWUoY2FudmFzVGFnKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSWYgaXQncyBhIGNhbnZhcywgaXQgd29uJ3QgaGF2ZSByZW5k
ZXJlZCBjaGlsZHJlbiwgYnV0IGl0IG1pZ2h0IGhhdmUgYWNjZXNzaWJsZSBmYWxsYmFjayBjb250
ZW50LgorICAgIC8vIENsZWFyIG1faGF2ZUNoaWxkcmVuIGJlY2F1c2UgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmFkZENoaWxkcmVuIHdpbGwgZXhwZWN0IGl0IHRvIGJlIGZhbHNlLgorICAgIEFT
U0VSVCghbV9jaGlsZHJlbi5zaXplKCkpOworICAgIG1faGF2ZUNoaWxkcmVuID0gZmFsc2U7Cisg
ICAgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmFkZENoaWxkcmVuKCk7Cit9CisKIHZvaWQgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6YWRkQXR0YWNobWVudENoaWxkcmVuKCkKIHsKICAgICBp
ZiAoIWlzQXR0YWNobWVudCgpKQpAQCAtMzU5NSwxMSArMzUwMiw3IEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6YWRkQ2hpbGQKICAgICAvLyBJZiB0aGUgbmVlZCB0byBhZGQgbW9y
ZSBjaGlsZHJlbiBpbiBhZGRpdGlvbiB0byBleGlzdGluZyBjaGlsZHJlbiBhcmlzZXMsIAogICAg
IC8vIGNoaWxkcmVuQ2hhbmdlZCBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCwgbGVhdmluZyB0aGUg
b2JqZWN0IHdpdGggbm8gY2hpbGRyZW4uCiAgICAgQVNTRVJUKCFtX2hhdmVDaGlsZHJlbik7IAot
ICAgIAotICAgIC8vIG5vdGhpbmcgdG8gYWRkIGlmIHRoZXJlIGlzIG5vIFJlbmRlck9iamVjdAot
ICAgIGlmICghbV9yZW5kZXJlcikKLSAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgbV9oYXZl
Q2hpbGRyZW4gPSB0cnVlOwogICAgIAogICAgIGlmICghY2FuSGF2ZUNoaWxkcmVuKCkpCkBAIC0z
NjA3LDcgKzM1MTAsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmFkZENoaWxk
CiAgICAgCiAgICAgLy8gYWRkIGFsbCB1bmlnbm9yZWQgYWNjIGNoaWxkcmVuCiAgICAgZm9yIChS
ZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0gZmlyc3RDaGlsZCgpOyBvYmo7IG9iaiA9
IG9iai0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIHBhcmVu
dCBpcyBhc2tpbmcgZm9yIHRoaXMgY2hpbGQncyBjaGlsZHJlbiwgdGhlbiBlaXRoZXIgaXQncyB0
aGUgZmlyc3QgdGltZSAoYW5kIGNsZWFyaW5nIGlzIGEgbm8tb3ApLCAKICAgICAgICAgLy8gb3Ig
aXRzIHZpc2liaWxpdHkgaGFzIGNoYW5nZWQuIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhpcyBjaGls
ZCBtYXkgaGF2ZSBhIHN0YWxlIGNoaWxkIGNhY2hlZC4gCiAgICAgICAgIC8vIFRoaXMgY2FuIHBy
ZXZlbnQgYXJpYS1oaWRkZW4gY2hhbmdlcyBmcm9tIHdvcmtpbmcgY29ycmVjdGx5LiBIZW5jZSwg
d2hlbmV2ZXIgYSBwYXJlbnQgaXMgZ2V0dGluZyBjaGlsZHJlbiwgZW5zdXJlIGRhdGEgaXMgbm90
IHN0YWxlLgpAQCAtMzYyNyw2ICszNTI5LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0OjphZGRDaGlsZAogICAgIGFkZEF0dGFjaG1lbnRDaGlsZHJlbigpOwogICAgIGFkZEltYWdl
TWFwQ2hpbGRyZW4oKTsKICAgICBhZGRUZXh0RmllbGRDaGlsZHJlbigpOworICAgIGFkZENhbnZh
c0NoaWxkcmVuKCk7CiAKICNpZiBQTEFURk9STShNQUMpCiAgICAgdXBkYXRlQXR0YWNobWVudFZp
ZXdQYXJlbnRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMTIzMzA4KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdF9oCiAjZGVmaW5lIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3RfaAogCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0VHlwZXMuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogCkBAIC01NSw3ICs1NSw3IEBAIGNsYXNzIFJlbmRlclZpZXc7CiBjbGFzcyBWaXNpYmxl
U2VsZWN0aW9uOwogY2xhc3MgV2lkZ2V0OwogICAgIAotY2xhc3MgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0IHsKK2NsYXNzIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3QgOiBwdWJsaWMgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QgewogcHJvdGVj
dGVkOgogICAgIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0Kik7CiBwdWJs
aWM6CkBAIC02Myw2ICs2Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBp
bml0KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzQW5jaG9yKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzQXR0YWNobWVudCgpIGNvbnN0OwpAQCAtMTExLDcgKzExMyw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2FtZVN0eWxlKFJlbmRlck9iamVjdCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgYm9vbCBoYXNVbmRlcmxpbmUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9v
bCBjYW5TZXRGb2N1c0F0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBjYW5TZXRU
ZXh0UmFuZ2VBdHRyaWJ1dGVzKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNldFZhbHVl
QXR0cmlidXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhblNldEV4cGFuZGVkQXR0cmli
dXRlKCkgY29uc3Q7CkBAIC0xNDksMTAgKzE1MCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBhcmlhT3duc0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpIGNvbnN0
OwogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0FSSUFPd25zKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBBY2Nlc3NpYmlsaXR5Um9sZSBhcmlhUm9sZUF0dHJpYnV0ZSgpIGNvbnN0OwogICAgIHZpcnR1
YWwgYm9vbCBpc1ByZXNlbnRhdGlvbmFsQ2hpbGRPZkFyaWFSb2xlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGFyaWFSb2xlSGFzUHJlc2VudGF0aW9uYWxDaGlsZHJlbigpIGNvbnN0OwotICAg
IHZvaWQgdXBkYXRlQWNjZXNzaWJpbGl0eVJvbGUoKTsKICAgICAKICAgICAvLyBTaG91bGQgYmUg
Y2FsbGVkIG9uIHRoZSByb290IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGtpY2sgb2ZmIGEgaGl0
IHRlc3QuCiAgICAgdmlydHVhbCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5SGl0
VGVzdChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwpAQCAtMTY4LDE0ICsxNjcsMTUgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBlbGVtZW50UmVjdCgpIGNvbnN0OwogICAgIHZpcnR1
YWwgSW50UG9pbnQgY2xpY2tQb2ludCgpOwogICAgIAotICAgIHZvaWQgc2V0UmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KKyAgICB2b2lk
IHNldFJlbmRlcmVyKFJlbmRlck9iamVjdCopOwogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyZXI7IH0KICAgICBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogcmVuZGVyQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIE5vZGUq
IG5vZGUoKSBjb25zdDsKIAorICAgIHZpcnR1YWwgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7
CisKICAgICBSZW5kZXJWaWV3KiB0b3BSZW5kZXJlcigpIGNvbnN0OwogICAgIFJlbmRlclRleHRD
b250cm9sKiB0ZXh0Q29udHJvbCgpIGNvbnN0OwotICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNv
bnN0OwogICAgIEZyYW1lVmlldyogdG9wRG9jdW1lbnRGcmFtZVZpZXcoKSBjb25zdDsgIAogICAg
IERvY3VtZW50KiB0b3BEb2N1bWVudCgpIGNvbnN0OwogICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxh
YmVsRWxlbWVudENvbnRhaW5lcigpIGNvbnN0OwpAQCAtMjE0LDcgKzIxNCw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgZGVjcmVtZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaCgpOwotICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoKTsKICAgICB2aXJ0dWFs
IHZvaWQgY29udGVudENoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRyZW4oKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY2FuSGF2ZUNoaWxkcmVuKCkgY29uc3Q7CkBAIC0yNjAsOCArMjU5
LDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRlcmVy
OwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIG1fYXJpYVJvbGU7Ci0gICAgYm9vbCBtX2NoaWxkcmVu
RGlydHk7CiAgICAgCiAgICAgdm9pZCBzZXRSZW5kZXJPYmplY3QoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikgeyBtX3JlbmRlcmVyID0gcmVuZGVyZXI7IH0KICAgICB2b2lkIGFyaWFMYWJlbGVkQnlF
bGVtZW50cyhWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykgY29uc3Q7CkBAIC0yNzEsNiArMjY4
LDggQEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc0RldGFjaGVkKCkgY29u
c3QgeyByZXR1cm4gIW1fcmVuZGVyZXI7IH0KIAorICAgIHZpcnR1YWwgQWNjZXNzaWJpbGl0eVJv
bGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGFy
aWFMaXN0Ym94U2VsZWN0ZWRDaGlsZHJlbihBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImKTsK
ICAgICB2b2lkIGFyaWFMaXN0Ym94VmlzaWJsZUNoaWxkcmVuKEFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciYpOwpAQCAtMjg2LDkgKzI4NSw2IEBAIHByaXZhdGU6CiAKICAgICBFbGVtZW50KiBt
ZW51RWxlbWVudEZvck1lbnVCdXR0b24oKSBjb25zdDsKICAgICBFbGVtZW50KiBtZW51SXRlbUVs
ZW1lbnRGb3JNZW51KCkgY29uc3Q7Ci0gICAgQWNjZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNj
ZXNzaWJpbGl0eVJvbGUoKTsKLSAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRlcm1pbmVBcmlhUm9s
ZUF0dHJpYnV0ZSgpIGNvbnN0OwotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJlbWFwQXJpYVJvbGVE
dWVUb1BhcmVudChBY2Nlc3NpYmlsaXR5Um9sZSkgY29uc3Q7CiAKICAgICBib29sIGlzVGFiSXRl
bVNlbGVjdGVkKCkgY29uc3Q7CiAgICAgdm9pZCBhbHRlclNsaWRlclZhbHVlKGJvb2wgaW5jcmVh
c2UpOwpAQCAtMzA1LDYgKzMwMSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZFRleHRGaWVs
ZENoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRJbWFnZU1hcENoaWxkcmVuKCk7CisgICAgdm9pZCBh
ZGRDYW52YXNDaGlsZHJlbigpOwogICAgIHZvaWQgYWRkQXR0YWNobWVudENoaWxkcmVuKCk7CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgdXBkYXRlQXR0YWNobWVudFZpZXdQYXJlbnRzKCk7
CkBAIC0zMjgsOCArMzI1LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgYXJpYUxpdmVS
ZWdpb25CdXN5KCkgY29uc3Q7ICAgIAogICAgIAogICAgIGJvb2wgaW5oZXJpdHNQcmVzZW50YXRp
b25hbFJvbGUoKSBjb25zdDsKLSAgICAKLSAgICBtdXRhYmxlIEFjY2Vzc2liaWxpdHlSb2xlIG1f
cm9sZUZvck1TQUE7CiB9OwogCiBpbmxpbmUgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCogdG9B
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNsaWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
U2xpZGVyLmNwcAkocmV2aXNpb24gMTIzMzA4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5U2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcs
OSBAQCBBY2Nlc3NpYmlsaXR5U2xpZGVyOjpBY2Nlc3NpYmlsaXR5U2xpZGVyCiAKIFBhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVNsaWRlcj4gQWNjZXNzaWJpbGl0eVNsaWRlcjo6Y3JlYXRlKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBY2Nlc3NpYmls
aXR5U2xpZGVyKHJlbmRlcmVyKSk7CisgICAgQWNjZXNzaWJpbGl0eVNsaWRlciogb2JqID0gbmV3
IEFjY2Vzc2liaWxpdHlTbGlkZXIocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOworICAgIHJl
dHVybiBhZG9wdFJlZihvYmopOwogfQogCiBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gQWNjZXNz
aWJpbGl0eVNsaWRlcjo6b3JpZW50YXRpb24oKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkocmV2aXNpb24g
MTIzMzA4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxNSBAQCBBY2Nlc3NpYmlsaXR5VGFi
bGU6OkFjY2Vzc2liaWxpdHlUYWJsZShSCiAgICAgOiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
KHJlbmRlcmVyKSwKICAgICBtX2hlYWRlckNvbnRhaW5lcigwKQogeworfQorCitBY2Nlc3NpYmls
aXR5VGFibGU6On5BY2Nlc3NpYmlsaXR5VGFibGUoKQoreworfQorCit2b2lkIEFjY2Vzc2liaWxp
dHlUYWJsZTo6aW5pdCgpCit7CisgICAgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aW5pdCgp
OwogI2lmIEFDQ0VTU0lCSUxJVFlfVEFCTEVTCiAgICAgbV9pc0FjY2Vzc2liaWxpdHlUYWJsZSA9
IGlzVGFibGVFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgpOwogI2Vsc2UKQEAgLTU4LDEz
ICs2NywxMSBAQCBBY2Nlc3NpYmlsaXR5VGFibGU6OkFjY2Vzc2liaWxpdHlUYWJsZShSCiAjZW5k
aWYKIH0KIAotQWNjZXNzaWJpbGl0eVRhYmxlOjp+QWNjZXNzaWJpbGl0eVRhYmxlKCkKLXsKLX0K
LQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGFibGU+IEFjY2Vzc2liaWxpdHlUYWJsZTo6Y3Jl
YXRlKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBB
Y2Nlc3NpYmlsaXR5VGFibGUocmVuZGVyZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIG9i
aiA9IG5ldyBBY2Nlc3NpYmlsaXR5VGFibGUocmVuZGVyZXIpOworICAgIG9iai0+aW5pdCgpOwor
ICAgIHJldHVybiBhZG9wdFJlZihvYmopOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6
aGFzQVJJQVJvbGUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCShyZXZpc2lvbiAxMjMzMDgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3Np
YmlsaXR5VGFibGU+IGNyZWF0ZShSZW5kZXJPYmplY3QqKTsKICAgICB2aXJ0dWFsIH5BY2Nlc3Np
YmlsaXR5VGFibGUoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBpbml0KCk7CisKICAgICB2aXJ0dWFs
IGJvb2wgaXNBY2Nlc3NpYmlsaXR5VGFibGUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNE
YXRhVGFibGUoKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAxMjMzMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw5IEBAIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6On5BY2Nlc3NpYmlsaXR5VGEKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
PiBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGwocmVuZGVy
ZXIpKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBvYmogPSBuZXcgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbChyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG9iaik7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YWNjZXNzaWJpbGl0
eUlzSWdub3JlZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCShyZXZpc2lvbiAxMjMzMDgpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDkgQEAgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojp+
QWNjZXNzaWJpbGl0eVRhYgogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4gQWNj
ZXNzaWJpbGl0eVRhYmxlUm93OjpjcmVhdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFjY2Vzc2liaWxpdHlUYWJsZVJvdyhyZW5kZXJlcikpOwor
ICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJvdyogb2JqID0gbmV3IEFjY2Vzc2liaWxpdHlUYWJsZVJv
dyhyZW5kZXJlcik7CisgICAgb2JqLT5pbml0KCk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG9iaik7
CiB9CiAKIEFjY2Vzc2liaWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6cm9sZVZhbHVl
KCkgY29uc3QKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyMzMwOCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA3LTIyICBEb21pbmlj
IE1henpvbmkgIDxkbWF6em9uaUBnb29nbGUuY29tPgorCisgICAgICAgIEFYOiBOZWVkIEFjY2Vz
c2liaWxpdHlPYmplY3RzIGZvciBub2RlcyB3aXRob3V0IHJlbmRlcmVycyBpbiBjYW52YXMgc3Vi
dHJlZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4
OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IG5ldyB0ZXN0IGFkZHMgYSBidW5jaCBvZiBlbGVtZW50cyB0byBhIG5vcm1hbCBjb250YWluZXIg
YW5kIHRoZSBzYW1lIGVsZW1lbnRzIHRvCisgICAgICAgIGEgY2FudmFzIHN1YnRyZWUsIHRoZW4g
aXQgaXRlcmF0ZXMgb3ZlciBhbGwgb2YgdGhlIGFjY2Vzc2libGUgb2JqZWN0cyB3aXRoaW4gZWFj
aAorICAgICAgICBjb250YWluZXIgYW5kIG1ha2VzIHN1cmUgdGhleSBoYXZlIGlkZW50aWNhbCBy
b2xlcy4gQmVjYXVzZSB3ZSBrbm93IHRoZSBub2RlcyBpbiB0aGUKKyAgICAgICAgY2FudmFzIHN1
YnRyZWUgZG9uJ3QgaGF2ZSByZW5kZXJlcnMsIHRoaXMgc3VjY2Vzc2Z1bGx5IHRlc3RzIHRoYXQg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzCisgICAgICAgIGFyZSBnZXR0aW5nIGNyZWF0ZWQgZm9y
IHRoZXNlIG5vZGVzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJp
bGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5odG1sOiBBZGRlZC4KKwogMjAxMi0w
Ny0yMiAgTGkgWWluICA8bGkueWluQGludGVsLmNvbT4KIAogICAgICAgICBJbXByb3ZlIEJpcXVh
ZEZpbHRlck5vZGUgdGVzdCBjYXNlCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2Nh
bnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9j
YW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIwIEBACitMaW5rICBCdXR0b24gICAgICAgICAgIEFSSUEgYnV0dG9uIEFSSUEg
bGluaworVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdHMg
YXJlIGNyZWF0ZWQgZm9yIGVsZW1lbnRzIGluIGEgY2FudmFzIHN1YnRyZWUuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIGF4UmVuZGVyT2JqZWN0cy5sZW5ndGggaXMgYXhO
b2RlT2JqZWN0cy5sZW5ndGgKK1BBU1MgaSA9PSAwOyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4
Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAxOyBheFJlbmRlck9iamVjdC5yb2xl
ID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAyOyBheFJlbmRlck9iamVj
dC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSAzOyBheFJlbmRl
ck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9PSA0OyBh
eFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BBU1MgaSA9
PSA1OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRydWUKK1BB
U1MgaSA9PSA2OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xlIGlzIHRy
dWUKK1BBU1MgaSA9PSA3OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVjdC5yb2xl
IGlzIHRydWUKK1BBU1MgaSA9PSA4OyBheFJlbmRlck9iamVjdC5yb2xlID09IGF4Tm9kZU9iamVj
dC5yb2xlIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC1leHBlY3RlZC50eHQKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9jYW52YXMtYWNjZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9iamVjdC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9jYW52YXMtYWNj
ZXNzaWJpbGl0eW5vZGVvYmplY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MyBAQAor
PCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKworPGRpdiBpZD0ibXlDb250YWlu
ZXIiIHRhYmluZGV4PSItMSI+CisgIDxhIGhyZWY9IiMiPkxpbms8L2E+CisgIDxidXR0b24+QnV0
dG9uPC9idXR0b24+CisgIDxpbnB1dCB0eXBlPSJ0ZXh0Ij4KKyAgPGlucHV0IHR5cGU9ImNoZWNr
Ym94Ij4KKyAgPGlucHV0IHR5cGU9InJhZGlvIj4KKyAgPGlucHV0IHR5cGU9InN1Ym1pdCI+Cisg
IDxzZWxlY3Q+PG9wdGlvbj4xPG9wdGlvbj4yPC9zZWxlY3Q+CisgIDxzcGFuIHRhYmluZGV4PSIw
IiByb2xlPSJidXR0b24iPkFSSUEgYnV0dG9uPC9zcGFuPgorICA8c3BhbiB0YWJpbmRleD0iMCIg
cm9sZT0ibGluayI+QVJJQSBsaW5rPC9zcGFuPgorPC9kaXY+CisKKzxjYW52YXMgaWQ9Im15Q2Fu
dmFzIiB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdGFiaW5kZXg9Ii0xIj4KKyAgPGEgaHJlZj0i
IyI+TGluazwvYT4KKyAgPGJ1dHRvbj5CdXR0b248L2J1dHRvbj4KKyAgPGlucHV0IHR5cGU9InRl
eHQiPgorICA8aW5wdXQgdHlwZT0iY2hlY2tib3giPgorICA8aW5wdXQgdHlwZT0icmFkaW8iPgor
ICA8aW5wdXQgdHlwZT0ic3VibWl0Ij4KKyAgPHNlbGVjdD48b3B0aW9uPjE8b3B0aW9uPjI8L3Nl
bGVjdD4KKyAgPHNwYW4gdGFiaW5kZXg9IjAiIHJvbGU9ImJ1dHRvbiI+QVJJQSBidXR0b248L3Nw
YW4+CisgIDxzcGFuIHRhYmluZGV4PSIwIiByb2xlPSJsaW5rIj5BUklBIGxpbms8L3NwYW4+Cis8
L2NhbnZhcz4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRoaXMgdGVzdCBtYWtlcyBzdXJlIHRoYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3RzIGFy
ZSBjcmVhdGVkIGZvciBlbGVtZW50cyBpbiBhIGNhbnZhcyBzdWJ0cmVlLiIpOworCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyICYmIHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cikgeworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICBmdW5jdGlvbiBhcHBlbmRGb2N1c2FibGVEZXNjZW5kYW50cyhheE9iamVjdCwgYXhGb2N1c2Fi
bGVMaXN0KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXhPYmplY3QuY2hpbGRyZW5D
b3VudDsgaSsrKSB7CisgICAgICAgICAgICB2YXIgYXhDaGlsZCA9IGF4T2JqZWN0LmNoaWxkQXRJ
bmRleChpKTsKKyAgICAgICAgICAgIGlmIChheENoaWxkLmlzRm9jdXNhYmxlKQorICAgICAgICAg
ICAgICAgIGF4Rm9jdXNhYmxlTGlzdC5wdXNoKGF4Q2hpbGQpOworICAgICAgICAgICAgYXBwZW5k
Rm9jdXNhYmxlRGVzY2VuZGFudHMoYXhDaGlsZCwgYXhGb2N1c2FibGVMaXN0KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bXlDb250YWluZXIiKTsKKyAgICBjb250YWluZXIuZm9jdXMoKTsKKyAgICB2YXIgYXhDb250YWlu
ZXIgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKworICAgIHZhciBj
YW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlDYW52YXMiKTsKKyAgICBjYW52YXMu
Zm9jdXMoKTsKKyAgICB2YXIgYXhDYW52YXMgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudDsKKworICAgIHZhciBheFJlbmRlck9iamVjdHMgPSBbXTsKKyAgICB2YXIgYXhO
b2RlT2JqZWN0cyA9IFtdOworCisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMoYXhDb250
YWluZXIsIGF4UmVuZGVyT2JqZWN0cyk7CisgICAgYXBwZW5kRm9jdXNhYmxlRGVzY2VuZGFudHMo
YXhDYW52YXMsIGF4Tm9kZU9iamVjdHMpOworCisgICAgc2hvdWxkQmUoImF4UmVuZGVyT2JqZWN0
cy5sZW5ndGgiLCAiYXhOb2RlT2JqZWN0cy5sZW5ndGgiKTsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgYXhSZW5kZXJPYmplY3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHZhciBheFJlbmRl
ck9iamVjdCA9IGF4UmVuZGVyT2JqZWN0c1tpXTsKKyAgICAgICAgdmFyIGF4Tm9kZU9iamVjdCA9
IGF4Tm9kZU9iamVjdHNbaV07CisgICAgICAgIHNob3VsZEJlKCJpID09ICIgKyBpICsgIjsgYXhS
ZW5kZXJPYmplY3Qucm9sZSA9PSBheE5vZGVPYmplY3Qucm9sZSIsICJ0cnVlIik7CisgICAgfQor
fQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2NhbnZhcy1hY2Nlc3NpYmlsaXR5bm9kZW9i
amVjdC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwK
QWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoK
</data>

          </attachment>
      

    </bug>

</bugzilla>