<?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>179497</bug_id>
          
          <creation_ts>2017-11-09 11:33:17 -0800</creation_ts>
          <short_desc>AX: AOM: Implement number type properties</short_desc>
          <delta_ts>2017-11-20 16:38:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179255</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>179255</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>n_wang</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1369984</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-09 11:33:17 -0800</bug_when>
    <thetext>AOM Phase 1:
Implement number type properties

Spec: https://wicg.github.io/aom/spec/

&lt;rdar://problem/35077947&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373485</commentid>
    <comment_count>1</comment_count>
      <attachid>327295</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-17 18:54:36 -0800</bug_when>
    <thetext>Created attachment 327295
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373509</commentid>
    <comment_count>2</comment_count>
      <attachid>327302</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-17 21:22:35 -0800</bug_when>
    <thetext>Created attachment 327302
patch

Fix GTK build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373515</commentid>
    <comment_count>3</comment_count>
      <attachid>327302</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-11-17 23:46:39 -0800</bug_when>
    <thetext>Comment on attachment 327302
patch

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

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:203
&gt; +void AccessibleNode::setProperty(bool shouldRemove, PropertyValueVariant&amp;&amp; value, AXPropertyName propertyName)

can we remove the first argument and just check if value.has_value inside the method?

It seems more natural to have the PropertyName be the first argument, and the value be the second?

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:279
&gt; +        return element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName)).toInt();

toUnsigned()

&gt; Source/WebCore/accessibility/AccessibleNode.h:39
&gt; +typedef Variant&lt;std::nullptr_t, String, bool, int, unsigned, double&gt; PropertyValueVariant;

should this be float instead of double?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373571</commentid>
    <comment_count>4</comment_count>
      <attachid>327302</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 12:54:52 -0800</bug_when>
    <thetext>Comment on attachment 327302
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibleNode.cpp:203
&gt;&gt; +void AccessibleNode::setProperty(bool shouldRemove, PropertyValueVariant&amp;&amp; value, AXPropertyName propertyName)
&gt; 
&gt; can we remove the first argument and just check if value.has_value inside the method?
&gt; 
&gt; It seems more natural to have the PropertyName be the first argument, and the value be the second?

Ok I added a template function to cover the optional values
template&lt;typename T&gt; void setOptionalProperty(AXPropertyName, std::optional&lt;T&gt;);
And also setStringProperty()

&gt;&gt; Source/WebCore/accessibility/AccessibleNode.cpp:279
&gt;&gt; +        return element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName)).toInt();
&gt; 
&gt; toUnsigned()

There&apos;s no toUnsigned() on AtomicString, so I cast it to String and use toUInt()

&gt;&gt; Source/WebCore/accessibility/AccessibleNode.h:39
&gt;&gt; +typedef Variant&lt;std::nullptr_t, String, bool, int, unsigned, double&gt; PropertyValueVariant;
&gt; 
&gt; should this be float instead of double?

This is to match the JS API interface:
attribute double?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373572</commentid>
    <comment_count>5</comment_count>
      <attachid>327318</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 12:57:37 -0800</bug_when>
    <thetext>Created attachment 327318
patch

Update from review and use auto if possible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373573</commentid>
    <comment_count>6</comment_count>
      <attachid>327318</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-11-18 13:00:18 -0800</bug_when>
    <thetext>Comment on attachment 327318
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2183
&gt; +float AccessibilityObject::floatValueForProperty(AXPropertyName propertyKey) const

this is dealing with floatValues not double though</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373579</commentid>
    <comment_count>7</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 13:08:19 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #6)
&gt; Comment on attachment 327318 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327318&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2183
&gt; &gt; +float AccessibilityObject::floatValueForProperty(AXPropertyName propertyKey) const
&gt; 
&gt; this is dealing with floatValues not double though

I can change this to double too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373580</commentid>
    <comment_count>8</comment_count>
      <attachid>327320</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 13:20:29 -0800</bug_when>
    <thetext>Created attachment 327320
patch

update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373650</commentid>
    <comment_count>9</comment_count>
      <attachid>327320</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2017-11-18 22:03:23 -0800</bug_when>
    <thetext>Comment on attachment 327320
patch

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

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:290
&gt; +        const String&amp; value =  element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName));

extra space after =

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:304
&gt; +        return element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName)).toFloat();

toDouble() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373654</commentid>
    <comment_count>10</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 22:58:03 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #9)
&gt; Comment on attachment 327320 [details]
&gt; patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=327320&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibleNode.cpp:290
&gt; &gt; +        const String&amp; value =  element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName));
&gt; 
&gt; extra space after =
&gt; 
&gt; &gt; Source/WebCore/accessibility/AccessibleNode.cpp:304
&gt; &gt; +        return element.attributeWithoutSynchronization(ariaAttributeMap().get(propertyName)).toFloat();
&gt; 
&gt; toDouble() ?

Ok, updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373655</commentid>
    <comment_count>11</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-18 23:00:01 -0800</bug_when>
    <thetext>Committed r225030: &lt;https://trac.webkit.org/changeset/225030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373868</commentid>
    <comment_count>12</comment_count>
      <attachid>327320</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-11-20 16:38:57 -0800</bug_when>
    <thetext>Comment on attachment 327320
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2171
&gt; +    if (Element* element = this-&gt;element())

Use auto in these cases.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2178
&gt; +    if (Element* element = this-&gt;element())

Ditto.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2185
&gt; +    if (Element* element = this-&gt;element())

Ditto.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327295</attachid>
            <date>2017-11-17 18:54:36 -0800</date>
            <delta_ts>2017-11-17 21:22:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>78493</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2MyBAQAorMjAxNy0xMS0xNyAgTmFuIFdh
bmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBBT006IEltcGxlbWVudCBudW1i
ZXIgdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzk0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBY2Nlc3NpYmlsaXR5IE9iamVjdCBNb2RlbAorICAgICAgICBFeHBsYWluZXI6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL2V4cGxhaW5lci5odG1sCisgICAgICAgIFNwZWM6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL3NwZWMvCisKKyAgICAgICAgSW1wbGVtZW50ZWQg
dGhlIG51bWJlciB0eXBlIHByb3BlcnRpZXMgZm9yIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGFs
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXItcHJvcGVydGll
cy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93
SW5kZXhSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsOjpheFJvd1NwYW5XaXRoUm93SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6Y29sdW1uSW5kZXhSYW5nZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjphcmlhUm93U3BhbldpdGhS
b3dJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aGVhZGluZ0xldmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVyYXJjaGlj
YWxMZXZlbCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVl
Rm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6dW5zaWduZWRWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmZsb2F0VmFsdWVGb3JQcm9wZXJ0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c1NldFNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNQb3NJblNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc0luU2V0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJ
QVNldFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c3VwcG9ydHNBUklBUG9zSW5TZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVNldFNpemUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVBvc0luU2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YXhDb2x1bW5Db3VudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmF4Um93Q291bnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphcmlhQ29sdW1uQ291
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
OjphcmlhUm93Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uSW5kZXggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dJbmRleCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheENvbHVtblNw
YW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhS
b3dTcGFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OmFyaWFDb2x1bW5JbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjphcmlhUm93SW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYUNvbHVtblNwYW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJp
YVJvd1NwYW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbDo6c2V0QVhDb2xJbmRleEZyb21Sb3cpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbDo6c2V0QVJJQUNvbEluZGV4RnJvbVJvdyk6IERlbGV0ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmF4Q29sdW1uSW5kZXggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjpheFJvd0luZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXJpYUNvbHVtbkluZGV4IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
YXJpYVJvd0luZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZVJvdy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJs
ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJpYUF0dHJpYnV0ZU1hcCk6CisgICAgICAg
IChXZWJDb3JlOjppc1Byb3BlcnR5VmFsdWVJbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9w
ZXJ0eVZhbHVlVW5zaWduZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlRmxv
YXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUJvb2xWYWx1ZUZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUlu
dFZhbHVlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6ZWZm
ZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OmVmZmVjdGl2ZUZsb2F0VmFsdWVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjphdG9taWMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJsZU5vZGU6OnNldEF0b21pYyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9k
ZTo6c2V0QXV0b2NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpi
dXN5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRCdXN5KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRDaGVja2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpjb2xDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29sQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJsZU5vZGU6OmNvbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRDb2xJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6
Y29sU3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29s
U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpleHBhbmRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0RXhwYW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldEhhc1BvcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpo
aWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEhpZGRl
bik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0SW52YWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0S2V5U2hvcnRjdXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpsYWJlbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OmxldmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpz
ZXRMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bGl2ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0TGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bW9kYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJsZU5vZGU6OnNldE1vZGFsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjptdWx0aWxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OnNldE11bHRpbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bXVsdGlz
ZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRN
dWx0aXNlbGVjdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE9y
aWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRQbGFjZWhv
bGRlcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6cG9zSW5TZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFBvc0luU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRQcmVzc2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpyZWFkT25seSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldFJlbGV2YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpy
ZXF1aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVx
dWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvbGVEZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6cm93Q291bnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvd0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpyb3dJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlTm9kZTo6c2V0Um93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5v
ZGU6OnJvd1NwYW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNl
dFJvd1NwYW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNlbGVjdGVkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRTZWxlY3RlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0U2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0U2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0U29ydCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6dmFsdWVNYXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OnNldFZhbHVlTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjp2YWx1ZU1p
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNaW4p
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnZhbHVlTm93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU5vdyk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6Ym9vbFZhbHVlRm9yUHJvcGVydHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEJvb2xQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVHZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFSSUFSb3dDb3VudF0pOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUNvbHVtbkNv
dW50XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2li
aWxpdHlBUklBUm93SW5kZXhdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXIgYWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmRleF0pOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0
dHJpYnV0ZU5hbWVzXSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpdKToKKwogMjAxNy0xMS0xNyAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGRVR1cmJ1bGVuY2U6IGNv
bXB1dGUgYWxsIDQgY2hhbm5lbHMgYXQgb25jZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCShy
ZXZpc2lvbiAyMjQ5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiArOTEsMTIgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleAogCiAgICAgLy8gQVJJQSAx
LjEsIGFyaWEtcm93c3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIGNlbGxzIGFuZCBncmlk
Y2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQgaW4gYSBuYXRpdmUgdGFibGUuCiAgICAgLy8g
U28gd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGF0IGF0dHJpYnV0ZSBoZXJlLgotICAgIHJvd1Jhbmdl
LnNlY29uZCA9IGFyaWFSb3dTcGFuV2l0aFJvd0luZGV4KHJvd1JhbmdlLmZpcnN0KTsKKyAgICBy
b3dSYW5nZS5zZWNvbmQgPSBheFJvd1NwYW5XaXRoUm93SW5kZXgocm93UmFuZ2UuZmlyc3QpOwog
fQogCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjphcmlhUm93U3BhbldpdGhS
b3dJbmRleCh1bnNpZ25lZCByb3dJbmRleCkgY29uc3QKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlB
UklBR3JpZENlbGw6OmF4Um93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCByb3dJbmRleCkgY29u
c3QKIHsKLSAgICBpbnQgcm93U3BhbiA9IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFSb3dT
cGFuKCk7CisgICAgaW50IHJvd1NwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheFJvd1Nw
YW4oKTsKICAgICBpZiAocm93U3BhbiA9PSAtMSkgewogICAgICAgICBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiByYW5nZTsKICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93
SW5kZXhSYW5nZShyYW5nZSk7CkBAIC0xNTEsMTIgKzE1MSwxMiBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGw6OmNvbHVtbkluCiAgICAgICAgICAgICBjb2x1bW5SYW5nZS5maXJzdCA9
IGluZGV4V2l0aFNwYW47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBp
bmRleFdpdGhTcGFuICs9IGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjaGlsZCkgPyBzdGQ6
Om1heChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpLmFyaWFDb2x1bW5T
cGFuKCksIDEpIDogMTsKKyAgICAgICAgaW5kZXhXaXRoU3BhbiArPSBpczxBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsPigqY2hpbGQpID8gc3RkOjptYXgoZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbD4oKmNoaWxkKS5heENvbHVtblNwYW4oKSwgMSkgOiAxOwogICAgIH0KICAgICAKICAgICAv
LyBBUklBIDEuMSwgYXJpYS1jb2xzcGFuIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBmb3IgY2VsbHMg
YW5kIGdyaWRjZWxscyB3aGljaCBhcmUgbm90IGNvbnRhaW5lZCBpbiBhIG5hdGl2ZSB0YWJsZS4K
ICAgICAvLyBTbyB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoYXQgYXR0cmlidXRlIGhlcmUuCi0gICAg
aW50IGNvbHVtblNwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhQ29sdW1uU3Bhbigp
OworICAgIGludCBjb2x1bW5TcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhDb2x1bW5T
cGFuKCk7CiAgICAgaWYgKGNvbHVtblNwYW4gPT0gLTEpIHsKICAgICAgICAgc3RkOjpwYWlyPHVu
c2lnbmVkLCB1bnNpZ25lZD4gcmFuZ2U7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OmNvbHVtbkluZGV4UmFuZ2UocmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmgJKHJldmlzaW9u
IDIyNDk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFS
SUFHcmlkQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAK
ICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50Um93R3JvdXAoKSBjb25zdDsKLSAgICB1bnNp
Z25lZCBhcmlhUm93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAg
dW5zaWduZWQgYXhSb3dTcGFuV2l0aFJvd0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAg
ICBTdHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsgCiAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjI0OTkyKQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc2Miw5ICs3NjIsOSBAQCBpbnQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhlYWRpbmdMZXZl
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpc0hlYWRpbmcoKSkgewotICAgICAg
ICBpbnQgYXJpYUxldmVsID0gZ2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKS50b0ludCgpOwot
ICAgICAgICBpZiAoYXJpYUxldmVsID4gMCkKLSAgICAgICAgICAgIHJldHVybiBhcmlhTGV2ZWw7
CisgICAgICAgIGludCBsZXZlbCA9IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6TGV2ZWwpOworICAgICAgICBpZiAobGV2ZWwgPiAwKQorICAgICAgICAgICAgcmV0dXJu
IGxldmVsOwogICAgIH0KIAogICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGgxVGFnKSkKQEAgLTgx
NCw5ICs4MTQsOCBAQCBmbG9hdCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6dmFsdWVGb3JSCiAK
ICAgICAvLyBJbiBBUklBIDEuMSwgdGhlIGltcGxpY2l0IHZhbHVlIGZvciBhcmlhLXZhbHVlbm93
IG9uIGEgc3BpbiBidXR0b24gaXMgMC4KICAgICAvLyBGb3Igb3RoZXIgcm9sZXMsIGl0IGlzIGhh
bGYgd2F5IGJldHdlZW4gYXJpYS12YWx1ZW1pbiBhbmQgYXJpYS12YWx1ZW1heC4KLSAgICBhdXRv
JiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cik7Ci0gICAgaWYgKCF2YWx1
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7CisgICAgaWYgKGhh
c1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykpCisgICAgICAgIHJldHVybiBmbG9h
dFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTm93KTsKIAogICAgIHJldHVy
biBpc1NwaW5CdXR0b24oKSA/IDAgOiAobWluVmFsdWVGb3JSYW5nZSgpICsgbWF4VmFsdWVGb3JS
YW5nZSgpKSAvIDI7CiB9CkBAIC04MzIsOSArODMxLDggQEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6Om1heFZhbHVlRgogICAgIGlmICghaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAg
cmV0dXJuIDAuMGY7CiAKLSAgICBhdXRvJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVl
bWF4QXR0cik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1
ZS50b0Zsb2F0KCk7CisgICAgaWYgKGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1h
eCkpCisgICAgICAgIHJldHVybiBmbG9hdFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlZhbHVlTWF4KTsKIAogICAgIC8vIEluIEFSSUEgMS4xLCB0aGUgaW1wbGljaXQgdmFsdWUgZm9y
IGFyaWEtdmFsdWVtYXggb24gYSBzcGluIGJ1dHRvbgogICAgIC8vIGlzIHRoYXQgdGhlcmUgaXMg
bm8gbWF4aW11bSB2YWx1ZS4gRm9yIG90aGVyIHJvbGVzLCBpdCBpcyAxMDAuCkBAIC04NTIsOSAr
ODUwLDggQEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRgogICAgIGlm
ICghaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKLSAgICBhdXRvJiB2
YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWluQXR0cik7Ci0gICAgaWYgKCF2YWx1ZS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7CisgICAgaWYgKGhhc1By
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1pbikpCisgICAgICAgIHJldHVybiBmbG9hdFZh
bHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluKTsKIAogICAgIC8vIEluIEFS
SUEgMS4xLCB0aGUgaW1wbGljaXQgdmFsdWUgZm9yIGFyaWEtdmFsdWVtaW4gb24gYSBzcGluIGJ1
dHRvbgogICAgIC8vIGlzIHRoYXQgdGhlcmUgaXMgbm8gbWluaW11bSB2YWx1ZS4gRm9yIG90aGVy
IHJvbGVzLCBpdCBpcyAwLgpAQCAtMTYyMiwxMCArMTYxOSw4IEBAIHVuc2lnbmVkIEFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoaWVyYXIKICAgICBOb2RlKiBub2RlID0gdGhpcy0+bm9kZSgpOwog
ICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybiAwOwotICAgIEVsZW1l
bnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9kZSk7Ci0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBhcmlhTGV2ZWwgPSBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oYXJpYV9sZXZlbEF0dHIpOwotICAgIGlmICghYXJpYUxldmVsLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIGFyaWFMZXZlbC50b0ludCgpOworICAgIGlmIChoYXNQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6TGV2ZWwpKQorICAgICAgICByZXR1cm4gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpMZXZlbCk7CiAgICAgCiAgICAgLy8gT25seSB0cmVlIGl0ZW0gd2ls
bCBjYWxjdWxhdGUgaXRzIGxldmVsIHRocm91Z2ggdGhlIERPTSBjdXJyZW50bHkuCiAgICAgaWYg
KHJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpUcmVlSXRlbSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cAkocmV2aXNpb24gMjI0OTkyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2Niw2ICsyMTY2LDI3IEBA
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJpbGl0eU9iamVjdDoKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQogCitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWVGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2libGVO
b2RlOjplZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dW5zaWdu
ZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAorewor
ICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgICAgICByZXR1
cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KCplbGVt
ZW50LCBwcm9wZXJ0eUtleSk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmZsb2F0VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtl
eSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVGbG9hdFZhbHVlRm9yRWxl
bWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOworICAgIHJldHVybiAwLjBmOworfQorCiAvLyBM
YWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0aW9uLCBob3Jpem9udGFsIG1lYW5z
IHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQgPiB3aWR0aDsKIEFjY2Vzc2liaWxp
dHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7
CkBAIC0yNjUyLDI0ICsyNjczLDI0IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNQ
b3B1cFZhbHUKICAgICByZXR1cm4gImZhbHNlIjsKIH0KIAotYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdXBwb3J0c0FSSUFTZXRTaXplKCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3VwcG9ydHNTZXRTaXplKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGFy
aWFfc2V0c2l6ZUF0dHIpOworICAgIHJldHVybiBoYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
U2V0U2l6ZSk7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklBUG9z
SW5TZXQoKSBjb25zdAorYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c1Bvc0luU2V0
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGFyaWFfcG9zaW5zZXRBdHRyKTsK
KyAgICByZXR1cm4gaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0KTsKIH0KICAg
ICAKLWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhU2V0U2l6ZSgpIGNvbnN0CitpbnQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6c2V0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZShhcmlhX3NldHNpemVBdHRyKS50b0ludCgpOworICAgIHJldHVybiBpbnRWYWx1ZUZvclBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZXRTaXplKTsKIH0KIAotaW50IEFjY2Vzc2liaWxpdHlP
YmplY3Q6OmFyaWFQb3NJblNldCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6cG9z
SW5TZXQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV9wb3NpbnNldEF0
dHIpLnRvSW50KCk7CisgICAgcmV0dXJuIHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6UG9zSW5TZXQpOwogfQogICAgIAogY29uc3QgQXRvbWljU3RyaW5nJiBBY2Nlc3Np
YmlsaXR5T2JqZWN0OjppZGVudGlmaWVyQXR0cmlidXRlKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCShyZXZp
c2lvbiAyMjQ5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzA4LDEwICs3MDgsMTAgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNvbnN0OwogICAgIGJvb2wgaXNNb2Rh
bE5vZGUoKSBjb25zdDsKICAgICAKLSAgICBib29sIHN1cHBvcnRzQVJJQVNldFNpemUoKSBjb25z
dDsKLSAgICBib29sIHN1cHBvcnRzQVJJQVBvc0luU2V0KCkgY29uc3Q7Ci0gICAgaW50IGFyaWFT
ZXRTaXplKCkgY29uc3Q7Ci0gICAgaW50IGFyaWFQb3NJblNldCgpIGNvbnN0OworICAgIGJvb2wg
c3VwcG9ydHNTZXRTaXplKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c1Bvc0luU2V0KCkgY29u
c3Q7CisgICAgaW50IHNldFNpemUoKSBjb25zdDsKKyAgICBpbnQgcG9zSW5TZXQoKSBjb25zdDsK
ICAgICAKICAgICAvLyBBUklBIGRyYWcgYW5kIGRyb3AKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNBUklBRHJvcHBpbmcoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtODk2LDYgKzg5Niw5
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lKSBjb25zdDsK
ICAgICBjb25zdCBTdHJpbmcgc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBib29sVmFsdWVGb3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgaW50IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWUpIGNvbnN0OworICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSkgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRWYWx1ZUZvclByb3BlcnR5KEFYUHJv
cGVydHlOYW1lKSBjb25zdDsKIAogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2Ugdmlz
aWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgp
OyB9CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5n
ZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZS5jcHAJKHJldmlzaW9uIDIyNDk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIgogI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5oIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlUYWJsZVJvdy5oIgorI2luY2x1ZGUgIkFjY2Vzc2libGVOb2RlLmgiCiAjaW5jbHVkZSAi
RWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRN
TFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKQEAgLTE1MywxMiArMTU0LDEyIEBAIGJvb2wgQWNjZXNz
aWJpbGl0eVRhYmxlOjppc0RhdGFUYWJsZSgpIGMKICAgICAKICAgICAvLyBJZiB0aGUgYXV0aG9y
IGhhcyB1c2VkIEFSSUEgdG8gc3BlY2lmeSBhIHZhbGlkIGNvbHVtbiBvciByb3cgY291bnQsIGFz
c3VtZSB0aGV5CiAgICAgLy8gd2FudCB1cyB0byB0cmVhdCB0aGUgdGFibGUgYXMgYSBkYXRhIHRh
YmxlLgotICAgIGludCBhcmlhQ29sdW1uQ291bnQgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xjb3Vu
dEF0dHIpLnRvSW50KCk7Ci0gICAgaWYgKGFyaWFDb2x1bW5Db3VudCA9PSAtMSB8fCBhcmlhQ29s
dW1uQ291bnQgPiAwKQorICAgIGludCBheENvbHVtbkNvdW50ID0gaW50VmFsdWVGb3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQpOworICAgIGlmIChheENvbHVtbkNvdW50ID09IC0x
IHx8IGF4Q29sdW1uQ291bnQgPiAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGludCBh
cmlhUm93Q291bnQgPSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3djb3VudEF0dHIpLnRvSW50KCk7Ci0g
ICAgaWYgKGFyaWFSb3dDb3VudCA9PSAtMSB8fCBhcmlhUm93Q291bnQgPiAwKQorICAgIGludCBh
eFJvd0NvdW50ID0gaW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93Q291bnQp
OworICAgIGlmIChheFJvd0NvdW50ID09IC0xIHx8IGF4Um93Q291bnQgPiAwKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlclRhYmxlJiB0YWJsZSA9IGRvd25jYXN0PFJlbmRlclRh
YmxlPigqbV9yZW5kZXJlcik7CkBAIC0yMzQsMjkgKzIzNSwyOSBAQCBib29sIEFjY2Vzc2liaWxp
dHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjCiAKICAgICAgICAgICAgIC8vIElmIHRoZSBhdXRob3Ig
aGFzIHVzZWQgQVJJQSB0byBzcGVjaWZ5IGEgdmFsaWQgY29sdW1uIG9yIHJvdyBpbmRleCwgYXNz
dW1lIHRoZXkgd2FudCB1cwogICAgICAgICAgICAgLy8gdG8gdHJlYXQgdGhlIHRhYmxlIGFzIGEg
ZGF0YSB0YWJsZS4KLSAgICAgICAgICAgIGludCBhcmlhQ29sdW1uSW5kZXggPSBjZWxsRWxlbWVu
dC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2NvbGluZGV4QXR0cikudG9J
bnQoKTsKLSAgICAgICAgICAgIGlmIChhcmlhQ29sdW1uSW5kZXggPj0gMSkKKyAgICAgICAgICAg
IGludCBheENvbHVtbkluZGV4ID0gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFs
dWVGb3JFbGVtZW50KCpjZWxsRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkNvbEluZGV4KTsKKyAg
ICAgICAgICAgIGlmIChheENvbHVtbkluZGV4ID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICAgICAgICAgIGludCBhcmlhUm93SW5kZXggPSBjZWxsRWxlbWVudC0+YXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX3Jvd2luZGV4QXR0cikudG9JbnQoKTsK
LSAgICAgICAgICAgIGlmIChhcmlhUm93SW5kZXggPj0gMSkKKyAgICAgICAgICAgIGludCBheFJv
d0luZGV4ID0gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50
KCpjZWxsRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4KTsKKyAgICAgICAgICAgIGlm
IChheFJvd0luZGV4ID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAg
ICAgICAgIGlmIChhdXRvIGNlbGxQYXJlbnRFbGVtZW50ID0gY2VsbEVsZW1lbnQtPnBhcmVudEVs
ZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGFyaWFSb3dJbmRleCA9IGNlbGxQYXJlbnRFbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfcm93aW5kZXhBdHRyKS50
b0ludCgpOwotICAgICAgICAgICAgICAgIGlmIChhcmlhUm93SW5kZXggPj0gMSkKKyAgICAgICAg
ICAgICAgICBheFJvd0luZGV4ID0gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFs
dWVGb3JFbGVtZW50KCpjZWxsUGFyZW50RWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4
KTsKKyAgICAgICAgICAgICAgICBpZiAoYXhSb3dJbmRleCA+PSAxKQogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gSWYgdGhl
IGF1dGhvciBoYXMgdXNlZCBBUklBIHRvIHNwZWNpZnkgYSBjb2x1bW4gb3Igcm93IHNwYW4sIHdl
J3JlIHN1cHBvc2VkIHRvIGlnbm9yZQogICAgICAgICAgICAgLy8gdGhlIHZhbHVlIGZvciB0aGUg
cHVycG9zZXMgb2YgZXhwb3NpbmcgdGhlIHNwYW4uIEJ1dCBhc3N1bWUgdGhleSB3YW50IHVzIHRv
IHRyZWF0IHRoZQogICAgICAgICAgICAgLy8gdGFibGUgYXMgYSBkYXRhIHRhYmxlLgotICAgICAg
ICAgICAgaW50IGFyaWFDb2x1bW5TcGFuID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oYXJpYV9jb2xzcGFuQXR0cikudG9JbnQoKTsKLSAgICAgICAgICAgIGlm
IChhcmlhQ29sdW1uU3BhbiA+PSAxKQorICAgICAgICAgICAgaW50IGF4Q29sdW1uU3BhbiA9IEFj
Y2Vzc2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1l
bnQsIEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKKyAgICAgICAgICAgIGlmIChheENvbHVtblNw
YW4gPj0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgICAgaW50
IGFyaWFSb3dTcGFuID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oYXJpYV9yb3dzcGFuQXR0cikudG9JbnQoKTsKLSAgICAgICAgICAgIGlmIChhcmlhUm93U3Bh
biA+PSAxKQorICAgICAgICAgICAgaW50IGF4Um93U3BhbiA9IEFjY2Vzc2libGVOb2RlOjplZmZl
Y3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpSb3dTcGFuKTsKKyAgICAgICAgICAgIGlmIChheFJvd1NwYW4gPj0gMSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJlbmRl
clN0eWxlID0gY2VsbC0+c3R5bGUoKTsKQEAgLTY5OCwxMSArNjk5LDkgQEAgU3RyaW5nIEFjY2Vz
c2liaWxpdHlUYWJsZTo6dGl0bGUoKSBjb25zdAogICAgIHJldHVybiB0aXRsZTsKIH0KIAotaW50
IEFjY2Vzc2liaWxpdHlUYWJsZTo6YXJpYUNvbHVtbkNvdW50KCkgY29uc3QKK2ludCBBY2Nlc3Np
YmlsaXR5VGFibGU6OmF4Q29sdW1uQ291bnQoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY29sQ291bnRWYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX2NvbGNvdW50QXR0cik7Ci0g
ICAgCi0gICAgaW50IGNvbENvdW50SW50ID0gY29sQ291bnRWYWx1ZS50b0ludCgpOworICAgIGlu
dCBjb2xDb3VudEludCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbENv
dW50KTsKICAgICAvLyBUaGUgQVJJQSBzcGVjIHN0YXRlcywgIkF1dGhvcnMgbXVzdCBzZXQgdGhl
IHZhbHVlIG9mIGFyaWEtY29sY291bnQgdG8gYW4gaW50ZWdlciBlcXVhbCB0byB0aGUKICAgICAv
LyBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZnVsbCB0YWJsZS4gSWYgdGhlIHRvdGFsIG51bWJl
ciBvZiBjb2x1bW5zIGlzIHVua25vd24sIGF1dGhvcnMgbXVzdAogICAgIC8vIHNldCB0aGUgdmFs
dWUgb2YgYXJpYS1jb2xjb3VudCB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB2YWx1ZSBzaG91
bGQgbm90IGJlIGNhbGN1bGF0ZWQgYnkKQEAgLTcxMywxMSArNzEyLDkgQEAgaW50IEFjY2Vzc2li
aWxpdHlUYWJsZTo6YXJpYUNvbHVtbkNvdW50KAogICAgIHJldHVybiAwOwogfQogCi1pbnQgQWNj
ZXNzaWJpbGl0eVRhYmxlOjphcmlhUm93Q291bnQoKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlU
YWJsZTo6YXhSb3dDb3VudCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3dD
b3VudFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93Y291bnRBdHRyKTsKLSAgICAKLSAgICBp
bnQgcm93Q291bnRJbnQgPSByb3dDb3VudFZhbHVlLnRvSW50KCk7CisgICAgaW50IHJvd0NvdW50
SW50ID0gaW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93Q291bnQpOwogICAg
IC8vIFRoZSBBUklBIHNwZWMgc3RhdGVzLCAiQXV0aG9ycyBtdXN0IHNldCB0aGUgdmFsdWUgb2Yg
YXJpYS1yb3djb3VudCB0byBhbiBpbnRlZ2VyIGVxdWFsIHRvIHRoZQogICAgIC8vIG51bWJlciBv
ZiByb3dzIGluIHRoZSBmdWxsIHRhYmxlLiBJZiB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgaXMg
dW5rbm93biwgYXV0aG9ycyBtdXN0IHNldAogICAgIC8vIHRoZSB2YWx1ZSBvZiBhcmlhLXJvd2Nv
dW50IHRvIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlIHZhbHVlIHNob3VsZCBub3QgYmUgY2FsY3Vs
YXRlZCBieSB0aGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGUuaAkocmV2aXNpb24gMjI0OTkyKQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQs
OCArNzQsOCBAQCBwdWJsaWM6CiAgICAgLy8gaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0
eSgpIGlzIHdoZXRoZXIgaXQgaXMgZXhwb3NlZCBhcyBhbiBBY2Nlc3NpYmlsaXR5VGFibGUgdG8g
dGhlIHBsYXRmb3JtLgogICAgIGJvb2wgaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJpbGl0eSgp
IGNvbnN0OwogICAgIAotICAgIGludCBhcmlhQ29sdW1uQ291bnQoKSBjb25zdDsKLSAgICBpbnQg
YXJpYVJvd0NvdW50KCkgY29uc3Q7CisgICAgaW50IGF4Q29sdW1uQ291bnQoKSBjb25zdDsKKyAg
ICBpbnQgYXhSb3dDb3VudCgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNj
ZXNzaWJpbGl0eVRhYmxlKFJlbmRlck9iamVjdCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwCShyZXZp
c2lvbiAyMjQ5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgogI2lu
Y2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgorI2luY2x1ZGUgIkFjY2Vzc2libGVOb2Rl
LmgiCiAjaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKQEAgLTQ0LDcgKzQ1LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIDogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdChyZW5kZXJlcikKLSAgICAsIG1fYXJpYUNvbEluZGV4RnJvbVJvdygtMSkKKyAgICAs
IG1fYXhDb2xJbmRleEZyb21Sb3coLTEpCiB7CiB9CiAKQEAgLTMyMCw3ICszMjEsNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0luZGV4UmFuCiAgICAgLy8gQVJJQSAxLjEncyBh
cmlhLXJvd3NwYW4gYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBjZWxscyBhbmQgZ3JpZGNlbGxz
IHdoaWNoIGFyZSBub3QgY29udGFpbmVkCiAgICAgLy8gaW4gYSBuYXRpdmUgdGFibGUuIEJ1dCBp
ZiB3ZSBoYXZlIGEgdmFsaWQgYXV0aG9yLXByb3ZpZGVkIHZhbHVlIGFuZCBkbyBub3QgaGF2ZSBh
biBleHBsaWNpdAogICAgIC8vIG5hdGl2ZSBob3N0IGxhbmd1YWdlIHZhbHVlIGZvciB0aGUgcm93
c3BhbiwgZXhwb3NlIHRoZSBBUklBIHZhbHVlLgotICAgIHJvd1JhbmdlLnNlY29uZCA9IGFyaWFS
b3dTcGFuKCk7CisgICAgcm93UmFuZ2Uuc2Vjb25kID0gYXhSb3dTcGFuKCk7CiAgICAgaWYgKHN0
YXRpY19jYXN0PGludD4ocm93UmFuZ2Uuc2Vjb25kKSA9PSAtMSkKICAgICAgICAgcm93UmFuZ2Uu
c2Vjb25kID0gcmVuZGVyQ2VsbC5yb3dTcGFuKCk7CiAgICAgCkBAIC0zMzksNyArMzQwLDcgQEAg
dm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5JbmRleAogICAgIC8vIEFSSUEgMS4x
J3MgYXJpYS1jb2xzcGFuIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBmb3IgY2VsbHMgYW5kIGdyaWRj
ZWxscyB3aGljaCBhcmUgbm90IGNvbnRhaW5lZAogICAgIC8vIGluIGEgbmF0aXZlIHRhYmxlLiBC
dXQgaWYgd2UgaGF2ZSBhIHZhbGlkIGF1dGhvci1wcm92aWRlZCB2YWx1ZSBhbmQgZG8gbm90IGhh
dmUgYW4gZXhwbGljaXQKICAgICAvLyBuYXRpdmUgaG9zdCBsYW5ndWFnZSB2YWx1ZSBmb3IgdGhl
IGNvbHNwYW4sIGV4cG9zZSB0aGUgQVJJQSB2YWx1ZS4KLSAgICBjb2x1bW5SYW5nZS5zZWNvbmQg
PSBhcmlhQ29sdW1uU3BhbigpOworICAgIGNvbHVtblJhbmdlLnNlY29uZCA9IGF4Q29sdW1uU3Bh
bigpOwogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGNvbHVtblJhbmdlLnNlY29uZCkgIT0gLTEp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMzgzLDY2ICszODQsNjYgQEAgQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVRhYmxlQwogICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdl
dE9yQ3JlYXRlKGhlYWRlckNlbGwpOwogfQogICAgIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OmFyaWFDb2x1bW5JbmRleCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6
YXhDb2x1bW5JbmRleCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2xJbmRl
eFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfY29saW5kZXhBdHRyKTsKLSAgICBpZiAoY29sSW5k
ZXhWYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiBjb2xJbmRleFZhbHVlLnRvSW50
KCk7CisgICAgdW5zaWduZWQgY29sSW5kZXhWYWx1ZSA9IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6Q29sSW5kZXgpOworICAgIGlmIChjb2xJbmRleFZhbHVlID49IDEp
CisgICAgICAgIHJldHVybiBjb2xJbmRleFZhbHVlOwogICAgIAogICAgIC8vICJBUklBIDEuMTog
SWYgdGhlIHNldCBvZiBjb2x1bW5zIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIERPTSBpcyBjb250
aWd1b3VzLCBhbmQgaWYgdGhlcmUgYXJlIG5vIGNlbGxzIHdoaWNoIHNwYW4gbW9yZSB0aGFuIG9u
ZSByb3cKICAgICAvLyBvciBjb2x1bW4gaW4gdGhhdCBzZXQsIHRoZW4gYXV0aG9ycyBtYXkgcGxh
Y2UgYXJpYS1jb2xpbmRleCBvbiBlYWNoIHJvdywgc2V0dGluZyB0aGUgdmFsdWUgdG8gdGhlIGlu
ZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHNldC4iCiAgICAgLy8gSGVyZSwgd2UgbGV0
IGl0cyBwYXJlbnQgcm93IHRvIHNldCBpdHMgaW5kZXggYmVmb3JlaGFuZCwgc28gd2UgZG9uJ3Qg
aGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzaWJsaW5ncyB0byBjYWxjdWxhdGUgdGhlIGluZGV4Lgog
ICAgIEFjY2Vzc2liaWxpdHlUYWJsZVJvdyogcGFyZW50Um93ID0gdGhpcy0+cGFyZW50Um93KCk7
Ci0gICAgaWYgKHBhcmVudFJvdyAmJiBtX2FyaWFDb2xJbmRleEZyb21Sb3cgIT0gLTEpCi0gICAg
ICAgIHJldHVybiBtX2FyaWFDb2xJbmRleEZyb21Sb3c7CisgICAgaWYgKHBhcmVudFJvdyAmJiBt
X2F4Q29sSW5kZXhGcm9tUm93ICE9IC0xKQorICAgICAgICByZXR1cm4gbV9heENvbEluZGV4RnJv
bVJvdzsKICAgICAKICAgICByZXR1cm4gLTE7CiB9CiAgICAgCi1pbnQgQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbDo6YXJpYVJvd0luZGV4KCkgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
OjpheFJvd0luZGV4KCkgY29uc3QKIHsKICAgICAvLyBBUklBIDEuMTogQXV0aG9ycyBzaG91bGQg
cGxhY2UgYXJpYS1yb3dpbmRleCBvbiBlYWNoIHJvdy4gQXV0aG9ycyBtYXkgYWxzbyBwbGFjZQog
ICAgIC8vIGFyaWEtcm93aW5kZXggb24gYWxsIG9mIHRoZSBjaGlsZHJlbiBvciBvd25lZCBlbGVt
ZW50cyBvZiBlYWNoIHJvdy4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJvd0luZGV4VmFsdWUg
PSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3dpbmRleEF0dHIpOwotICAgIGlmIChyb3dJbmRleFZhbHVl
LnRvSW50KCkgPj0gMSkKLSAgICAgICAgcmV0dXJuIHJvd0luZGV4VmFsdWUudG9JbnQoKTsKKyAg
ICB1bnNpZ25lZCByb3dJbmRleFZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpSb3dJbmRleCk7CisgICAgaWYgKHJvd0luZGV4VmFsdWUgPj0gMSkKKyAgICAg
ICAgcmV0dXJuIHJvd0luZGV4VmFsdWU7CiAgICAgCiAgICAgaWYgKEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdyogcGFyZW50Um93ID0gdGhpcy0+cGFyZW50Um93KCkpCi0gICAgICAgIHJldHVybiBwYXJl
bnRSb3ctPmFyaWFSb3dJbmRleCgpOworICAgICAgICByZXR1cm4gcGFyZW50Um93LT5heFJvd0lu
ZGV4KCk7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbDo6YXJpYUNvbHVtblNwYW4oKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OmF4Q29sdW1uU3BhbigpIGNvbnN0CiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBBUklBIHNw
ZWMsICJJZiBhcmlhLWNvbHBhbiBpcyB1c2VkIG9uIGFuIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBo
b3N0IGxhbmd1YWdlCiAgICAgLy8gcHJvdmlkZXMgYW4gZXF1aXZhbGVudCBhdHRyaWJ1dGUsIHVz
ZXIgYWdlbnRzIG11c3QgaWdub3JlIHRoZSB2YWx1ZSBvZiBhcmlhLWNvbHNwYW4uIgogICAgIGlm
IChoYXNBdHRyaWJ1dGUoY29sc3BhbkF0dHIpKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGNvbFNwYW5WYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX2NvbHNw
YW5BdHRyKTsKKyAgICB1bnNpZ25lZCBjb2xTcGFuVmFsdWUgPSB1bnNpZ25lZFZhbHVlRm9yUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbFNwYW4pOwogICAgIC8vIEFSSUEgMS4xOiBBdXRob3Jz
IG11c3Qgc2V0IHRoZSB2YWx1ZSBvZiBhcmlhLWNvbHNwYW4gdG8gYW4gaW50ZWdlciBncmVhdGVy
IHRoYW4gb3IgZXF1YWwgdG8gMS4KLSAgICBpZiAoY29sU3BhblZhbHVlLnRvSW50KCkgPj0gMSkK
LSAgICAgICAgcmV0dXJuIGNvbFNwYW5WYWx1ZS50b0ludCgpOworICAgIGlmIChjb2xTcGFuVmFs
dWUgPj0gMSkKKyAgICAgICAgcmV0dXJuIGNvbFNwYW5WYWx1ZTsKICAgICAKICAgICByZXR1cm4g
LTE7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhUm93U3BhbigpIGNvbnN0
CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dTcGFuKCkgY29uc3QKIHsKICAgICAv
LyBBY2NvcmRpbmcgdG8gdGhlIEFSSUEgc3BlYywgIklmIGFyaWEtcm93c3BhbiBpcyB1c2VkIG9u
IGFuIGVsZW1lbnQgZm9yIHdoaWNoIHRoZSBob3N0IGxhbmd1YWdlCiAgICAgLy8gcHJvdmlkZXMg
YW4gZXF1aXZhbGVudCBhdHRyaWJ1dGUsIHVzZXIgYWdlbnRzIG11c3QgaWdub3JlIHRoZSB2YWx1
ZSBvZiBhcmlhLXJvd3NwYW4uIgogICAgIGlmIChoYXNBdHRyaWJ1dGUocm93c3BhbkF0dHIpKQog
ICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJvd1NwYW5WYWx1
ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3Jvd3NwYW5BdHRyKTsKKyAgICB1bnNpZ25lZCByb3dTcGFu
VmFsdWUgPSB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd1NwYW4p
OwogICAgIAogICAgIC8vIEFSSUEgMS4xOiBBdXRob3JzIG11c3Qgc2V0IHRoZSB2YWx1ZSBvZiBh
cmlhLXJvd3NwYW4gdG8gYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMC4KICAg
ICAvLyBTZXR0aW5nIHRoZSB2YWx1ZSB0byAwIGluZGljYXRlcyB0aGF0IHRoZSBjZWxsIG9yIGdy
aWRjZWxsIGlzIHRvIHNwYW4gYWxsIHRoZSByZW1haW5pbmcgcm93cyBpbiB0aGUgcm93IGdyb3Vw
LgotICAgIGlmIChyb3dTcGFuVmFsdWUgPT0gIjAiKQorICAgIGlmIChoYXNQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6Um93U3BhbikgJiYgIXJvd1NwYW5WYWx1ZSkKICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKHJvd1NwYW5WYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiByb3dT
cGFuVmFsdWUudG9JbnQoKTsKKyAgICBpZiAocm93U3BhblZhbHVlID49IDEpCisgICAgICAgIHJl
dHVybiByb3dTcGFuVmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxs
LmgJKHJldmlzaW9uIDIyNDk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgY29sdW1uSGVhZGVycyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImKTsKICAgICB2b2lkIHJvd0hlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7
CiAgICAgCi0gICAgaW50IGFyaWFDb2x1bW5JbmRleCgpIGNvbnN0OwotICAgIGludCBhcmlhUm93
SW5kZXgoKSBjb25zdDsKLSAgICBpbnQgYXJpYUNvbHVtblNwYW4oKSBjb25zdDsKLSAgICBpbnQg
YXJpYVJvd1NwYW4oKSBjb25zdDsKLSAgICB2b2lkIHNldEFSSUFDb2xJbmRleEZyb21Sb3coaW50
IGluZGV4KSB7IG1fYXJpYUNvbEluZGV4RnJvbVJvdyA9IGluZGV4OyB9CisgICAgaW50IGF4Q29s
dW1uSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgYXhSb3dJbmRleCgpIGNvbnN0OworICAgIGludCBh
eENvbHVtblNwYW4oKSBjb25zdDsKKyAgICBpbnQgYXhSb3dTcGFuKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRBWENvbEluZGV4RnJvbVJvdyhpbnQgaW5kZXgpIHsgbV9heENvbEluZGV4RnJvbVJvdyA9
IGluZGV4OyB9CiAKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsKFJlbmRlck9iamVjdCopOwpAQCAtNjcsNyArNjcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgQWNj
ZXNzaWJpbGl0eVJvbGUgZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKSBmaW5hbDsKIAogICAg
IGludCBtX3Jvd0luZGV4OwotICAgIGludCBtX2FyaWFDb2xJbmRleEZyb21Sb3c7CisgICAgaW50
IG1fYXhDb2xJbmRleEZyb21Sb3c7CiAKIHByaXZhdGU6CiAgICAgLy8gSWYgYSB0YWJsZSBjZWxs
IGlzIG5vdCBleHBvc2VkIGFzIGEgdGFibGUgY2VsbCwgYSBUSCBlbGVtZW50IGNhbiBzZXJ2ZSBh
cyBpdHMgdGl0bGUgVUkgZWxlbWVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDIyNDk5
MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsLmgiCisjaW5jbHVkZSAiQWNjZXNzaWJsZU5vZGUuaCIKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCkBAIC0xNDEsMzQgKzE0MiwzNCBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlUYWJsZVJvdzo6YWRkQ2hpbGRyZW4oCiAgICAgCiAgICAgLy8gIkFSSUEgMS4xLCBJZiB0
aGUgc2V0IG9mIGNvbHVtbnMgd2hpY2ggaXMgcHJlc2VudCBpbiB0aGUgRE9NIGlzIGNvbnRpZ3Vv
dXMsIGFuZCBpZiB0aGVyZSBhcmUgbm8gY2VsbHMgd2hpY2ggc3BhbiBtb3JlIHRoYW4gb25lIHJv
dyBvcgogICAgIC8vIGNvbHVtbiBpbiB0aGF0IHNldCwgdGhlbiBhdXRob3JzIG1heSBwbGFjZSBh
cmlhLWNvbGluZGV4IG9uIGVhY2ggcm93LCBzZXR0aW5nIHRoZSB2YWx1ZSB0byB0aGUgaW5kZXgg
b2YgdGhlIGZpcnN0IGNvbHVtbiBvZiB0aGUgc2V0LiIKLSAgICAvLyBVcGRhdGUgY2hpbGQgY2Vs
bHMnIGFyaWFDb2xJbmRleCBpZiB0aGVyZSdzIGFuIGFyaWEtY29saW5kZXggdmFsdWUgc2V0IGZv
ciB0aGUgcm93LiBTbyB0aGUgY2VsbCBkb2Vzbid0IGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgc2li
bGluZ3MKKyAgICAvLyBVcGRhdGUgY2hpbGQgY2VsbHMnIGF4Q29sSW5kZXggaWYgdGhlcmUncyBh
biBhcmlhLWNvbGluZGV4IHZhbHVlIHNldCBmb3IgdGhlIHJvdy4gU28gdGhlIGNlbGwgZG9lc24n
dCBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNpYmxpbmdzCiAgICAgLy8gdG8gY2FsY3VsYXRlIHRo
ZSBpbmRleC4KLSAgICBpbnQgY29sSW5kZXggPSBhcmlhQ29sdW1uSW5kZXgoKTsKKyAgICBpbnQg
Y29sSW5kZXggPSBheENvbHVtbkluZGV4KCk7CiAgICAgaWYgKGNvbEluZGV4ID09IC0xKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwogICAgIGZvciAoY29u
c3QgYXV0byYgY2VsbCA6IGNoaWxkcmVuKCkpIHsKICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpjZWxsKSkKLSAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw+KCpjZWxsKS5zZXRBUklBQ29sSW5kZXhGcm9tUm93KGNvbEluZGV4ICsgaW5kZXgp
OworICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNlbGwpLnNl
dEFYQ29sSW5kZXhGcm9tUm93KGNvbEluZGV4ICsgaW5kZXgpOwogICAgICAgICBpbmRleCsrOwog
ICAgIH0KIH0KIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXJpYUNvbHVtbkluZGV4KCkg
Y29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmF4Q29sdW1uSW5kZXgoKSBjb25zdAog
ewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29sSW5kZXhWYWx1ZSA9IGdldEF0dHJpYnV0ZShh
cmlhX2NvbGluZGV4QXR0cik7Ci0gICAgaWYgKGNvbEluZGV4VmFsdWUudG9JbnQoKSA+PSAxKQot
ICAgICAgICByZXR1cm4gY29sSW5kZXhWYWx1ZS50b0ludCgpOworICAgIHVuc2lnbmVkIGNvbElu
ZGV4VmFsdWUgPSB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbElu
ZGV4KTsKKyAgICBpZiAoY29sSW5kZXhWYWx1ZSA+PSAxKQorICAgICAgICByZXR1cm4gY29sSW5k
ZXhWYWx1ZTsKICAgICAKICAgICByZXR1cm4gLTE7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFi
bGVSb3c6OmFyaWFSb3dJbmRleCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojph
eFJvd0luZGV4KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJvd0luZGV4VmFs
dWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3dpbmRleEF0dHIpOwotICAgIGlmIChyb3dJbmRleFZh
bHVlLnRvSW50KCkgPj0gMSkKLSAgICAgICAgcmV0dXJuIHJvd0luZGV4VmFsdWUudG9JbnQoKTsK
KyAgICB1bnNpZ25lZCByb3dJbmRleFZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpSb3dJbmRleCk7CisgICAgaWYgKHJvd0luZGV4VmFsdWUgPj0gMSkKKyAg
ICAgICAgcmV0dXJuIHJvd0luZGV4VmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlU
YWJsZVJvdy5oCShyZXZpc2lvbiAyMjQ5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw4ICs1Miw4
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZENoaWxkcmVuKCkgb3ZlcnJpZGU7CiAgICAg
Ci0gICAgaW50IGFyaWFDb2x1bW5JbmRleCgpIGNvbnN0OwotICAgIGludCBhcmlhUm93SW5kZXgo
KSBjb25zdDsKKyAgICBpbnQgYXhDb2x1bW5JbmRleCgpIGNvbnN0OworICAgIGludCBheFJvd0lu
ZGV4KCkgY29uc3Q7CiAgICAgCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0
eVRhYmxlUm93KFJlbmRlck9iamVjdCopOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5jcHAJKHJldmlzaW9uIDIyNDk5MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw5IEBAIHN0YXRpYyBBUklBQXR0cmlidXRlTWFwJiBhcmlhQXR0cmlidXRl
TWEKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkF1dG9jb21wbGV0ZSwgYXJpYV9hdXRv
Y29tcGxldGVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpCdXN5LCBhcmlh
X2J1c3lBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDaGVja2VkLCBhcmlh
X2NoZWNrZWRBdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCwg
YXJpYV9jb2xjb3VudEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkNvbElu
ZGV4LCBhcmlhX2NvbGluZGV4QXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6
Q29sU3BhbiwgYXJpYV9jb2xzcGFuQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFt
ZTo6Q3VycmVudCwgYXJpYV9jdXJyZW50QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5
TmFtZTo6RGlzYWJsZWQsIGFyaWFfZGlzYWJsZWRBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJv
cGVydHlOYW1lOjpFeHBhbmRlZCwgYXJpYV9leHBhbmRlZEF0dHIgfSwKQEAgLTU3LDIwICs2MCwy
OSBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAgICAgICAgICAg
ICB7IEFYUHJvcGVydHlOYW1lOjpJbnZhbGlkLCBhcmlhX2ludmFsaWRBdHRyIH0sCiAgICAgICAg
ICAgICB7IEFYUHJvcGVydHlOYW1lOjpLZXlTaG9ydGN1dHMsIGFyaWFfa2V5c2hvcnRjdXRzQXR0
ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6TGFiZWwsIGFyaWFfbGFiZWxBdHRy
IH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpMZXZlbCwgYXJpYV9sZXZlbEF0dHIg
fSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkxpdmUsIGFyaWFfbGl2ZUF0dHIgfSwK
ICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6Ok1vZGFsLCBhcmlhX21vZGFsQXR0ciB9LAog
ICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6TXVsdGlsaW5lLCBhcmlhX211bHRpbGluZUF0
dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSwgYXJp
YV9tdWx0aXNlbGVjdGFibGVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpP
cmllbnRhdGlvbiwgYXJpYV9vcmllbnRhdGlvbkF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9w
ZXJ0eU5hbWU6OlBsYWNlaG9sZGVyLCBhcmlhX3BsYWNlaG9sZGVyQXR0ciB9LAorICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQsIGFyaWFfcG9zaW5zZXRBdHRyIH0sCiAgICAg
ICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpQcmVzc2VkLCBhcmlhX3ByZXNzZWRBdHRyIH0sCiAg
ICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpSZWFkT25seSwgYXJpYV9yZWFkb25seUF0dHIg
fSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJlbGV2YW50LCBhcmlhX3JlbGV2YW50
QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6UmVxdWlyZWQsIGFyaWFfcmVx
dWlyZWRBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpSb2xlLCByb2xlQXR0
ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Um9sZURlc2NyaXB0aW9uLCBhcmlh
X3JvbGVkZXNjcmlwdGlvbkF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJv
d0NvdW50LCBhcmlhX3Jvd2NvdW50QXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFt
ZTo6Um93SW5kZXgsIGFyaWFfcm93aW5kZXhBdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVy
dHlOYW1lOjpSb3dTcGFuLCBhcmlhX3Jvd3NwYW5BdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJv
cGVydHlOYW1lOjpTZWxlY3RlZCwgYXJpYV9zZWxlY3RlZEF0dHIgfSwKKyAgICAgICAgICAgIHsg
QVhQcm9wZXJ0eU5hbWU6OlNldFNpemUsIGFyaWFfc2V0c2l6ZUF0dHIgfSwKICAgICAgICAgICAg
IHsgQVhQcm9wZXJ0eU5hbWU6OlNvcnQsIGFyaWFfc29ydEF0dHIgfSwKKyAgICAgICAgICAgIHsg
QVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4LCBhcmlhX3ZhbHVlbWF4QXR0ciB9LAorICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6VmFsdWVNaW4sIGFyaWFfdmFsdWVtaW5BdHRyIH0sCisgICAg
ICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdywgYXJpYV92YWx1ZW5vd0F0dHIgfSwK
ICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlVGV4dCwgYXJpYV92YWx1ZXRleHRB
dHRyIH0KICAgICAgICAgfTsKICAgICAgICAgQVJJQUF0dHJpYnV0ZU1hcCBtYXA7CkBAIC0xMjYs
NiArMTM4LDQ1IEBAIHN0YXRpYyBib29sIGlzUHJvcGVydHlWYWx1ZUJvb2xlYW4oQVhQcm8KICAg
ICB9CiB9CiAKK3N0YXRpYyBib29sIGlzUHJvcGVydHlWYWx1ZUludChBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWUpIHsKKyAgICBjYXNlIEFY
UHJvcGVydHlOYW1lOjpDb2xDb3VudDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpSb3dDb3Vu
dDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpTZXRTaXplOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0
aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVVbnNpZ25lZChBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWUpIHsKKyAgICBjYXNlIEFYUHJvcGVydHlO
YW1lOjpDb2xJbmRleDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuOgorICAgIGNh
c2UgQVhQcm9wZXJ0eU5hbWU6OkxldmVsOgorICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlBvc0lu
U2V0OgorICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4OgorICAgIGNhc2UgQVhQcm9w
ZXJ0eU5hbWU6OlJvd1NwYW46CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGlzUHJvcGVydHlW
YWx1ZUZsb2F0KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5TmFtZSkgeworICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4OgorICAgIGNh
c2UgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluOgorICAgIGNhc2UgQVhQcm9wZXJ0eU5hbWU6OlZh
bHVlTm93OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCiBib29sIEFjY2Vzc2libGVOb2RlOjpoYXNQcm9wZXJ0eShF
bGVtZW50JiBlbGVtZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgaWYg
KGF1dG8qIGFjY2Vzc2libGVOb2RlID0gZWxlbWVudC5leGlzdGluZ0FjY2Vzc2libGVOb2RlKCkp
IHsKQEAgLTE0OSw2ICsyMDAsMTUgQEAgY29uc3QgUHJvcGVydHlWYWx1ZVZhcmlhbnQgQWNjZXNz
aWJsZU5vZAogICAgIHJldHVybiBudWxscHRyOwogfQogCit2b2lkIEFjY2Vzc2libGVOb2RlOjpz
ZXRQcm9wZXJ0eShib29sIHNob3VsZFJlbW92ZSwgUHJvcGVydHlWYWx1ZVZhcmlhbnQmJiB2YWx1
ZSwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChzaG91bGRSZW1vdmUp
IHsKKyAgICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVydHlOYW1lKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBtX3Byb3BlcnR5TWFwLnNldChwcm9wZXJ0eU5hbWUsIHZhbHVl
KTsKK30KKwogY29uc3QgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVTdHJpbmdWYWx1
ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KGVs
ZW1lbnQsIHByb3BlcnR5TmFtZSk7CkBAIC0xNjksMTggKzIyOSwyMCBAQCBjb25zdCBTdHJpbmcg
QWNjZXNzaWJsZU5vZGU6OnN0cmluZ1ZhbHVlCiAgICAgcmV0dXJuIG51bGxBdG9tKCk7CiB9CiAK
LXZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFN0cmluZ1Byb3BlcnR5KGNvbnN0IFN0cmluZyYgdmFs
dWUsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citz
dGQ6Om9wdGlvbmFsPFQ+IEFjY2Vzc2libGVOb2RlOjpvcHRpb25hbFZhbHVlRm9yUHJvcGVydHko
RWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIGlm
ICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wcm9wZXJ0eU1hcC5yZW1vdmUocHJvcGVy
dHlOYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3Byb3BlcnR5TWFwLnNldChw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKKyAgICBjb25zdCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZh
cmlhbnQgPSBBY2Nlc3NpYmxlTm9kZTo6dmFsdWVGb3JQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0
eU5hbWUpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pih2
YXJpYW50KSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBpZiAoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxUPih2YXJpYW50KSkKKyAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFQ+KHZh
cmlhbnQpOworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYg
ZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gdmFsdWUgPSBib29sVmFsdWVGb3JQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5h
bWUpOworICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUgPSBvcHRpb25hbFZhbHVlRm9yUHJv
cGVydHk8Ym9vbD4oZWxlbWVudCwgcHJvcGVydHlOYW1lKTsKICAgICBpZiAodmFsdWUpCiAgICAg
ICAgIHJldHVybiAqdmFsdWU7CiAKQEAgLTE5NSwyMyArMjU3LDQwIEBAIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OmVmZmUKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQog
Ci1zdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjpib29sVmFsdWVGb3JQcm9wZXJ0
eShFbGVtZW50JiBlbGVtZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitpbnQgQWNj
ZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUludFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50
LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgY29uc3QgUHJvcGVydHlWYWx1
ZVZhcmlhbnQmJiB2YXJpYW50ID0gQWNjZXNzaWJsZU5vZGU6OnZhbHVlRm9yUHJvcGVydHkoZWxl
bWVudCwgcHJvcGVydHlOYW1lKTsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6
Om51bGxwdHJfdD4odmFyaWFudCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Ym9vbD4odmFyaWFudCkpCi0gICAgICAgIHJldHVy
biBXVEY6OmdldDxib29sPih2YXJpYW50KTsKLSAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAg
IHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxpbnQ+
KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICByZXR1cm4g
KnZhbHVlOworCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250YWlucyhwcm9wZXJ0eU5h
bWUpICYmIGlzUHJvcGVydHlWYWx1ZUludChwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1cm4g
ZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRyaWJ1dGVNYXAo
KS5nZXQocHJvcGVydHlOYW1lKSkudG9JbnQoKTsKKworICAgIHJldHVybiAwOwogfQogCi12b2lk
IEFjY2Vzc2libGVOb2RlOjpzZXRCb29sUHJvcGVydHkoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1
ZSwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQordW5zaWduZWQgQWNjZXNzaWJsZU5vZGU6
OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAgICAgIG1f
cHJvcGVydHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9wcm9wZXJ0eU1hcC5zZXQocHJvcGVydHlOYW1lLCAqdmFsdWUpOworICAgIHN0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlID0gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2ln
bmVkPihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0
dXJuICp2YWx1ZTsKKworICAgIGlmIChhcmlhQXR0cmlidXRlTWFwKCkuY29udGFpbnMocHJvcGVy
dHlOYW1lKSAmJiBpc1Byb3BlcnR5VmFsdWVVbnNpZ25lZChwcm9wZXJ0eU5hbWUpKQorICAgICAg
ICByZXR1cm4gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRy
aWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1lKSkudG9JbnQoKTsKKworICAgIHJldHVybiAwOwor
fQorCitmbG9hdCBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRmxvYXRWYWx1ZUZvckVsZW1lbnQo
RWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHN0
ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxkb3Vi
bGU+KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICByZXR1
cm4gKnZhbHVlOworCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250YWlucyhwcm9wZXJ0
eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZUZsb2F0KHByb3BlcnR5TmFtZSkpCisgICAgICAgIHJl
dHVybiBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYUF0dHJpYnV0
ZU1hcCgpLmdldChwcm9wZXJ0eU5hbWUpKS50b0Zsb2F0KCk7CisKKyAgICByZXR1cm4gMC4wZjsK
IH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6bm90aWZ5QXR0cmlidXRlQ2hhbmdlZChjb25zdCBX
ZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBuYW1lKQpAQCAtMjIyLDEyICszMDEsMTIgQEAgdm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6bm90aWZ5QXR0cmlidXRlQ2hhbgogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+
IEFjY2Vzc2libGVOb2RlOjphdG9taWMoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVG
b3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYyk7CisgICAg
cmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OkF0b21pYyk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEF0b21p
YyhzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1
ZSwgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYyk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192
YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6QXRvbWljKTsKICAgICBub3Rp
ZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfYXRvbWljQXR0cik7CiB9CiAKQEAgLTIzOCwxOCArMzE3
LDE4IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6YXV0b2NvbXBsZXRlKCkgY28KIAogdm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0QXV0b2NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYXV0b2NvbXBsZXRl
KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGF1dG9jb21wbGV0ZSwgQVhQcm9wZXJ0eU5hbWU6
OkF1dG9jb21wbGV0ZSk7CisgICAgc2V0UHJvcGVydHkoYXV0b2NvbXBsZXRlLmlzRW1wdHkoKSwg
YXV0b2NvbXBsZXRlLCBBWFByb3BlcnR5TmFtZTo6QXV0b2NvbXBsZXRlKTsKICAgICBub3RpZnlB
dHRyaWJ1dGVDaGFuZ2VkKGFyaWFfYXV0b2NvbXBsZXRlQXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OmJ1c3koKSBjb25zdAogewotICAgIHJldHVybiBib29s
VmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkJ1c3kpOwor
ICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lOjpCdXN5KTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0QnVz
eShzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1
ZSwgQVhQcm9wZXJ0eU5hbWU6OkJ1c3kpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFs
dWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OkJ1c3kpOwogICAgIG5vdGlmeUF0
dHJpYnV0ZUNoYW5nZWQoYXJpYV9idXN5QXR0cik7CiB9CiAKQEAgLTI2MCwxMCArMzM5LDQzIEBA
IFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6Y2hlY2tlZCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJs
ZU5vZGU6OnNldENoZWNrZWQoY29uc3QgU3RyaW5nJiBjaGVja2VkKQogewotICAgIHNldFN0cmlu
Z1Byb3BlcnR5KGNoZWNrZWQsIEFYUHJvcGVydHlOYW1lOjpDaGVja2VkKTsKKyAgICBzZXRQcm9w
ZXJ0eShjaGVja2VkLmlzRW1wdHkoKSwgY2hlY2tlZCwgQVhQcm9wZXJ0eU5hbWU6OkNoZWNrZWQp
OwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jaGVja2VkQXR0cik7CiB9CiAKK3N0
ZDo6b3B0aW9uYWw8aW50PiBBY2Nlc3NpYmxlTm9kZTo6Y29sQ291bnQoKSBjb25zdAoreworICAg
IHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8aW50PihtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OkNvbENvdW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0Q29s
Q291bnQoc3RkOjpvcHRpb25hbDxpbnQ+IHZhbHVlKQoreworICAgIHNldFByb3BlcnR5KCF2YWx1
ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50KTsK
KyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY29sY291bnRBdHRyKTsKK30KKworc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OmNvbEluZGV4KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihtX293bmVyRWxl
bWVudCwgQVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9k
ZTo6c2V0Q29sSW5kZXgoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7CisgICAgc2V0
UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFt
ZTo6Q29sSW5kZXgpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jb2xpbmRleEF0
dHIpOworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6Y29sU3Bh
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25l
ZD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKK30KKwordm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0Q29sU3BhbihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkK
K3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFY
UHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFf
Y29sc3BhbkF0dHIpOworfQorCiBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmN1cnJlbnQoKSBjb25z
dAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBB
WFByb3BlcnR5TmFtZTo6Q3VycmVudCk7CkBAIC0yNzEsMjkgKzM4MywyOSBAQCBTdHJpbmcgQWNj
ZXNzaWJsZU5vZGU6OmN1cnJlbnQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRD
dXJyZW50KGNvbnN0IFN0cmluZyYgY3VycmVudCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShj
dXJyZW50LCBBWFByb3BlcnR5TmFtZTo6Q3VycmVudCk7CisgICAgc2V0UHJvcGVydHkoY3VycmVu
dC5pc0VtcHR5KCksIGN1cnJlbnQsIEFYUHJvcGVydHlOYW1lOjpDdXJyZW50KTsKICAgICBub3Rp
ZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY3VycmVudEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PGJvb2w+IEFjY2Vzc2libGVOb2RlOjpkaXNhYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJv
b2xWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6RGlzYWJs
ZWQpOworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpEaXNhYmxlZCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5v
ZGU6OnNldERpc2FibGVkKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9v
bFByb3BlcnR5KHZhbHVlLCBBWFByb3BlcnR5TmFtZTo6RGlzYWJsZWQpOworICAgIHNldFByb3Bl
cnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OkRp
c2FibGVkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfZGlzYWJsZWRBdHRyKTsK
IH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6ZXhwYW5kZWQoKSBjb25z
dAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OkV4cGFuZGVkKTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3Bl
cnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWQpOwogfQog
CiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRFeHBhbmRlZChzdGQ6Om9wdGlvbmFsPGJvb2w+IHZh
bHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OkV4cGFu
ZGVkKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCks
IEFYUHJvcGVydHlOYW1lOjpFeHBhbmRlZCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChh
cmlhX2V4cGFuZGVkQXR0cik7CiB9CiAKQEAgLTMwNCwxOCArNDE2LDE4IEBAIFN0cmluZyBBY2Nl
c3NpYmxlTm9kZTo6aGFzUG9wVXAoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRI
YXNQb3BVcChjb25zdCBTdHJpbmcmIGhhc1BvcFVwKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5
KGhhc1BvcFVwLCBBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXApOworICAgIHNldFByb3BlcnR5KGhh
c1BvcFVwLmlzRW1wdHkoKSwgaGFzUG9wVXAsIEFYUHJvcGVydHlOYW1lOjpIYXNQb3BVcCk7CiAg
ICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2hhc3BvcHVwQXR0cik7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OmhpZGRlbigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGJvb2xWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
SGlkZGVuKTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3du
ZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6SGlkZGVuKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxl
Tm9kZTo6c2V0SGlkZGVuKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9v
bFByb3BlcnR5KHZhbHVlLCBBWFByb3BlcnR5TmFtZTo6SGlkZGVuKTsKKyAgICBzZXRQcm9wZXJ0
eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpIaWRk
ZW4pOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9oaWRkZW5BdHRyKTsKIH0KIApA
QCAtMzI2LDcgKzQzOCw3IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6aW52YWxpZCgpIGNvbnN0
CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEludmFsaWQoY29uc3QgU3RyaW5nJiBpbnZhbGlk
KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGludmFsaWQsIEFYUHJvcGVydHlOYW1lOjpJbnZh
bGlkKTsKKyAgICBzZXRQcm9wZXJ0eShpbnZhbGlkLmlzRW1wdHkoKSwgaW52YWxpZCwgQVhQcm9w
ZXJ0eU5hbWU6OkludmFsaWQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9pbnZh
bGlkQXR0cik7CiB9CiAKQEAgLTMzNyw2MiArNDQ5LDczIEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9k
ZTo6a2V5U2hvcnRjdXRzKCkgY28KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0S2V5U2hvcnRj
dXRzKGNvbnN0IFN0cmluZyYga2V5U2hvcnRjdXRzKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5
KGtleVNob3J0Y3V0cywgQVhQcm9wZXJ0eU5hbWU6OktleVNob3J0Y3V0cyk7CisgICAgc2V0UHJv
cGVydHkoa2V5U2hvcnRjdXRzLmlzRW1wdHkoKSwga2V5U2hvcnRjdXRzLCBBWFByb3BlcnR5TmFt
ZTo6S2V5U2hvcnRjdXRzKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfa2V5c2hv
cnRjdXRzQXR0cik7CiB9CiAKLVN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6bGl2ZSgpIGNvbnN0CitT
dHJpbmcgQWNjZXNzaWJsZU5vZGU6OmxhYmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RyaW5n
VmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkxpdmUpOwor
ICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3Bl
cnR5TmFtZTo6TGFiZWwpOwogfQogCi12b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMaXZlKGNvbnN0
IFN0cmluZyYgbGl2ZSkKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldExhYmVsKGNvbnN0IFN0cmlu
ZyYgbGFiZWwpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkobGl2ZSwgQVhQcm9wZXJ0eU5hbWU6
OkxpdmUpOwotICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9saXZlQXR0cik7CisgICAg
c2V0UHJvcGVydHkobGFiZWwuaXNFbXB0eSgpLCBsYWJlbCwgQVhQcm9wZXJ0eU5hbWU6OkxhYmVs
KTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGFiZWxBdHRyKTsKIH0KIAotU3Ry
aW5nIEFjY2Vzc2libGVOb2RlOjpsYWJlbCgpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiBBY2Nlc3NpYmxlTm9kZTo6bGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBzdHJpbmdWYWx1
ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TGFiZWwpOworICAg
IHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3duZXJFbGVtZW50
LCBBWFByb3BlcnR5TmFtZTo6TGV2ZWwpOwogfQogCi12b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRM
YWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGV2ZWwo
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHko
bGFiZWwsIEFYUHJvcGVydHlOYW1lOjpMYWJlbCk7Ci0gICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdl
ZChhcmlhX2xhYmVsQXR0cik7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2
YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6TGV2ZWwpOworICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV9sZXZlbEF0dHIpOworfQorCitTdHJpbmcgQWNjZXNzaWJsZU5vZGU6Omxp
dmUoKSBjb25zdAoreworICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJF
bGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TGl2ZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6
OnNldExpdmUoY29uc3QgU3RyaW5nJiBsaXZlKQoreworICAgIHNldFByb3BlcnR5KGxpdmUuaXNF
bXB0eSgpLCBsaXZlLCBBWFByb3BlcnR5TmFtZTo6TGl2ZSk7CisgICAgbm90aWZ5QXR0cmlidXRl
Q2hhbmdlZChhcmlhX2xpdmVBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3Np
YmxlTm9kZTo6bW9kYWwoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0
eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok1vZGFsKTsKKyAgICByZXR1cm4gb3B0
aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFt
ZTo6TW9kYWwpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRNb2RhbChzdGQ6Om9wdGlv
bmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0
eU5hbWU6Ok1vZGFsKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVl
LnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpNb2RhbCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hh
bmdlZChhcmlhX21vZGFsQXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJs
ZU5vZGU6Om11bHRpbGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclByb3Bl
cnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TXVsdGlsaW5lKTsKKyAgICByZXR1
cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3Bl
cnR5TmFtZTo6TXVsdGlsaW5lKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TXVsdGls
aW5lKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZh
bHVlLCBBWFByb3BlcnR5TmFtZTo6TXVsdGlsaW5lKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUu
aGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpNdWx0aWxpbmUpOwog
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9tdWx0aWxpbmVBdHRyKTsKIH0KIAogc3Rk
OjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6bXVsdGlzZWxlY3RhYmxlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9y
UHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpNdWx0aXNlbGVj
dGFibGUpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRNdWx0aXNlbGVjdGFibGUoc3Rk
OjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFY
UHJvcGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5o
YXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJs
ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX211bHRpc2VsZWN0YWJsZUF0dHIp
OwogfQogCkBAIC00MDMsNyArNTI2LDcgQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpvcmllbnRh
dGlvbigpIGNvbgogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRPcmllbnRhdGlvbihjb25zdCBT
dHJpbmcmIG9yaWVudGF0aW9uKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KG9yaWVudGF0aW9u
LCBBWFByb3BlcnR5TmFtZTo6T3JpZW50YXRpb24pOworICAgIHNldFByb3BlcnR5KG9yaWVudGF0
aW9uLmlzRW1wdHkoKSwgb3JpZW50YXRpb24sIEFYUHJvcGVydHlOYW1lOjpPcmllbnRhdGlvbik7
CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX29yaWVudGF0aW9uQXR0cik7CiB9CiAK
QEAgLTQxNCwxMCArNTM3LDIxIEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6cGxhY2Vob2xkZXIo
KSBjb24KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UGxhY2Vob2xkZXIoY29uc3QgU3RyaW5n
JiBwbGFjZWhvbGRlcikKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShwbGFjZWhvbGRlciwgQVhQ
cm9wZXJ0eU5hbWU6OlBsYWNlaG9sZGVyKTsKKyAgICBzZXRQcm9wZXJ0eShwbGFjZWhvbGRlci5p
c0VtcHR5KCksIHBsYWNlaG9sZGVyLCBBWFByb3BlcnR5TmFtZTo6UGxhY2Vob2xkZXIpOwogICAg
IG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9wbGFjZWhvbGRlckF0dHIpOwogfQogCitzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6cG9zSW5TZXQoKSBjb25zdAorewor
ICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3duZXJFbGVt
ZW50LCBBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2Rl
OjpzZXRQb3NJblNldChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sKKyAgICBzZXRQ
cm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1l
OjpQb3NJblNldCk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Bvc2luc2V0QXR0
cik7Cit9CisKIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6cHJlc3NlZCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlO
YW1lOjpQcmVzc2VkKTsKQEAgLTQyNSwxOCArNTU5LDE4IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9k
ZTo6cHJlc3NlZCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFByZXNzZWQoY29u
c3QgU3RyaW5nJiBwcmVzc2VkKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHByZXNzZWQsIEFY
UHJvcGVydHlOYW1lOjpQcmVzc2VkKTsKKyAgICBzZXRQcm9wZXJ0eShwcmVzc2VkLmlzRW1wdHko
KSwgcHJlc3NlZCwgQVhQcm9wZXJ0eU5hbWU6OlByZXNzZWQpOwogICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV9wcmVzc2VkQXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNj
ZXNzaWJsZU5vZGU6OnJlYWRPbmx5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9y
UHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSZWFkT25seSk7CisgICAg
cmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OlJlYWRPbmx5KTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UmVh
ZE9ubHkoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHko
dmFsdWUsIEFYUHJvcGVydHlOYW1lOjpSZWFkT25seSk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVl
Lmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHkpOwog
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yZWFkb25seUF0dHIpOwogfQogCkBAIC00
NDcsMTggKzU4MSwxOCBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnJlbGV2YW50KCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UmVsZXZhbnQoY29uc3QgU3RyaW5nJiByZWxldmFu
dCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShyZWxldmFudCwgQVhQcm9wZXJ0eU5hbWU6OlJl
bGV2YW50KTsKKyAgICBzZXRQcm9wZXJ0eShyZWxldmFudC5pc0VtcHR5KCksIHJlbGV2YW50LCBB
WFByb3BlcnR5TmFtZTo6UmVsZXZhbnQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJp
YV9yZWxldmFudEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2Rl
OjpyZXF1aXJlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclByb3BlcnR5KG1f
b3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UmVxdWlyZWQpOworICAgIHJldHVybiBvcHRp
b25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpSZXF1aXJlZCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJlcXVpcmVkKHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZhbHVlLCBBWFBy
b3BlcnR5TmFtZTo6UmVxdWlyZWQpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUo
KSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OlJlcXVpcmVkKTsKICAgICBub3RpZnlB
dHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcmVxdWlyZWRBdHRyKTsKIH0KIApAQCAtNDY5LDcgKzYwMyw3
IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6cm9sZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJs
ZU5vZGU6OnNldFJvbGUoY29uc3QgU3RyaW5nJiByb2xlKQogewotICAgIHNldFN0cmluZ1Byb3Bl
cnR5KHJvbGUsIEFYUHJvcGVydHlOYW1lOjpSb2xlKTsKKyAgICBzZXRQcm9wZXJ0eShyb2xlLmlz
RW1wdHkoKSwgcm9sZSwgQVhQcm9wZXJ0eU5hbWU6OlJvbGUpOwogICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQocm9sZUF0dHIpOwogfQogCkBAIC00ODAsMjEgKzYxNCw2NSBAQCBTdHJpbmcgQWNj
ZXNzaWJsZU5vZGU6OnJvbGVEZXNjcmlwdGlvbigpCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNl
dFJvbGVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIHJvbGVEZXNjcmlwdGlvbikKIHsKLSAgICBz
ZXRTdHJpbmdQcm9wZXJ0eShyb2xlRGVzY3JpcHRpb24sIEFYUHJvcGVydHlOYW1lOjpSb2xlRGVz
Y3JpcHRpb24pOworICAgIHNldFByb3BlcnR5KHJvbGVEZXNjcmlwdGlvbi5pc0VtcHR5KCksIHJv
bGVEZXNjcmlwdGlvbiwgQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbik7CiAgICAgbm90
aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3JvbGVkZXNjcmlwdGlvbkF0dHIpOwogfQogCitzdGQ6
Om9wdGlvbmFsPGludD4gQWNjZXNzaWJsZU5vZGU6OnJvd0NvdW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGludD4obV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpSb3dDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJvd0Nv
dW50KHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUu
aGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCk7Cisg
ICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jvd2NvdW50QXR0cik7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpyb3dJbmRleCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1l
bnQsIEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6
OnNldFJvd0luZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQoreworICAgIHNldFBy
b3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6
OlJvd0luZGV4KTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcm93aW5kZXhBdHRy
KTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OnJvd1NwYW4o
KSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+
KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Um93U3Bhbik7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJsZU5vZGU6OnNldFJvd1NwYW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7
CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFBy
b3BlcnR5TmFtZTo6Um93U3Bhbik7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jv
d3NwYW5BdHRyKTsKK30KKwogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6c2Vs
ZWN0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVy
RWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkKTsKKyAgICByZXR1cm4gb3B0aW9uYWxW
YWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6U2Vs
ZWN0ZWQpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRTZWxlY3RlZChzdGQ6Om9wdGlv
bmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0
eU5hbWU6OlNlbGVjdGVkKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZh
bHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZCk7CiAgICAgbm90aWZ5QXR0cmli
dXRlQ2hhbmdlZChhcmlhX3NlbGVjdGVkQXR0cik7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8aW50PiBB
Y2Nlc3NpYmxlTm9kZTo6c2V0U2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFs
dWVGb3JQcm9wZXJ0eTxpbnQ+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6U2V0U2l6
ZSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFNldFNpemUoc3RkOjpvcHRpb25hbDxp
bnQ+IHZhbHVlKQoreworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUu
dmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV9zZXRzaXplQXR0cik7Cit9CisKIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6c29y
dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpTb3J0KTsKQEAgLTUwMiwxMCArNjgwLDQzIEBAIFN0cmlu
ZyBBY2Nlc3NpYmxlTm9kZTo6c29ydCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNl
dFNvcnQoY29uc3QgU3RyaW5nJiBzb3J0KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHNvcnQs
IEFYUHJvcGVydHlOYW1lOjpTb3J0KTsKKyAgICBzZXRQcm9wZXJ0eShzb3J0LmlzRW1wdHkoKSwg
c29ydCwgQVhQcm9wZXJ0eU5hbWU6OlNvcnQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQo
YXJpYV9zb3J0QXR0cik7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBBY2Nlc3NpYmxlTm9k
ZTo6dmFsdWVNYXgoKSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVy
dHk8ZG91YmxlPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4KTsKK30K
Kwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNYXgoc3RkOjpvcHRpb25hbDxkb3VibGU+
IHZhbHVlKQoreworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFs
dWUoKSwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4KTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFu
Z2VkKGFyaWFfdmFsdWVtYXhBdHRyKTsKK30KKworc3RkOjpvcHRpb25hbDxkb3VibGU+IEFjY2Vz
c2libGVOb2RlOjp2YWx1ZU1pbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVG
b3JQcm9wZXJ0eTxkb3VibGU+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6VmFsdWVN
aW4pOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU1pbihzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gdmFsdWUpCit7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2
YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6VmFsdWVNaW4pOworICAgIG5vdGlmeUF0dHJp
YnV0ZUNoYW5nZWQoYXJpYV92YWx1ZW1pbkF0dHIpOworfQorCitzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gQWNjZXNzaWJsZU5vZGU6OnZhbHVlTm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9u
YWxWYWx1ZUZvclByb3BlcnR5PGRvdWJsZT4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpWYWx1ZU5vdyk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFZhbHVlTm93KHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3Zh
bHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdyk7CisgICAgbm90
aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3ZhbHVlbm93QXR0cik7Cit9CisKIFN0cmluZyBBY2Nl
c3NpYmxlTm9kZTo6dmFsdWVUZXh0KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWVG
b3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlVGV4dCk7CkBA
IC01MTMsNyArNzI0LDcgQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjp2YWx1ZVRleHQoKSBjb25z
dAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZVRleHQoY29uc3QgU3RyaW5nJiB2YWx1
ZVRleHQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkodmFsdWVUZXh0LCBBWFByb3BlcnR5TmFt
ZTo6VmFsdWVUZXh0KTsKKyAgICBzZXRQcm9wZXJ0eSh2YWx1ZVRleHQuaXNFbXB0eSgpLCB2YWx1
ZVRleHQsIEFYUHJvcGVydHlOYW1lOjpWYWx1ZVRleHQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV92YWx1ZXRleHRBdHRyKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAkocmV2aXNpb24gMjI0OTkyKQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBWYXJp
YW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGJvb2wsIGludD4gUHJvcGVydHlWYWx1ZVZhcmlh
bnQ7Cit0eXBlZGVmIFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1
bnNpZ25lZCwgZG91YmxlPiBQcm9wZXJ0eVZhbHVlVmFyaWFudDsKIAogZW51bSBjbGFzcyBBWFBy
b3BlcnR5TmFtZSB7CiAgICAgTm9uZSwKQEAgLTQ0LDYgKzQ0LDkgQEAgZW51bSBjbGFzcyBBWFBy
b3BlcnR5TmFtZSB7CiAgICAgQXV0b2NvbXBsZXRlLAogICAgIEJ1c3ksCiAgICAgQ2hlY2tlZCwK
KyAgICBDb2xDb3VudCwKKyAgICBDb2xJbmRleCwKKyAgICBDb2xTcGFuLAogICAgIEN1cnJlbnQs
CiAgICAgRGlzYWJsZWQsCiAgICAgRXhwYW5kZWQsCkBAIC01MiwyMCArNTUsMjkgQEAgZW51bSBj
bGFzcyBBWFByb3BlcnR5TmFtZSB7CiAgICAgSW52YWxpZCwKICAgICBLZXlTaG9ydGN1dHMsCiAg
ICAgTGFiZWwsCisgICAgTGV2ZWwsCiAgICAgTGl2ZSwKICAgICBNb2RhbCwKICAgICBNdWx0aWxp
bmUsCiAgICAgTXVsdGlzZWxlY3RhYmxlLAogICAgIE9yaWVudGF0aW9uLAogICAgIFBsYWNlaG9s
ZGVyLAorICAgIFBvc0luU2V0LAogICAgIFByZXNzZWQsCiAgICAgUmVhZE9ubHksCiAgICAgUmVs
ZXZhbnQsCiAgICAgUmVxdWlyZWQsCiAgICAgUm9sZSwKICAgICBSb2xlRGVzY3JpcHRpb24sCisg
ICAgUm93Q291bnQsCisgICAgUm93SW5kZXgsCisgICAgUm93U3BhbiwKICAgICBTZWxlY3RlZCwK
KyAgICBTZXRTaXplLAogICAgIFNvcnQsCisgICAgVmFsdWVNYXgsCisgICAgVmFsdWVNaW4sCisg
ICAgVmFsdWVOb3csCiAgICAgVmFsdWVUZXh0CiB9OwogCkBAIC05NSw2ICsxMDcsOSBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9yRWxl
bWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBzdGQ6Om9wdGlvbmFs
PGJvb2w+IGVmZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlO
YW1lKTsKKyAgICBzdGF0aWMgaW50IGVmZmVjdGl2ZUludFZhbHVlRm9yRWxlbWVudChFbGVtZW50
JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB1bnNpZ25lZCBlZmZlY3RpdmVVbnNpZ25l
ZFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyBm
bG9hdCBlZmZlY3RpdmVGbG9hdFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5h
bWUpOwogICAgIHN0YXRpYyBib29sIGhhc1Byb3BlcnR5KEVsZW1lbnQmLCBBWFByb3BlcnR5TmFt
ZSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGF0b21pYygpIGNvbnN0OwpAQCAtMTA5LDYg
KzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNoZWNrZWQoKSBjb25zdDsKICAgICB2b2lk
IHNldENoZWNrZWQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gY29s
Q291bnQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbENvdW50KHN0ZDo6b3B0aW9uYWw8aW50Pik7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb2xJbmRleCgpIGNvbnN0OworICAgIHZv
aWQgc2V0Q29sSW5kZXgoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworCisgICAgc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gY29sU3BhbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29sU3BhbihzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPik7CisKICAgICBTdHJpbmcgY3VycmVudCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q3VycmVudChjb25zdCBTdHJpbmcmKTsKIApAQCAtMTMwLDEyICsxNTQsMTUgQEAg
cHVibGljOgogICAgIFN0cmluZyBrZXlTaG9ydGN1dHMoKSBjb25zdDsKICAgICB2b2lkIHNldEtl
eVNob3J0Y3V0cyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBsaXZlKCkgY29uc3Q7Ci0g
ICAgdm9pZCBzZXRMaXZlKGNvbnN0IFN0cmluZyYpOwotCiAgICAgU3RyaW5nIGxhYmVsKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGxldmVsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMZXZlbChzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPik7CisKKyAgICBTdHJpbmcgbGl2ZSgpIGNvbnN0OworICAgIHZvaWQgc2V0
TGl2ZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbW9kYWwoKSBj
b25zdDsKICAgICB2b2lkIHNldE1vZGFsKHN0ZDo6b3B0aW9uYWw8Ym9vbD4pOwogCkBAIC0xNTEs
NiArMTc4LDkgQEAgcHVibGljOgogICAgIFN0cmluZyBwbGFjZWhvbGRlcigpIGNvbnN0OwogICAg
IHZvaWQgc2V0UGxhY2Vob2xkZXIoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBwb3NJblNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0UG9zSW5TZXQoc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4pOworICAgIAogICAgIFN0cmluZyBwcmVzc2VkKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRQcmVzc2VkKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xNjksMjEgKzE5OSw0MyBA
QCBwdWJsaWM6CiAgICAgU3RyaW5nIHJvbGVEZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIHZvaWQg
c2V0Um9sZURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RkOjpvcHRpb25hbDxp
bnQ+IHJvd0NvdW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSb3dDb3VudChzdGQ6Om9wdGlvbmFs
PGludD4pOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcm93SW5kZXgoKSBjb25zdDsK
KyAgICB2b2lkIHNldFJvd0luZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHJvd1NwYW4oKSBjb25zdDsKKyAgICB2b2lkIHNldFJvd1Nw
YW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworCiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBz
ZWxlY3RlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWQoc3RkOjpvcHRpb25hbDxib29s
Pik7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gc2V0U2l6ZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0U2V0U2l6ZShzdGQ6Om9wdGlvbmFsPGludD4pOworCiAgICAgU3RyaW5nIHNvcnQoKSBjb25z
dDsKICAgICB2b2lkIHNldFNvcnQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlvbmFs
PGRvdWJsZT4gdmFsdWVNYXgoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlTWF4KHN0ZDo6b3B0
aW9uYWw8ZG91YmxlPik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVNaW4oKSBj
b25zdDsKKyAgICB2b2lkIHNldFZhbHVlTWluKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisKKyAg
ICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVOb3coKSBjb25zdDsKKyAgICB2b2lkIHNldFZh
bHVlTm93KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisKICAgICBTdHJpbmcgdmFsdWVUZXh0KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZVRleHQoY29uc3QgU3RyaW5nJik7CiAKIHByaXZhdGU6
CiAgICAgc3RhdGljIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50IHZhbHVlRm9yUHJvcGVydHko
RWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0cmlu
Z1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxib29sPiBib29sVmFsdWVGb3JQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9w
ZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoY29uc3QgU3RyaW5nJiwgQVhQ
cm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0Qm9vbFByb3BlcnR5KHN0ZDo6b3B0aW9uYWw8Ym9v
bD4sIEFYUHJvcGVydHlOYW1lKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRp
YyBzdGQ6Om9wdGlvbmFsPFQ+IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eShFbGVtZW50JiwgQVhQ
cm9wZXJ0eU5hbWUpOworICAgIAorICAgIHZvaWQgc2V0UHJvcGVydHkoYm9vbCwgUHJvcGVydHlW
YWx1ZVZhcmlhbnQmJiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIHZvaWQgbm90aWZ5QXR0
cmlidXRlQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJik7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCShyZXZp
c2lvbiAyMjQ5OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVO
b2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmc/IGF1dG9jb21wbGV0ZTsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gYnVzeTsKICAg
ICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBjaGVja2VkOworICAgIGF0dHJpYnV0ZSBsb25nPyBjb2xD
b3VudDsKKyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZz8gY29sSW5kZXg7CisgICAgYXR0cmli
dXRlIHVuc2lnbmVkIGxvbmc/IGNvbFNwYW47CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gY3Vy
cmVudDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gZGlzYWJsZWQ7CiAgICAgYXR0cmlidXRlIGJv
b2xlYW4/IGV4cGFuZGVkOwpAQCAtMzksMTkgKzQyLDI4IEBACiAgICAgYXR0cmlidXRlIERPTVN0
cmluZz8gaW52YWxpZDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBrZXlTaG9ydGN1dHM7CiAg
ICAgYXR0cmlidXRlIERPTVN0cmluZz8gbGFiZWw7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmc/IGxldmVsOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGxpdmU7CiAgICAgYXR0cmlidXRl
IGJvb2xlYW4/IG1vZGFsOwogICAgIGF0dHJpYnV0ZSBib29sZWFuPyBtdWx0aWxpbmU7CiAgICAg
YXR0cmlidXRlIGJvb2xlYW4/IG11bHRpc2VsZWN0YWJsZTsKICAgICBhdHRyaWJ1dGUgRE9NU3Ry
aW5nPyBvcmllbnRhdGlvbjsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBwbGFjZWhvbGRlcjsK
KyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZz8gcG9zSW5TZXQ7CiAgICAgYXR0cmlidXRlIERP
TVN0cmluZz8gcHJlc3NlZDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gcmVhZE9ubHk7CiAgICAg
YXR0cmlidXRlIERPTVN0cmluZz8gcmVsZXZhbnQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHJl
cXVpcmVkOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IHJvbGU7CiAgICAgYXR0cmlidXRlIERP
TVN0cmluZz8gcm9sZURlc2NyaXB0aW9uOworICAgIGF0dHJpYnV0ZSBsb25nPyByb3dDb3VudDsK
KyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZz8gcm93SW5kZXg7CisgICAgYXR0cmlidXRlIHVu
c2lnbmVkIGxvbmc/IHJvd1NwYW47CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHNlbGVjdGVkOwor
ICAgIGF0dHJpYnV0ZSBsb25nPyBzZXRTaXplOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IHNv
cnQ7CisgICAgYXR0cmlidXRlIGRvdWJsZT8gdmFsdWVNYXg7CisgICAgYXR0cmlidXRlIGRvdWJs
ZT8gdmFsdWVNaW47CisgICAgYXR0cmlidXRlIGRvdWJsZT8gdmFsdWVOb3c7CiAgICAgYXR0cmli
dXRlIERPTVN0cmluZz8gdmFsdWVUZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBl
ckF0ay5jcHAJKHJldmlzaW9uIDIyNDk5MikKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDY0LDMzICs0NjQsMzMgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJs
ZQogCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpICYmIGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpLmlzRXhwb3NhYmxlVGhyb3VnaEFj
Y2Vzc2liaWxpdHkoKSkgewogICAgICAgICBhdXRvJiB0YWJsZSA9IGRvd25jYXN0PEFjY2Vzc2li
aWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpOwotICAgICAgICBpbnQgcm93Q291bnQgPSB0YWJsZS5h
cmlhUm93Q291bnQoKTsKKyAgICAgICAgaW50IHJvd0NvdW50ID0gdGFibGUuYXhSb3dDb3VudCgp
OwogICAgICAgICBpZiAocm93Q291bnQpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3djb3VudCIsIFN0cmluZzo6bnVtYmVy
KHJvd0NvdW50KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpbnQgY29sdW1uQ291bnQgPSB0
YWJsZS5hcmlhQ29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNvbHVtbkNvdW50ID0gdGFibGUu
YXhDb2x1bW5Db3VudCgpOwogICAgICAgICBpZiAoY29sdW1uQ291bnQpCiAgICAgICAgICAgICBh
dHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJjb2xjb3Vu
dCIsIFN0cmluZzo6bnVtYmVyKGNvbHVtbkNvdW50KS51dGY4KCkuZGF0YSgpKTsKICAgICB9IGVs
c2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKmNvcmVPYmplY3QpKSB7CiAgICAgICAg
IGF1dG8mIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKmNvcmVPYmplY3Qp
OwotICAgICAgICBpbnQgcm93SW5kZXggPSByb3cuYXJpYVJvd0luZGV4KCk7CisgICAgICAgIGlu
dCByb3dJbmRleCA9IHJvdy5heFJvd0luZGV4KCk7CiAgICAgICAgIGlmIChyb3dJbmRleCAhPSAt
MSkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJp
YnV0ZVNldCwgInJvd2luZGV4IiwgU3RyaW5nOjpudW1iZXIocm93SW5kZXgpLnV0ZjgoKS5kYXRh
KCkpOwogICAgIH0gZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNvcmVPYmpl
Y3QpKSB7CiAgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVD
ZWxsPigqY29yZU9iamVjdCk7Ci0gICAgICAgIGludCByb3dJbmRleCA9IGNlbGwuYXJpYVJvd0lu
ZGV4KCk7CisgICAgICAgIGludCByb3dJbmRleCA9IGNlbGwuYXhSb3dJbmRleCgpOwogICAgICAg
ICBpZiAocm93SW5kZXggIT0gLTEpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0
a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3dpbmRleCIsIFN0cmluZzo6bnVtYmVyKHJv
d0luZGV4KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpbnQgY29sdW1uSW5kZXggPSBjZWxs
LmFyaWFDb2x1bW5JbmRleCgpOworICAgICAgICBpbnQgY29sdW1uSW5kZXggPSBjZWxsLmF4Q29s
dW1uSW5kZXgoKTsKICAgICAgICAgaWYgKGNvbHVtbkluZGV4ICE9IC0xKQogICAgICAgICAgICAg
YXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiY29saW5k
ZXgiLCBTdHJpbmc6Om51bWJlcihjb2x1bW5JbmRleCkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAg
ICAgaW50IHJvd1NwYW4gPSBjZWxsLmFyaWFSb3dTcGFuKCk7CisgICAgICAgIGludCByb3dTcGFu
ID0gY2VsbC5heFJvd1NwYW4oKTsKICAgICAgICAgaWYgKHJvd1NwYW4gIT0gLTEpCiAgICAgICAg
ICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJy
b3dzcGFuIiwgU3RyaW5nOjpudW1iZXIocm93U3BhbikudXRmOCgpLmRhdGEoKSk7CiAKLSAgICAg
ICAgaW50IGNvbHVtblNwYW4gPSBjZWxsLmFyaWFDb2x1bW5TcGFuKCk7CisgICAgICAgIGludCBj
b2x1bW5TcGFuID0gY2VsbC5heENvbHVtblNwYW4oKTsKICAgICAgICAgaWYgKGNvbHVtblNwYW4g
IT0gLTEpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChh
dHRyaWJ1dGVTZXQsICJjb2xzcGFuIiwgU3RyaW5nOjpudW1iZXIoY29sdW1uU3BhbikudXRmOCgp
LmRhdGEoKSk7CiAgICAgfQpAQCAtNTI3LDExICs1MjcsMTEgQEAgc3RhdGljIEF0a0F0dHJpYnV0
ZVNldCogd2Via2l0QWNjZXNzaWJsZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvcmVP
YmplY3QtPnN1cHBvcnRzQVJJQVBvc0luU2V0KCkpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInBvc2luc2V0IiwgU3RyaW5nOjpudW1i
ZXIoY29yZU9iamVjdC0+YXJpYVBvc0luU2V0KCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmIChj
b3JlT2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkpCisgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInBvc2luc2V0IiwgU3RyaW5nOjpudW1i
ZXIoY29yZU9iamVjdC0+cG9zSW5TZXQoKSkudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBpZiAoY29y
ZU9iamVjdC0+c3VwcG9ydHNBUklBU2V0U2l6ZSgpKQotICAgICAgICBhdHRyaWJ1dGVTZXQgPSBh
ZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJzZXRzaXplIiwgU3RyaW5nOjpudW1i
ZXIoY29yZU9iamVjdC0+YXJpYVNldFNpemUoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGNv
cmVPYmplY3QtPnN1cHBvcnRzU2V0U2l6ZSgpKQorICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJzZXRzaXplIiwgU3RyaW5nOjpudW1iZXIo
Y29yZU9iamVjdC0+c2V0U2l6ZSgpKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIFN0cmluZyBpc1Jl
YWRPbmx5ID0gY29yZU9iamVjdC0+cmVhZE9ubHlWYWx1ZSgpOwogICAgIGlmICghaXNSZWFkT25s
eS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5t
bQkocmV2aXNpb24gMjI0OTkyKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEy
NzQsNyArMTI3NCw3IEBAIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFSSUFSb3dDb3VudAog
ICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIE5TSW50ZWdlciBy
b3dDb3VudCA9IHRhYmxlLT5hcmlhUm93Q291bnQoKTsKKyAgICBOU0ludGVnZXIgcm93Q291bnQg
PSB0YWJsZS0+YXhSb3dDb3VudCgpOwogICAgIHJldHVybiByb3dDb3VudCA+IDAgPyByb3dDb3Vu
dCA6IDA7CiB9CiAKQEAgLTEyODYsNyArMTI4Niw3IEBAIC0gKE5TVUludGVnZXIpYWNjZXNzaWJp
bGl0eUFSSUFDb2x1bW5Db3UKICAgICBpZiAoIXRhYmxlKQogICAgICAgICByZXR1cm4gMDsKICAg
ICAKLSAgICBOU0ludGVnZXIgY29sQ291bnQgPSB0YWJsZS0+YXJpYUNvbHVtbkNvdW50KCk7Cisg
ICAgTlNJbnRlZ2VyIGNvbENvdW50ID0gdGFibGUtPmF4Q29sdW1uQ291bnQoKTsKICAgICByZXR1
cm4gY29sQ291bnQgPiAwID8gY29sQ291bnQgOiAwOwogfQogCkBAIC0xMjk4LDcgKzEyOTgsNyBA
QCAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBUklBUm93SW5kZXgKICAgICBpZiAoIXRhYmxl
Q2VsbCkKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiAgICAgCi0gICAgTlNJbnRlZ2VyIHJv
d0luZGV4ID0gdGFibGVDZWxsLT5hcmlhUm93SW5kZXgoKTsKKyAgICBOU0ludGVnZXIgcm93SW5k
ZXggPSB0YWJsZUNlbGwtPmF4Um93SW5kZXgoKTsKICAgICByZXR1cm4gcm93SW5kZXggPiAwID8g
cm93SW5kZXggOiBOU05vdEZvdW5kOwogfQogCkBAIC0xMzEwLDcgKzEzMTAsNyBAQCAtIChOU1VJ
bnRlZ2VyKWFjY2Vzc2liaWxpdHlBUklBQ29sdW1uSW5kCiAgICAgaWYgKCF0YWJsZUNlbGwpCiAg
ICAgICAgIHJldHVybiBOU05vdEZvdW5kOwogICAgIAotICAgIE5TSW50ZWdlciBjb2x1bW5JbmRl
eCA9IHRhYmxlQ2VsbC0+YXJpYUNvbHVtbkluZGV4KCk7CisgICAgTlNJbnRlZ2VyIGNvbHVtbklu
ZGV4ID0gdGFibGVDZWxsLT5heENvbHVtbkluZGV4KCk7CiAgICAgcmV0dXJuIGNvbHVtbkluZGV4
ID4gMCA/IGNvbHVtbkluZGV4IDogTlNOb3RGb3VuZDsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIyNDk5MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAjaW1wb3J0ICJBY2Nlc3NpYmls
aXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNp
bXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgorI2ltcG9ydCAiQWNjZXNzaWJsZU5vZGUu
aCIKICNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9ydCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0
ICJDb2xvck1hYy5oIgpAQCAtMTE5Miw5ICsxMTkzLDkgQEAgLSAoTlNBcnJheSopYWRkaXRpb25h
bEFjY2Vzc2liaWxpdHlBdHRyaQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nl
c3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1f
b2JqZWN0LT5zdXBwb3J0c0FSSUFTZXRTaXplKCkpCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0
c1NldFNpemUoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0
eUFSSUFTZXRTaXplQXR0cmlidXRlXTsKLSAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQVBv
c0luU2V0KCkpCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkpCiAgICAgICAg
IFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlBUklBUG9zSW5TZXRBdHRyaWJ1
dGVdOwogICAgIAogICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uIHNvcnREaXJlY3Rpb24g
PSBtX29iamVjdC0+c29ydERpcmVjdGlvbigpOwpAQCAtMjY2OCwxNCArMjY2OSwxNCBAQCAtIChp
ZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgCiAgICAgaWYgKFthdHRy
aWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TWluVmFsdWVBdHRyaWJ1
dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3Vs
ZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09
IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9vYmplY3QtPmhhc0F0
dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cikpCisgICAgICAgIGlmIChtX29iamVjdC0+YXJpYVJv
bGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3IgJiYg
IW1fb2JqZWN0LT5oYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cpKQogICAgICAg
ICAgICAgcmV0dXJuIEAwOwogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhGbG9h
dDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFth
dHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmlsaXR5TWF4VmFsdWVBdHRy
aWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNo
b3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9vYmplY3QtPmhh
c0F0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cikpCisgICAgICAgIGlmIChtX29iamVjdC0+YXJp
YVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3Ig
JiYgIW1fb2JqZWN0LT5oYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cpKQogICAg
ICAgICAgICAgcmV0dXJuIEAwOwogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDptX29iamVjdC0+bWF4VmFsdWVGb3JSYW5nZSgpXTsKICAgICB9CkBAIC0yODEyLDEwICsy
ODEzLDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAg
ICAgICAgIHJldHVybiBAKHRhYmxlLnJvd0NvdW50KCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQ29sdW1u
Q291bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXJpYUNvbHVtbkNv
dW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXhDb2x1bW5Db3VudCgpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nl
c3NpYmlsaXR5QVJJQVJvd0NvdW50QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKHRh
YmxlLmFyaWFSb3dDb3VudCgpKTsKKyAgICAgICAgICAgIHJldHVybiBAKHRhYmxlLmF4Um93Q291
bnQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4+
KCptX29iamVjdCkpIHsKQEAgLTI4NTksMTAgKzI4NjAsMTAgQEAgLSAoaWQpYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05TQXJy
YXkocm93SGVhZGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQ29sdW1uSW5kZXhBdHRyaWJ1dGVdKQot
ICAgICAgICAgICAgcmV0dXJuIEAoY2VsbC5hcmlhQ29sdW1uSW5kZXgoKSk7CisgICAgICAgICAg
ICByZXR1cm4gQChjZWxsLmF4Q29sdW1uSW5kZXgoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFSb3dJbmRl
eEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQChjZWxsLmFyaWFSb3dJbmRleCgpKTsK
KyAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXhSb3dJbmRleCgpKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkgewpAQCAtMzA1Nyw5ICszMDU4LDkgQEAgLSAoaWQp
YWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIH0KICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNl
dEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29i
amVjdC0+YXJpYVBvc0luU2V0KCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhJbnQ6bV9vYmplY3QtPnBvc0luU2V0KCldOwogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVNldFNpemVBdHRyaWJ1dGVdKQotICAgICAg
ICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPmFyaWFTZXRTaXplKCld
OworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPnNldFNp
emUoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0Fj
Y2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBUklBR3JhYmJlZCgpXTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDIyNDk5MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDEzIEBACisyMDE3LTExLTE3ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisK
KyAgICAgICAgQVg6IEFPTTogSW1wbGVtZW50IG51bWJlciB0eXBlIHByb3BlcnRpZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTQ5NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLmh0bWw6IEFkZGVkLgor
CiAyMDE3LTExLTE3ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6
IEFPTTogSW1wbGVtZW50IGJvb2xlYW4gdHlwZSBwcm9wZXJ0aWVzCkluZGV4OiBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXItcHJv
cGVydGllcy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACitGaXJzdCBOYW1lCitUaGlzIHRlc3RzIG51bWJlciB0eXBl
IEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRpZXMuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCisKK1Rlc3QgQU9NIG51bWJlciBwcm9wZXJ0aWVzIGNhbiBiZSBjbGVh
cmVkLgorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IDUiCitQQVNTIG5vZGUu
YWNjZXNzaWJsZU5vZGUudmFsdWVOb3cgaXMgbnVsbAorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUg
aXMgIkFYVmFsdWU6IDYiCitQQVNTIG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVOb3cgaXMgbnVs
bAorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IDUiCisKK1ZhbHVlTWF4LCBW
YWx1ZU1pbiBhbmQgVmFsdWVOb3cgc3VwcG9ydAorUEFTUyBheE5vZGUubWF4VmFsdWUgaXMgMTAw
CitQQVNTIGF4Tm9kZS5pbnRWYWx1ZSBpcyA1CitQQVNTIGF4Tm9kZS5taW5WYWx1ZSBpcyAwCitQ
QVNTIGF4Tm9kZS5tYXhWYWx1ZSBpcyAyMAorUEFTUyBheE5vZGUuaW50VmFsdWUgaXMgMTUKK1BB
U1MgYXhOb2RlLm1pblZhbHVlIGlzIDEwCisKK1RhYmxlIHJlbGF0ZWQgcHJvcGVydGllcyBzdXBw
b3J0CitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29sdW1uQ291bnQn
KSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93Q291bnQn
KSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29sdW1uQ291
bnQnKSBpcyAxNgorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0Nv
dW50JykgaXMgMzAKK1BBU1MgYXhOb2RlLmNvbHVtbkluZGV4UmFuZ2UoKSBpcyAnezAsIDF9Jwor
UEFTUyBheE5vZGUucm93SW5kZXhSYW5nZSgpIGlzICd7MCwgMX0nCitQQVNTIGF4Tm9kZS5jb2x1
bW5JbmRleFJhbmdlKCkgaXMgJ3swLCAyfScKK1BBU1MgYXhOb2RlLnJvd0luZGV4UmFuZ2UoKSBp
cyAnezAsIDN9JworUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVt
bkluZGV4JykgaXMgLTEKK1BBU1MgYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFS
b3dJbmRleCcpIGlzIC0xCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklB
Q29sdW1uSW5kZXgnKSBpcyAxCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhB
UklBUm93SW5kZXgnKSBpcyAyCisKK0xldmVsIHN1cHBvcnQKK1BBU1MgYXhOb2RlLmludFZhbHVl
IGlzIDIKK1BBU1MgYXhOb2RlLmludFZhbHVlIGlzIDYKKworUG9zSW5TZXQgYW5kIFNldFNpemUg
c3VwcG9ydAorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVBvc0luU2V0
JykgaXMgOQorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVNldFNpemUn
KSBpcyAxMAorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVy
LXByb3BlcnRpZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IHJvbGU9InNsaWRlciIgaWQ9InNsaWRl
ciIgYXJpYS12YWx1ZW5vdz0iNSI+PC9kaXY+CisKKzxkaXYgaWQ9ImdyaWQiIHJvbGU9ImdyaWQi
PgorICA8ZGl2IHJvbGU9InJvd2dyb3VwIj4KKyAgICA8ZGl2IHJvbGU9InJvdyI+CisgICAgICA8
c3BhbiBpZD0iY2VsbCIgcm9sZT0iY29sdW1uaGVhZGVyIj5GaXJzdCBOYW1lPC9zcGFuPgorICAg
IDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorCis8aCByb2xlPSJoZWFkaW5nIiBpZD0iaGVhZGlu
ZyI+Cis8ZGl2IHJvbGU9Imxpc3QiPgorPGRpdiByb2xlPSJsaXN0aXRlbSIgaWQ9Imxpc3RpdGVt
Ij48L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIG51
bWJlciB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRpZXMuIik7CisgICAg
aWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB2YXIgbm9kZTsK
KyAgICAgICAgdmFyIGF4Tm9kZTsKKworICAgICAgICB0ZXN0Q2xlYXJOdW1iZXJQcm9wZXJ0eSgp
OworICAgICAgICB0ZXN0UmFuZ2VQcm9wZXJ0aWVzKCk7CisgICAgICAgIHRlc3RUYWJsZVByb3Bl
cnRpZXMoKTsKKyAgICAgICAgdGVzdExldmVsKCk7CisgICAgICAgIHRlc3RMaXN0KCk7CisgICAg
fQorCisgICAgZnVuY3Rpb24gdGVzdENsZWFyTnVtYmVyUHJvcGVydHkoKSB7CisgICAgICAgIGRl
YnVnKCJcblRlc3QgQU9NIG51bWJlciBwcm9wZXJ0aWVzIGNhbiBiZSBjbGVhcmVkLiIpOworICAg
ICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpOworICAgICAgICBh
eE5vZGUgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInNs
aWRlciIpOworICAgICAgICAvLyBOdW1iZXIgdmFsdWUgc2hvdWxkIGJlIG51bGwgaWYgbm90IHNl
dC4KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJheE5vZGUuc3RyaW5nVmFsdWUiLCAi
QVhWYWx1ZTogNSIpOworICAgICAgICBzaG91bGRCZU51bGwoIm5vZGUuYWNjZXNzaWJsZU5vZGUu
dmFsdWVOb3ciKTsKKyAgICAgICAgLy8gU2V0IHRoZSBBT00gcHJvcGVydHkKKyAgICAgICAgbm9k
ZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU5vdyA9IDY7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygiYXhOb2RlLnN0cmluZ1ZhbHVlIiwgIkFYVmFsdWU6IDYiKTsKKyAgICAgICAgLy8gQ2xl
YXIgdGhlIEFPTSBwcm9wZXJ0eQorICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTm93
ID0gbnVsbDsKKyAgICAgICAgc2hvdWxkQmVOdWxsKCJub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVl
Tm93Iik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiYXhOb2RlLnN0cmluZ1ZhbHVl
IiwgIkFYVmFsdWU6IDUiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UmFuZ2VQcm9wZXJ0
aWVzKCkgeworICAgICAgICBkZWJ1ZygiXG5WYWx1ZU1heCwgVmFsdWVNaW4gYW5kIFZhbHVlTm93
IHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzbGlk
ZXIiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJs
ZUVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5tYXhWYWx1
ZSIsICIxMDAiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5pbnRWYWx1ZSIsICI1Iik7Cisg
ICAgICAgIHNob3VsZEJlKCJheE5vZGUubWluVmFsdWUiLCAiMCIpOworICAgICAgICBub2RlLmFj
Y2Vzc2libGVOb2RlLnZhbHVlTWF4ID0gMjA7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUu
dmFsdWVOb3cgPSAxNTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU1pbiA9IDEw
OworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm1heFZhbHVlIiwgIjIwIik7CisgICAgICAgIHNo
b3VsZEJlKCJheE5vZGUuaW50VmFsdWUiLCAiMTUiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9k
ZS5taW5WYWx1ZSIsICIxMCIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RUYWJsZVByb3Bl
cnRpZXMoKSB7CisgICAgICAgIGRlYnVnKCJcblRhYmxlIHJlbGF0ZWQgcHJvcGVydGllcyBzdXBw
b3J0Iik7CisgICAgICAgIC8vIGNvbENvdW50IGFuZCByb3dDb3VudAorICAgICAgICBub2RlID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyaWQiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJncmlkIik7CisgICAgICAg
IHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkNvdW50
JykiLCAiMCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVl
KCdBWEFSSUFSb3dDb3VudCcpIiwgIjAiKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5j
b2xDb3VudCA9IDE2OworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnJvd0NvdW50ID0gMzA7
CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNv
bHVtbkNvdW50JykiLCAiMTYiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRy
aWJ1dGVWYWx1ZSgnQVhBUklBUm93Q291bnQnKSIsICIzMCIpOworICAgICAgICAKKyAgICAgICAg
Ly8gY29sU3BhbiBhbmQgcm93U3BhbgorICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNlbGwiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjZWxsIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUu
Y29sdW1uSW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7CisgICAgICAgIHNob3VsZEJlKCJheE5v
ZGUucm93SW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7CisgICAgICAgIG5vZGUuYWNjZXNzaWJs
ZU5vZGUuY29sU3BhbiA9IDI7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUucm93U3BhbiA9
IDM7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuY29sdW1uSW5kZXhSYW5nZSgpIiwgIid7MCwg
Mn0nIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUucm93SW5kZXhSYW5nZSgpIiwgIid7MCwg
M30nIik7CisgICAgICAgIAorICAgICAgICAvLyBjb2xJbmRleCBhbmQgcm93SW5kZXgKKyAgICAg
ICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29sdW1uSW5k
ZXgnKSIsICItMSIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZh
bHVlKCdBWEFSSUFSb3dJbmRleCcpIiwgIi0xIik7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5v
ZGUuY29sSW5kZXggPSAxOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnJvd0luZGV4ID0g
MjsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklB
Q29sdW1uSW5kZXgnKSIsICIxIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0
cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0luZGV4JykiLCAiMiIpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHRlc3RMZXZlbCgpIHsKKyAgICAgICAgZGVidWcoIlxuTGV2ZWwgc3VwcG9ydCIpOworICAg
ICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlYWRpbmciKTsKKyAgICAgICAg
YXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJo
ZWFkaW5nIik7CisgICAgICAgIC8vIFRoZSBpbXBsaWNpdCB2YWx1ZSBvZiBhcmlhLWxldmVsIGlz
IDIgZm9yIHRoZSBoZWFkaW5nIHJvbGUuCisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuaW50VmFs
dWUiLCAiMiIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmxldmVsID0gNjsKKyAgICAg
ICAgc2hvdWxkQmUoImF4Tm9kZS5pbnRWYWx1ZSIsICI2IikKKyAgICB9CisKKyAgICBmdW5jdGlv
biB0ZXN0TGlzdCgpIHsKKyAgICAgICAgZGVidWcoIlxuUG9zSW5TZXQgYW5kIFNldFNpemUgc3Vw
cG9ydCIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxpc3RpdGVt
Iik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVF
bGVtZW50QnlJZCgibGlzdGl0ZW0iKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5wb3NJ
blNldCA9IDk7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuc2V0U2l6ZSA9IDEwOworICAg
ICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFQb3NJblNl
dCcpIiwgIjkiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1
ZSgnQVhBUklBU2V0U2l6ZScpIiwgIjEwIik7CisgICAgfQorPC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327302</attachid>
            <date>2017-11-17 21:22:35 -0800</date>
            <delta_ts>2017-11-18 12:57:37 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>81206</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2OCBAQAorMjAxNy0xMS0xNyAgTmFuIFdh
bmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBBT006IEltcGxlbWVudCBudW1i
ZXIgdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzk0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBY2Nlc3NpYmlsaXR5IE9iamVjdCBNb2RlbAorICAgICAgICBFeHBsYWluZXI6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL2V4cGxhaW5lci5odG1sCisgICAgICAgIFNwZWM6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL3NwZWMvCisKKyAgICAgICAgSW1wbGVtZW50ZWQg
dGhlIG51bWJlciB0eXBlIHByb3BlcnRpZXMgZm9yIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGFs
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXItcHJvcGVydGll
cy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93
SW5kZXhSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdy
aWRDZWxsOjpheFJvd1NwYW5XaXRoUm93SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6Y29sdW1uSW5kZXhSYW5nZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjphcmlhUm93U3BhbldpdGhS
b3dJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdDo6aGVhZGluZ0xldmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0Ojp2YWx1ZUZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptYXhWYWx1ZUZvclJhbmdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUZvclJhbmdlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVyYXJjaGlj
YWxMZXZlbCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVl
Rm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dDo6dW5zaWduZWRWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmZsb2F0VmFsdWVGb3JQcm9wZXJ0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c1NldFNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNQb3NJblNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc0luU2V0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJ
QVNldFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c3VwcG9ydHNBUklBUG9zSW5TZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVNldFNpemUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVBvc0luU2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZTo6YXhDb2x1bW5Db3VudCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmF4Um93Q291bnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphcmlhQ29sdW1uQ291
bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
OjphcmlhUm93Q291bnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpjb2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uSW5kZXggY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dJbmRleCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheENvbHVtblNw
YW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhS
b3dTcGFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OmFyaWFDb2x1bW5JbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsOjphcmlhUm93SW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYUNvbHVtblNwYW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJp
YVJvd1NwYW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5oOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbDo6c2V0QVhDb2xJbmRleEZyb21Sb3cpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbDo6c2V0QVJJQUNvbEluZGV4RnJvbVJvdyk6IERlbGV0ZWQuCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmF4Q29sdW1uSW5kZXggY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjpheFJvd0luZGV4IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXJpYUNvbHVtbkluZGV4IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6
YXJpYVJvd0luZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlUYWJsZVJvdy5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJs
ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YXJpYUF0dHJpYnV0ZU1hcCk6CisgICAgICAg
IChXZWJDb3JlOjppc1Byb3BlcnR5VmFsdWVJbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9w
ZXJ0eVZhbHVlVW5zaWduZWQpOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlRmxv
YXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUJvb2xWYWx1ZUZv
ckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUlu
dFZhbHVlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6ZWZm
ZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OmVmZmVjdGl2ZUZsb2F0VmFsdWVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjphdG9taWMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJsZU5vZGU6OnNldEF0b21pYyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9k
ZTo6c2V0QXV0b2NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpi
dXN5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRCdXN5KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRDaGVja2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpjb2xDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29sQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJsZU5vZGU6OmNvbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRDb2xJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6
Y29sU3BhbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29s
U3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q3VycmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldERpc2FibGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpleHBhbmRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0RXhwYW5kZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldEhhc1BvcFVwKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpo
aWRkZW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEhpZGRl
bik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0SW52YWxpZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0S2V5U2hvcnRjdXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpsYWJlbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0TGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OmxldmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpz
ZXRMZXZlbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bGl2ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0TGl2ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bW9kYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJsZU5vZGU6OnNldE1vZGFsKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjptdWx0aWxpbmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OnNldE11bHRpbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bXVsdGlz
ZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRN
dWx0aXNlbGVjdGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE9y
aWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRQbGFjZWhv
bGRlcik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6cG9zSW5TZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFBvc0luU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRQcmVzc2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpyZWFkT25seSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0UmVhZE9ubHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldFJlbGV2YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpy
ZXF1aXJlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVx
dWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvbGVEZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6cm93Q291bnQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvd0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpyb3dJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlTm9kZTo6c2V0Um93SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5v
ZGU6OnJvd1NwYW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNl
dFJvd1NwYW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNlbGVjdGVkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRTZWxlY3RlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0U2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0U2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0U29ydCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6dmFsdWVNYXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OnNldFZhbHVlTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjp2YWx1ZU1p
biBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNaW4p
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnZhbHVlTm93IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU5vdyk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6Ym9vbFZhbHVlRm9yUHJvcGVydHkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEJvb2xQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oOgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHA6CisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXROQ29sdW1ucyk6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXROUm93cyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHA6CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVDZWxsR2V0UG9zaXRpb24pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVXcmFwcGVyQXRrLmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlcklPUy5tbToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgYWNjZXNzaWJpbGl0eUFSSUFSb3dDb3VudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUNvbHVtbkNvdW50XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklBUm93SW5k
ZXhdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJp
bGl0eUFSSUFDb2x1bW5JbmRleF0pOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBhZGRpdGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpYnV0ZU5hbWVzXSk6
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlB
dHRyaWJ1dGVWYWx1ZTpdKToKKwogMjAxNy0xMS0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFtTZXJ2aWNlIFdvcmtlcnNdIEltcGxlbWVudCAiTm90aWZ5IENv
bnRyb2xsZXIgQ2hhbmdlIiBhbGdvcml0aG0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkocmV2
aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIgKzkxLDEyIEBAIHZv
aWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXgKIAogICAgIC8vIEFSSUEgMS4x
LCBhcmlhLXJvd3NwYW4gYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBjZWxscyBhbmQgZ3JpZGNl
bGxzIHdoaWNoIGFyZSBub3QgY29udGFpbmVkIGluIGEgbmF0aXZlIHRhYmxlLgogICAgIC8vIFNv
IHdlIHNob3VsZCBjaGVjayBmb3IgdGhhdCBhdHRyaWJ1dGUgaGVyZS4KLSAgICByb3dSYW5nZS5z
ZWNvbmQgPSBhcmlhUm93U3BhbldpdGhSb3dJbmRleChyb3dSYW5nZS5maXJzdCk7CisgICAgcm93
UmFuZ2Uuc2Vjb25kID0gYXhSb3dTcGFuV2l0aFJvd0luZGV4KHJvd1JhbmdlLmZpcnN0KTsKIH0K
IAotdW5zaWduZWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6YXJpYVJvd1NwYW5XaXRoUm93
SW5kZXgodW5zaWduZWQgcm93SW5kZXgpIGNvbnN0Cit1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5QVJJ
QUdyaWRDZWxsOjpheFJvd1NwYW5XaXRoUm93SW5kZXgodW5zaWduZWQgcm93SW5kZXgpIGNvbnN0
CiB7Ci0gICAgaW50IHJvd1NwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhUm93U3Bh
bigpOworICAgIGludCByb3dTcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dTcGFu
KCk7CiAgICAgaWYgKHJvd1NwYW4gPT0gLTEpIHsKICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gcmFuZ2U7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OnJvd0lu
ZGV4UmFuZ2UocmFuZ2UpOwpAQCAtMTUxLDEyICsxNTEsMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
QVJJQUdyaWRDZWxsOjpjb2x1bW5JbgogICAgICAgICAgICAgY29sdW1uUmFuZ2UuZmlyc3QgPSBp
bmRleFdpdGhTcGFuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaW5k
ZXhXaXRoU3BhbiArPSBpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpID8gc3RkOjpt
YXgoZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNoaWxkKS5hcmlhQ29sdW1uU3Bh
bigpLCAxKSA6IDE7CisgICAgICAgIGluZGV4V2l0aFNwYW4gKz0gaXM8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbD4oKmNoaWxkKSA/IHN0ZDo6bWF4KGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw+KCpjaGlsZCkuYXhDb2x1bW5TcGFuKCksIDEpIDogMTsKICAgICB9CiAgICAgCiAgICAgLy8g
QVJJQSAxLjEsIGFyaWEtY29sc3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIGNlbGxzIGFu
ZCBncmlkY2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQgaW4gYSBuYXRpdmUgdGFibGUuCiAg
ICAgLy8gU28gd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGF0IGF0dHJpYnV0ZSBoZXJlLgotICAgIGlu
dCBjb2x1bW5TcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYUNvbHVtblNwYW4oKTsK
KyAgICBpbnQgY29sdW1uU3BhbiA9IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uU3Bh
bigpOwogICAgIGlmIChjb2x1bW5TcGFuID09IC0xKSB7CiAgICAgICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+IHJhbmdlOwogICAgICAgICBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpj
b2x1bW5JbmRleFJhbmdlKHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oCShyZXZpc2lvbiAy
MjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklB
R3JpZENlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2YXRlOgogCiAg
ICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBwYXJlbnRUYWJsZSgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudFJvd0dyb3VwKCkgY29uc3Q7Ci0gICAgdW5zaWdu
ZWQgYXJpYVJvd1NwYW5XaXRoUm93SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIHVu
c2lnbmVkIGF4Um93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAg
U3RyaW5nIHJlYWRPbmx5VmFsdWUoKSBjb25zdCBvdmVycmlkZTsKIH07IAogICAgIApJbmRleDog
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NjIsOSArNzYyLDkgQEAgaW50IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoZWFkaW5nTGV2ZQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaXNIZWFkaW5nKCkpIHsKLSAgICAgICAg
aW50IGFyaWFMZXZlbCA9IGdldEF0dHJpYnV0ZShhcmlhX2xldmVsQXR0cikudG9JbnQoKTsKLSAg
ICAgICAgaWYgKGFyaWFMZXZlbCA+IDApCi0gICAgICAgICAgICByZXR1cm4gYXJpYUxldmVsOwor
ICAgICAgICBpbnQgbGV2ZWwgPSB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OkxldmVsKTsKKyAgICAgICAgaWYgKGxldmVsID4gMCkKKyAgICAgICAgICAgIHJldHVybiBs
ZXZlbDsKICAgICB9CiAKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShoMVRhZykpCkBAIC04MTQs
OSArODE0LDggQEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OnZhbHVlRm9yUgogCiAg
ICAgLy8gSW4gQVJJQSAxLjEsIHRoZSBpbXBsaWNpdCB2YWx1ZSBmb3IgYXJpYS12YWx1ZW5vdyBv
biBhIHNwaW4gYnV0dG9uIGlzIDAuCiAgICAgLy8gRm9yIG90aGVyIHJvbGVzLCBpdCBpcyBoYWxm
IHdheSBiZXR3ZWVuIGFyaWEtdmFsdWVtaW4gYW5kIGFyaWEtdmFsdWVtYXguCi0gICAgYXV0byYg
dmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW5vd0F0dHIpOwotICAgIGlmICghdmFsdWUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9GbG9hdCgpOworICAgIGlmIChoYXNQ
cm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cpKQorICAgICAgICByZXR1cm4gZmxvYXRW
YWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdyk7CiAKICAgICByZXR1cm4g
aXNTcGluQnV0dG9uKCkgPyAwIDogKG1pblZhbHVlRm9yUmFuZ2UoKSArIG1heFZhbHVlRm9yUmFu
Z2UoKSkgLyAyOwogfQpAQCAtODMyLDkgKzgzMSw4IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjptYXhWYWx1ZUYKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCiAgICAgICAgIHJl
dHVybiAwLjBmOwogCi0gICAgYXV0byYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1h
eEF0dHIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdmFsdWUu
dG9GbG9hdCgpOworICAgIGlmIChoYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVNYXgp
KQorICAgICAgICByZXR1cm4gZmxvYXRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpW
YWx1ZU1heCk7CiAKICAgICAvLyBJbiBBUklBIDEuMSwgdGhlIGltcGxpY2l0IHZhbHVlIGZvciBh
cmlhLXZhbHVlbWF4IG9uIGEgc3BpbiBidXR0b24KICAgICAvLyBpcyB0aGF0IHRoZXJlIGlzIG5v
IG1heGltdW0gdmFsdWUuIEZvciBvdGhlciByb2xlcywgaXQgaXMgMTAwLgpAQCAtODUyLDkgKzg1
MCw4IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjptaW5WYWx1ZUYKICAgICBpZiAo
IWlzUmFuZ2VDb250cm9sKCkpCiAgICAgICAgIHJldHVybiAwLjBmOwogCi0gICAgYXV0byYgdmFs
dWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1pbkF0dHIpOwotICAgIGlmICghdmFsdWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gdmFsdWUudG9GbG9hdCgpOworICAgIGlmIChoYXNQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVNaW4pKQorICAgICAgICByZXR1cm4gZmxvYXRWYWx1
ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1pbik7CiAKICAgICAvLyBJbiBBUklB
IDEuMSwgdGhlIGltcGxpY2l0IHZhbHVlIGZvciBhcmlhLXZhbHVlbWluIG9uIGEgc3BpbiBidXR0
b24KICAgICAvLyBpcyB0aGF0IHRoZXJlIGlzIG5vIG1pbmltdW0gdmFsdWUuIEZvciBvdGhlciBy
b2xlcywgaXQgaXMgMC4KQEAgLTE2MjIsMTAgKzE2MTksOCBAQCB1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5Tm9kZU9iamVjdDo6aGllcmFyCiAgICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKICAg
ICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBFbGVtZW50
JiBlbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpOwotICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJpYUxldmVsID0gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGFyaWFfbGV2ZWxBdHRyKTsKLSAgICBpZiAoIWFyaWFMZXZlbC5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBhcmlhTGV2ZWwudG9JbnQoKTsKKyAgICBpZiAoaGFzUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OkxldmVsKSkKKyAgICAgICAgcmV0dXJuIHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6TGV2ZWwpOwogICAgIAogICAgIC8vIE9ubHkgdHJlZSBpdGVtIHdpbGwg
Y2FsY3VsYXRlIGl0cyBsZXZlbCB0aHJvdWdoIHRoZSBET00gY3VycmVudGx5LgogICAgIGlmIChy
b2xlVmFsdWUoKSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJlZUl0ZW0pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAJ
KHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNjYsNiArMjE2NiwyNyBAQCBz
dGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2liaWxpdHlPYmplY3Q6CiAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIH0KIAoraW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVlRm9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlLZXkpIGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9k
ZTo6ZWZmZWN0aXZlSW50VmFsdWVGb3JFbGVtZW50KCplbGVtZW50LCBwcm9wZXJ0eUtleSk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3Vuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnVuc2lnbmVk
VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29uc3QKK3sKKyAg
ICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqZWxlbWVu
dCwgcHJvcGVydHlLZXkpOworICAgIHJldHVybiAwOworfQorCitmbG9hdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpmbG9hdFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlLZXkp
IGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRmxvYXRWYWx1ZUZvckVsZW1l
bnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKKyAgICByZXR1cm4gMC4wZjsKK30KKwogLy8gTGFj
a2luZyBjb25jcmV0ZSBldmlkZW5jZSBvZiBvcmllbnRhdGlvbiwgaG9yaXpvbnRhbCBtZWFucyB3
aWR0aCA+IGhlaWdodC4gdmVydGljYWwgaXMgaGVpZ2h0ID4gd2lkdGg7CiBBY2Nlc3NpYmlsaXR5
T3JpZW50YXRpb24gQWNjZXNzaWJpbGl0eU9iamVjdDo6b3JpZW50YXRpb24oKSBjb25zdAogewpA
QCAtMjY1MiwyNCArMjY3MywyNCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzUG9w
dXBWYWx1CiAgICAgcmV0dXJuICJmYWxzZSI7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVj
dDo6c3VwcG9ydHNBUklBU2V0U2l6ZSgpIGNvbnN0Citib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OnN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhcmlh
X3NldHNpemVBdHRyKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNl
dFNpemUpOwogfQogCi1ib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQVBvc0lu
U2V0KCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNQb3NJblNldCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhcmlhX3Bvc2luc2V0QXR0cik7Cisg
ICAgcmV0dXJuIGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCk7CiB9CiAgICAg
Ci1pbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVNldFNpemUoKSBjb25zdAoraW50IEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnNldFNpemUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1
dGUoYXJpYV9zZXRzaXplQXR0cikudG9JbnQoKTsKKyAgICByZXR1cm4gaW50VmFsdWVGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6U2V0U2l6ZSk7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjphcmlhUG9zSW5TZXQoKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc0lu
U2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFyaWFfcG9zaW5zZXRBdHRy
KS50b0ludCgpOworICAgIHJldHVybiB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlBvc0luU2V0KTsKIH0KICAgICAKIGNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJp
bGl0eU9iamVjdDo6aWRlbnRpZmllckF0dHJpYnV0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNp
b24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTcwOCwxMCArNzA4LDEwIEBAIHB1YmxpYzoKICAg
ICBib29sIGlzTW9kYWxEZXNjZW5kYW50KE5vZGUqKSBjb25zdDsKICAgICBib29sIGlzTW9kYWxO
b2RlKCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBzdXBwb3J0c0FSSUFTZXRTaXplKCkgY29uc3Q7
Ci0gICAgYm9vbCBzdXBwb3J0c0FSSUFQb3NJblNldCgpIGNvbnN0OwotICAgIGludCBhcmlhU2V0
U2l6ZSgpIGNvbnN0OwotICAgIGludCBhcmlhUG9zSW5TZXQoKSBjb25zdDsKKyAgICBib29sIHN1
cHBvcnRzU2V0U2l6ZSgpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNQb3NJblNldCgpIGNvbnN0
OworICAgIGludCBzZXRTaXplKCkgY29uc3Q7CisgICAgaW50IHBvc0luU2V0KCkgY29uc3Q7CiAg
ICAgCiAgICAgLy8gQVJJQSBkcmFnIGFuZCBkcm9wCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRz
QVJJQURyb3BwaW5nKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTg5Niw2ICs4OTYsOSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CiAg
ICAgY29uc3QgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUpIGNv
bnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWUpIGNvbnN0OworICAgIGludCBpbnRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lKSBjb25zdDsKKyAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWUpIGNvbnN0OworICAgIGZsb2F0IGZsb2F0VmFsdWVGb3JQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZSkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2li
bGVQb3NpdGlvblJhbmdlKCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsg
fQogICAgIHZpcnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2VG
b3JMaW5lKHVuc2lnbmVkKSBjb25zdCB7IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGUuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmls
aXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlTm9kZS5oIgogI2luY2x1ZGUgIkVs
ZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxU
YWJsZUNhcHRpb25FbGVtZW50LmgiCkBAIC0xNTMsMTIgKzE1NCwxMiBAQCBib29sIEFjY2Vzc2li
aWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjCiAgICAgCiAgICAgLy8gSWYgdGhlIGF1dGhvciBo
YXMgdXNlZCBBUklBIHRvIHNwZWNpZnkgYSB2YWxpZCBjb2x1bW4gb3Igcm93IGNvdW50LCBhc3N1
bWUgdGhleQogICAgIC8vIHdhbnQgdXMgdG8gdHJlYXQgdGhlIHRhYmxlIGFzIGEgZGF0YSB0YWJs
ZS4KLSAgICBpbnQgYXJpYUNvbHVtbkNvdW50ID0gZ2V0QXR0cmlidXRlKGFyaWFfY29sY291bnRB
dHRyKS50b0ludCgpOwotICAgIGlmIChhcmlhQ29sdW1uQ291bnQgPT0gLTEgfHwgYXJpYUNvbHVt
bkNvdW50ID4gMCkKKyAgICBpbnQgYXhDb2x1bW5Db3VudCA9IGludFZhbHVlRm9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50KTsKKyAgICBpZiAoYXhDb2x1bW5Db3VudCA9PSAtMSB8
fCBheENvbHVtbkNvdW50ID4gMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpbnQgYXJp
YVJvd0NvdW50ID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93Y291bnRBdHRyKS50b0ludCgpOwotICAg
IGlmIChhcmlhUm93Q291bnQgPT0gLTEgfHwgYXJpYVJvd0NvdW50ID4gMCkKKyAgICBpbnQgYXhS
b3dDb3VudCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsK
KyAgICBpZiAoYXhSb3dDb3VudCA9PSAtMSB8fCBheFJvd0NvdW50ID4gMCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBSZW5kZXJUYWJsZSYgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJs
ZT4oKm1fcmVuZGVyZXIpOwpAQCAtMjM0LDI5ICsyMzUsMjkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5
VGFibGU6OmlzRGF0YVRhYmxlKCkgYwogCiAgICAgICAgICAgICAvLyBJZiB0aGUgYXV0aG9yIGhh
cyB1c2VkIEFSSUEgdG8gc3BlY2lmeSBhIHZhbGlkIGNvbHVtbiBvciByb3cgaW5kZXgsIGFzc3Vt
ZSB0aGV5IHdhbnQgdXMKICAgICAgICAgICAgIC8vIHRvIHRyZWF0IHRoZSB0YWJsZSBhcyBhIGRh
dGEgdGFibGUuCi0gICAgICAgICAgICBpbnQgYXJpYUNvbHVtbkluZGV4ID0gY2VsbEVsZW1lbnQt
PmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9jb2xpbmRleEF0dHIpLnRvSW50
KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYUNvbHVtbkluZGV4ID49IDEpCisgICAgICAgICAgICBp
bnQgYXhDb2x1bW5JbmRleCA9IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVl
Rm9yRWxlbWVudCgqY2VsbEVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCk7CisgICAg
ICAgICAgICBpZiAoYXhDb2x1bW5JbmRleCA+PSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgICAgICAgICBpbnQgYXJpYVJvd0luZGV4ID0gY2VsbEVsZW1lbnQtPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9yb3dpbmRleEF0dHIpLnRvSW50KCk7Ci0g
ICAgICAgICAgICBpZiAoYXJpYVJvd0luZGV4ID49IDEpCisgICAgICAgICAgICBpbnQgYXhSb3dJ
bmRleCA9IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgq
Y2VsbEVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dJbmRleCk7CisgICAgICAgICAgICBpZiAo
YXhSb3dJbmRleCA+PSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
ICAgICBpZiAoYXV0byBjZWxsUGFyZW50RWxlbWVudCA9IGNlbGxFbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhcmlhUm93SW5kZXggPSBjZWxsUGFyZW50RWxlbWVu
dC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX3Jvd2luZGV4QXR0cikudG9J
bnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJpYVJvd0luZGV4ID49IDEpCisgICAgICAgICAg
ICAgICAgYXhSb3dJbmRleCA9IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVl
Rm9yRWxlbWVudCgqY2VsbFBhcmVudEVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dJbmRleCk7
CisgICAgICAgICAgICAgICAgaWYgKGF4Um93SW5kZXggPj0gMSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIHRoZSBh
dXRob3IgaGFzIHVzZWQgQVJJQSB0byBzcGVjaWZ5IGEgY29sdW1uIG9yIHJvdyBzcGFuLCB3ZSdy
ZSBzdXBwb3NlZCB0byBpZ25vcmUKICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmb3IgdGhlIHB1
cnBvc2VzIG9mIGV4cG9zaW5nIHRoZSBzcGFuLiBCdXQgYXNzdW1lIHRoZXkgd2FudCB1cyB0byB0
cmVhdCB0aGUKICAgICAgICAgICAgIC8vIHRhYmxlIGFzIGEgZGF0YSB0YWJsZS4KLSAgICAgICAg
ICAgIGludCBhcmlhQ29sdW1uU3BhbiA9IGNlbGxFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKGFyaWFfY29sc3BhbkF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAo
YXJpYUNvbHVtblNwYW4gPj0gMSkKKyAgICAgICAgICAgIGludCBheENvbHVtblNwYW4gPSBBY2Nl
c3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQoKmNlbGxFbGVtZW50
LCBBWFByb3BlcnR5TmFtZTo6Q29sU3Bhbik7CisgICAgICAgICAgICBpZiAoYXhDb2x1bW5TcGFu
ID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGludCBh
cmlhUm93U3BhbiA9IGNlbGxFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGFyaWFfcm93c3BhbkF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYVJvd1NwYW4g
Pj0gMSkKKyAgICAgICAgICAgIGludCBheFJvd1NwYW4gPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0
aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQoKmNlbGxFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
Um93U3Bhbik7CisgICAgICAgICAgICBpZiAoYXhSb3dTcGFuID49IDEpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiByZW5kZXJT
dHlsZSA9IGNlbGwtPnN0eWxlKCk7CkBAIC02OTgsMTEgKzY5OSw5IEBAIFN0cmluZyBBY2Nlc3Np
YmlsaXR5VGFibGU6OnRpdGxlKCkgY29uc3QKICAgICByZXR1cm4gdGl0bGU7CiB9CiAKLWludCBB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFDb2x1bW5Db3VudCgpIGNvbnN0CitpbnQgQWNjZXNzaWJp
bGl0eVRhYmxlOjpheENvbHVtbkNvdW50KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGNvbENvdW50VmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xjb3VudEF0dHIpOwotICAg
IAotICAgIGludCBjb2xDb3VudEludCA9IGNvbENvdW50VmFsdWUudG9JbnQoKTsKKyAgICBpbnQg
Y29sQ291bnRJbnQgPSBpbnRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xDb3Vu
dCk7CiAgICAgLy8gVGhlIEFSSUEgc3BlYyBzdGF0ZXMsICJBdXRob3JzIG11c3Qgc2V0IHRoZSB2
YWx1ZSBvZiBhcmlhLWNvbGNvdW50IHRvIGFuIGludGVnZXIgZXF1YWwgdG8gdGhlCiAgICAgLy8g
bnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGZ1bGwgdGFibGUuIElmIHRoZSB0b3RhbCBudW1iZXIg
b2YgY29sdW1ucyBpcyB1bmtub3duLCBhdXRob3JzIG11c3QKICAgICAvLyBzZXQgdGhlIHZhbHVl
IG9mIGFyaWEtY29sY291bnQgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdmFsdWUgc2hvdWxk
IG5vdCBiZSBjYWxjdWxhdGVkIGJ5CkBAIC03MTMsMTEgKzcxMiw5IEBAIGludCBBY2Nlc3NpYmls
aXR5VGFibGU6OmFyaWFDb2x1bW5Db3VudCgKICAgICByZXR1cm4gMDsKIH0KIAotaW50IEFjY2Vz
c2liaWxpdHlUYWJsZTo6YXJpYVJvd0NvdW50KCkgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFi
bGU6OmF4Um93Q291bnQoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcm93Q291
bnRWYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3Jvd2NvdW50QXR0cik7Ci0gICAgCi0gICAgaW50
IHJvd0NvdW50SW50ID0gcm93Q291bnRWYWx1ZS50b0ludCgpOworICAgIGludCByb3dDb3VudElu
dCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKICAgICAv
LyBUaGUgQVJJQSBzcGVjIHN0YXRlcywgIkF1dGhvcnMgbXVzdCBzZXQgdGhlIHZhbHVlIG9mIGFy
aWEtcm93Y291bnQgdG8gYW4gaW50ZWdlciBlcXVhbCB0byB0aGUKICAgICAvLyBudW1iZXIgb2Yg
cm93cyBpbiB0aGUgZnVsbCB0YWJsZS4gSWYgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGlzIHVu
a25vd24sIGF1dGhvcnMgbXVzdCBzZXQKICAgICAvLyB0aGUgdmFsdWUgb2YgYXJpYS1yb3djb3Vu
dCB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGNhbGN1bGF0
ZWQgYnkgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlLmgJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDgg
Kzc0LDggQEAgcHVibGljOgogICAgIC8vIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHko
KSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRo
ZSBwbGF0Zm9ybS4KICAgICBib29sIGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBj
b25zdDsKICAgICAKLSAgICBpbnQgYXJpYUNvbHVtbkNvdW50KCkgY29uc3Q7Ci0gICAgaW50IGFy
aWFSb3dDb3VudCgpIGNvbnN0OworICAgIGludCBheENvbHVtbkNvdW50KCkgY29uc3Q7CisgICAg
aW50IGF4Um93Q291bnQoKSBjb25zdDsKIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEFjY2Vz
c2liaWxpdHlUYWJsZShSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAkocmV2aXNp
b24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUg
IkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlTm9kZS5o
IgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00NCw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OkFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICA6IEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QocmVuZGVyZXIpCi0gICAgLCBtX2FyaWFDb2xJbmRleEZyb21Sb3coLTEpCisgICAgLCBt
X2F4Q29sSW5kZXhGcm9tUm93KC0xKQogewogfQogCkBAIC0zMjAsNyArMzIxLDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJhbgogICAgIC8vIEFSSUEgMS4xJ3MgYXJp
YS1yb3dzcGFuIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBmb3IgY2VsbHMgYW5kIGdyaWRjZWxscyB3
aGljaCBhcmUgbm90IGNvbnRhaW5lZAogICAgIC8vIGluIGEgbmF0aXZlIHRhYmxlLiBCdXQgaWYg
d2UgaGF2ZSBhIHZhbGlkIGF1dGhvci1wcm92aWRlZCB2YWx1ZSBhbmQgZG8gbm90IGhhdmUgYW4g
ZXhwbGljaXQKICAgICAvLyBuYXRpdmUgaG9zdCBsYW5ndWFnZSB2YWx1ZSBmb3IgdGhlIHJvd3Nw
YW4sIGV4cG9zZSB0aGUgQVJJQSB2YWx1ZS4KLSAgICByb3dSYW5nZS5zZWNvbmQgPSBhcmlhUm93
U3BhbigpOworICAgIHJvd1JhbmdlLnNlY29uZCA9IGF4Um93U3BhbigpOwogICAgIGlmIChzdGF0
aWNfY2FzdDxpbnQ+KHJvd1JhbmdlLnNlY29uZCkgPT0gLTEpCiAgICAgICAgIHJvd1JhbmdlLnNl
Y29uZCA9IHJlbmRlckNlbGwucm93U3BhbigpOwogICAgIApAQCAtMzM5LDcgKzM0MCw3IEBAIHZv
aWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1uSW5kZXgKICAgICAvLyBBUklBIDEuMSdz
IGFyaWEtY29sc3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIGNlbGxzIGFuZCBncmlkY2Vs
bHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQKICAgICAvLyBpbiBhIG5hdGl2ZSB0YWJsZS4gQnV0
IGlmIHdlIGhhdmUgYSB2YWxpZCBhdXRob3ItcHJvdmlkZWQgdmFsdWUgYW5kIGRvIG5vdCBoYXZl
IGFuIGV4cGxpY2l0CiAgICAgLy8gbmF0aXZlIGhvc3QgbGFuZ3VhZ2UgdmFsdWUgZm9yIHRoZSBj
b2xzcGFuLCBleHBvc2UgdGhlIEFSSUEgdmFsdWUuCi0gICAgY29sdW1uUmFuZ2Uuc2Vjb25kID0g
YXJpYUNvbHVtblNwYW4oKTsKKyAgICBjb2x1bW5SYW5nZS5zZWNvbmQgPSBheENvbHVtblNwYW4o
KTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pihjb2x1bW5SYW5nZS5zZWNvbmQpICE9IC0xKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTM4Myw2NiArMzg0LDY2IEBAIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIEFjY2Vzc2liaWxpdHlUYWJsZUMKICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRP
ckNyZWF0ZShoZWFkZXJDZWxsKTsKIH0KICAgICAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
OjphcmlhQ29sdW1uSW5kZXgoKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4
Q29sdW1uSW5kZXgoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29sSW5kZXhW
YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX2NvbGluZGV4QXR0cik7Ci0gICAgaWYgKGNvbEluZGV4
VmFsdWUudG9JbnQoKSA+PSAxKQotICAgICAgICByZXR1cm4gY29sSW5kZXhWYWx1ZS50b0ludCgp
OworICAgIHVuc2lnbmVkIGNvbEluZGV4VmFsdWUgPSB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkNvbEluZGV4KTsKKyAgICBpZiAoY29sSW5kZXhWYWx1ZSA+PSAxKQor
ICAgICAgICByZXR1cm4gY29sSW5kZXhWYWx1ZTsKICAgICAKICAgICAvLyAiQVJJQSAxLjE6IElm
IHRoZSBzZXQgb2YgY29sdW1ucyB3aGljaCBpcyBwcmVzZW50IGluIHRoZSBET00gaXMgY29udGln
dW91cywgYW5kIGlmIHRoZXJlIGFyZSBubyBjZWxscyB3aGljaCBzcGFuIG1vcmUgdGhhbiBvbmUg
cm93CiAgICAgLy8gb3IgY29sdW1uIGluIHRoYXQgc2V0LCB0aGVuIGF1dGhvcnMgbWF5IHBsYWNl
IGFyaWEtY29saW5kZXggb24gZWFjaCByb3csIHNldHRpbmcgdGhlIHZhbHVlIHRvIHRoZSBpbmRl
eCBvZiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBzZXQuIgogICAgIC8vIEhlcmUsIHdlIGxldCBp
dHMgcGFyZW50IHJvdyB0byBzZXQgaXRzIGluZGV4IGJlZm9yZWhhbmQsIHNvIHdlIGRvbid0IGhh
dmUgdG8gZ28gdGhyb3VnaCB0aGUgc2libGluZ3MgdG8gY2FsY3VsYXRlIHRoZSBpbmRleC4KICAg
ICBBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIHBhcmVudFJvdyA9IHRoaXMtPnBhcmVudFJvdygpOwot
ICAgIGlmIChwYXJlbnRSb3cgJiYgbV9hcmlhQ29sSW5kZXhGcm9tUm93ICE9IC0xKQotICAgICAg
ICByZXR1cm4gbV9hcmlhQ29sSW5kZXhGcm9tUm93OworICAgIGlmIChwYXJlbnRSb3cgJiYgbV9h
eENvbEluZGV4RnJvbVJvdyAhPSAtMSkKKyAgICAgICAgcmV0dXJuIG1fYXhDb2xJbmRleEZyb21S
b3c7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogICAgIAotaW50IEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGw6OmFyaWFSb3dJbmRleCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6
YXhSb3dJbmRleCgpIGNvbnN0CiB7CiAgICAgLy8gQVJJQSAxLjE6IEF1dGhvcnMgc2hvdWxkIHBs
YWNlIGFyaWEtcm93aW5kZXggb24gZWFjaCByb3cuIEF1dGhvcnMgbWF5IGFsc28gcGxhY2UKICAg
ICAvLyBhcmlhLXJvd2luZGV4IG9uIGFsbCBvZiB0aGUgY2hpbGRyZW4gb3Igb3duZWQgZWxlbWVu
dHMgb2YgZWFjaCByb3cuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3dJbmRleFZhbHVlID0g
Z2V0QXR0cmlidXRlKGFyaWFfcm93aW5kZXhBdHRyKTsKLSAgICBpZiAocm93SW5kZXhWYWx1ZS50
b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiByb3dJbmRleFZhbHVlLnRvSW50KCk7CisgICAg
dW5zaWduZWQgcm93SW5kZXhWYWx1ZSA9IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZTo6Um93SW5kZXgpOworICAgIGlmIChyb3dJbmRleFZhbHVlID49IDEpCisgICAgICAg
IHJldHVybiByb3dJbmRleFZhbHVlOwogICAgIAogICAgIGlmIChBY2Nlc3NpYmlsaXR5VGFibGVS
b3cqIHBhcmVudFJvdyA9IHRoaXMtPnBhcmVudFJvdygpKQotICAgICAgICByZXR1cm4gcGFyZW50
Um93LT5hcmlhUm93SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIHBhcmVudFJvdy0+YXhSb3dJbmRl
eCgpOwogICAgIAogICAgIHJldHVybiAtMTsKIH0KIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OmFyaWFDb2x1bW5TcGFuKCkgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjph
eENvbHVtblNwYW4oKSBjb25zdAogewogICAgIC8vIEFjY29yZGluZyB0byB0aGUgQVJJQSBzcGVj
LCAiSWYgYXJpYS1jb2xwYW4gaXMgdXNlZCBvbiBhbiBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9z
dCBsYW5ndWFnZQogICAgIC8vIHByb3ZpZGVzIGFuIGVxdWl2YWxlbnQgYXR0cmlidXRlLCB1c2Vy
IGFnZW50cyBtdXN0IGlnbm9yZSB0aGUgdmFsdWUgb2YgYXJpYS1jb2xzcGFuLiIKICAgICBpZiAo
aGFzQXR0cmlidXRlKGNvbHNwYW5BdHRyKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBjb2xTcGFuVmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xzcGFu
QXR0cik7CisgICAgdW5zaWduZWQgY29sU3BhblZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKICAgICAvLyBBUklBIDEuMTogQXV0aG9ycyBt
dXN0IHNldCB0aGUgdmFsdWUgb2YgYXJpYS1jb2xzcGFuIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0
aGFuIG9yIGVxdWFsIHRvIDEuCi0gICAgaWYgKGNvbFNwYW5WYWx1ZS50b0ludCgpID49IDEpCi0g
ICAgICAgIHJldHVybiBjb2xTcGFuVmFsdWUudG9JbnQoKTsKKyAgICBpZiAoY29sU3BhblZhbHVl
ID49IDEpCisgICAgICAgIHJldHVybiBjb2xTcGFuVmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0x
OwogfQogCi1pbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYVJvd1NwYW4oKSBjb25zdAor
aW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Um93U3BhbigpIGNvbnN0CiB7CiAgICAgLy8g
QWNjb3JkaW5nIHRvIHRoZSBBUklBIHNwZWMsICJJZiBhcmlhLXJvd3NwYW4gaXMgdXNlZCBvbiBh
biBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBsYW5ndWFnZQogICAgIC8vIHByb3ZpZGVzIGFu
IGVxdWl2YWxlbnQgYXR0cmlidXRlLCB1c2VyIGFnZW50cyBtdXN0IGlnbm9yZSB0aGUgdmFsdWUg
b2YgYXJpYS1yb3dzcGFuLiIKICAgICBpZiAoaGFzQXR0cmlidXRlKHJvd3NwYW5BdHRyKSkKICAg
ICAgICAgcmV0dXJuIC0xOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3dTcGFuVmFsdWUg
PSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3dzcGFuQXR0cik7CisgICAgdW5zaWduZWQgcm93U3BhblZh
bHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuKTsK
ICAgICAKICAgICAvLyBBUklBIDEuMTogQXV0aG9ycyBtdXN0IHNldCB0aGUgdmFsdWUgb2YgYXJp
YS1yb3dzcGFuIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuCiAgICAg
Ly8gU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2VsbCBvciBncmlk
Y2VsbCBpcyB0byBzcGFuIGFsbCB0aGUgcmVtYWluaW5nIHJvd3MgaW4gdGhlIHJvdyBncm91cC4K
LSAgICBpZiAocm93U3BhblZhbHVlID09ICIwIikKKyAgICBpZiAoaGFzUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OlJvd1NwYW4pICYmICFyb3dTcGFuVmFsdWUpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmIChyb3dTcGFuVmFsdWUudG9JbnQoKSA+PSAxKQotICAgICAgICByZXR1cm4gcm93U3Bh
blZhbHVlLnRvSW50KCk7CisgICAgaWYgKHJvd1NwYW5WYWx1ZSA+PSAxKQorICAgICAgICByZXR1
cm4gcm93U3BhblZhbHVlOwogICAgIAogICAgIHJldHVybiAtMTsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5o
CShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1
YmxpYzoKICAgICB2b2lkIGNvbHVtbkhlYWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
Jik7CiAgICAgdm9pZCByb3dIZWFkZXJzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwog
ICAgIAotICAgIGludCBhcmlhQ29sdW1uSW5kZXgoKSBjb25zdDsKLSAgICBpbnQgYXJpYVJvd0lu
ZGV4KCkgY29uc3Q7Ci0gICAgaW50IGFyaWFDb2x1bW5TcGFuKCkgY29uc3Q7Ci0gICAgaW50IGFy
aWFSb3dTcGFuKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBUklBQ29sSW5kZXhGcm9tUm93KGludCBp
bmRleCkgeyBtX2FyaWFDb2xJbmRleEZyb21Sb3cgPSBpbmRleDsgfQorICAgIGludCBheENvbHVt
bkluZGV4KCkgY29uc3Q7CisgICAgaW50IGF4Um93SW5kZXgoKSBjb25zdDsKKyAgICBpbnQgYXhD
b2x1bW5TcGFuKCkgY29uc3Q7CisgICAgaW50IGF4Um93U3BhbigpIGNvbnN0OworICAgIHZvaWQg
c2V0QVhDb2xJbmRleEZyb21Sb3coaW50IGluZGV4KSB7IG1fYXhDb2xJbmRleEZyb21Sb3cgPSBp
bmRleDsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bChSZW5kZXJPYmplY3QqKTsKQEAgLTY3LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEFjY2Vz
c2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkgZmluYWw7CiAKICAgICBp
bnQgbV9yb3dJbmRleDsKLSAgICBpbnQgbV9hcmlhQ29sSW5kZXhGcm9tUm93OworICAgIGludCBt
X2F4Q29sSW5kZXhGcm9tUm93OwogCiBwcml2YXRlOgogICAgIC8vIElmIGEgdGFibGUgY2VsbCBp
cyBub3QgZXhwb3NlZCBhcyBhIHRhYmxlIGNlbGwsIGEgVEggZWxlbWVudCBjYW4gc2VydmUgYXMg
aXRzIHRpdGxlIFVJIGVsZW1lbnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuY3BwCShyZXZpc2lvbiAyMjQ5OTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbC5oIgorI2luY2x1ZGUgIkFjY2Vzc2libGVOb2RlLmgiCiAjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTUzLDM0ICsxNTQsMzQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5VGFibGVSb3c6OmFkZENoaWxkcmVuKAogICAgIAogICAgIC8vICJBUklBIDEuMSwgSWYgdGhl
IHNldCBvZiBjb2x1bW5zIHdoaWNoIGlzIHByZXNlbnQgaW4gdGhlIERPTSBpcyBjb250aWd1b3Vz
LCBhbmQgaWYgdGhlcmUgYXJlIG5vIGNlbGxzIHdoaWNoIHNwYW4gbW9yZSB0aGFuIG9uZSByb3cg
b3IKICAgICAvLyBjb2x1bW4gaW4gdGhhdCBzZXQsIHRoZW4gYXV0aG9ycyBtYXkgcGxhY2UgYXJp
YS1jb2xpbmRleCBvbiBlYWNoIHJvdywgc2V0dGluZyB0aGUgdmFsdWUgdG8gdGhlIGluZGV4IG9m
IHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHNldC4iCi0gICAgLy8gVXBkYXRlIGNoaWxkIGNlbGxz
JyBhcmlhQ29sSW5kZXggaWYgdGhlcmUncyBhbiBhcmlhLWNvbGluZGV4IHZhbHVlIHNldCBmb3Ig
dGhlIHJvdy4gU28gdGhlIGNlbGwgZG9lc24ndCBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNpYmxp
bmdzCisgICAgLy8gVXBkYXRlIGNoaWxkIGNlbGxzJyBheENvbEluZGV4IGlmIHRoZXJlJ3MgYW4g
YXJpYS1jb2xpbmRleCB2YWx1ZSBzZXQgZm9yIHRoZSByb3cuIFNvIHRoZSBjZWxsIGRvZXNuJ3Qg
aGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzaWJsaW5ncwogICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUg
aW5kZXguCi0gICAgaW50IGNvbEluZGV4ID0gYXJpYUNvbHVtbkluZGV4KCk7CisgICAgaW50IGNv
bEluZGV4ID0gYXhDb2x1bW5JbmRleCgpOwogICAgIGlmIChjb2xJbmRleCA9PSAtMSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGNlbGwgOiBjaGlsZHJlbigpKSB7CiAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsPigqY2VsbCkpCi0gICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsPigqY2VsbCkuc2V0QVJJQUNvbEluZGV4RnJvbVJvdyhjb2xJbmRleCArIGluZGV4KTsK
KyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjZWxsKS5zZXRB
WENvbEluZGV4RnJvbVJvdyhjb2xJbmRleCArIGluZGV4KTsKICAgICAgICAgaW5kZXgrKzsKICAg
ICB9CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmFyaWFDb2x1bW5JbmRleCgpIGNv
bnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjpheENvbHVtbkluZGV4KCkgY29uc3QKIHsK
LSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbEluZGV4VmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJp
YV9jb2xpbmRleEF0dHIpOwotICAgIGlmIChjb2xJbmRleFZhbHVlLnRvSW50KCkgPj0gMSkKLSAg
ICAgICAgcmV0dXJuIGNvbEluZGV4VmFsdWUudG9JbnQoKTsKKyAgICB1bnNpZ25lZCBjb2xJbmRl
eFZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xJbmRl
eCk7CisgICAgaWYgKGNvbEluZGV4VmFsdWUgPj0gMSkKKyAgICAgICAgcmV0dXJuIGNvbEluZGV4
VmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0eVRhYmxl
Um93OjphcmlhUm93SW5kZXgoKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXhS
b3dJbmRleCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiByb3dJbmRleFZhbHVl
ID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93aW5kZXhBdHRyKTsKLSAgICBpZiAocm93SW5kZXhWYWx1
ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiByb3dJbmRleFZhbHVlLnRvSW50KCk7Cisg
ICAgdW5zaWduZWQgcm93SW5kZXhWYWx1ZSA9IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6Um93SW5kZXgpOworICAgIGlmIChyb3dJbmRleFZhbHVlID49IDEpCisgICAg
ICAgIHJldHVybiByb3dJbmRleFZhbHVlOwogICAgIAogICAgIHJldHVybiAtMTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFi
bGVSb3cuaAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRDaGlsZHJlbigpIG92ZXJyaWRlOwogICAgIAot
ICAgIGludCBhcmlhQ29sdW1uSW5kZXgoKSBjb25zdDsKLSAgICBpbnQgYXJpYVJvd0luZGV4KCkg
Y29uc3Q7CisgICAgaW50IGF4Q29sdW1uSW5kZXgoKSBjb25zdDsKKyAgICBpbnQgYXhSb3dJbmRl
eCgpIGNvbnN0OwogICAgIAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlU
YWJsZVJvdyhSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDksNiArNDksOSBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1h
CiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpBdXRvY29tcGxldGUsIGFyaWFfYXV0b2Nv
bXBsZXRlQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6QnVzeSwgYXJpYV9i
dXN5QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Q2hlY2tlZCwgYXJpYV9j
aGVja2VkQXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQsIGFy
aWFfY29sY291bnRBdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDb2xJbmRl
eCwgYXJpYV9jb2xpbmRleEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkNv
bFNwYW4sIGFyaWFfY29sc3BhbkF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OkN1cnJlbnQsIGFyaWFfY3VycmVudEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5h
bWU6OkRpc2FibGVkLCBhcmlhX2Rpc2FibGVkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3Bl
cnR5TmFtZTo6RXhwYW5kZWQsIGFyaWFfZXhwYW5kZWRBdHRyIH0sCkBAIC01NywyMCArNjAsMjkg
QEAgc3RhdGljIEFSSUFBdHRyaWJ1dGVNYXAmIGFyaWFBdHRyaWJ1dGVNYQogICAgICAgICAgICAg
eyBBWFByb3BlcnR5TmFtZTo6SW52YWxpZCwgYXJpYV9pbnZhbGlkQXR0ciB9LAogICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6S2V5U2hvcnRjdXRzLCBhcmlhX2tleXNob3J0Y3V0c0F0dHIg
fSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkxhYmVsLCBhcmlhX2xhYmVsQXR0ciB9
LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6TGV2ZWwsIGFyaWFfbGV2ZWxBdHRyIH0s
CiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpMaXZlLCBhcmlhX2xpdmVBdHRyIH0sCiAg
ICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpNb2RhbCwgYXJpYV9tb2RhbEF0dHIgfSwKICAg
ICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSwgYXJpYV9tdWx0aWxpbmVBdHRy
IH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUsIGFyaWFf
bXVsdGlzZWxlY3RhYmxlQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6T3Jp
ZW50YXRpb24sIGFyaWFfb3JpZW50YXRpb25BdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVy
dHlOYW1lOjpQbGFjZWhvbGRlciwgYXJpYV9wbGFjZWhvbGRlckF0dHIgfSwKKyAgICAgICAgICAg
IHsgQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0LCBhcmlhX3Bvc2luc2V0QXR0ciB9LAogICAgICAg
ICAgICAgeyBBWFByb3BlcnR5TmFtZTo6UHJlc3NlZCwgYXJpYV9wcmVzc2VkQXR0ciB9LAogICAg
ICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHksIGFyaWFfcmVhZG9ubHlBdHRyIH0s
CiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpSZWxldmFudCwgYXJpYV9yZWxldmFudEF0
dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJlcXVpcmVkLCBhcmlhX3JlcXVp
cmVkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Um9sZSwgcm9sZUF0dHIg
fSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbiwgYXJpYV9y
b2xlZGVzY3JpcHRpb25BdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpSb3dD
b3VudCwgYXJpYV9yb3djb3VudEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OlJvd0luZGV4LCBhcmlhX3Jvd2luZGV4QXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5
TmFtZTo6Um93U3BhbiwgYXJpYV9yb3dzcGFuQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3Bl
cnR5TmFtZTo6U2VsZWN0ZWQsIGFyaWFfc2VsZWN0ZWRBdHRyIH0sCisgICAgICAgICAgICB7IEFY
UHJvcGVydHlOYW1lOjpTZXRTaXplLCBhcmlhX3NldHNpemVBdHRyIH0sCiAgICAgICAgICAgICB7
IEFYUHJvcGVydHlOYW1lOjpTb3J0LCBhcmlhX3NvcnRBdHRyIH0sCisgICAgICAgICAgICB7IEFY
UHJvcGVydHlOYW1lOjpWYWx1ZU1heCwgYXJpYV92YWx1ZW1heEF0dHIgfSwKKyAgICAgICAgICAg
IHsgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluLCBhcmlhX3ZhbHVlbWluQXR0ciB9LAorICAgICAg
ICAgICAgeyBBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3csIGFyaWFfdmFsdWVub3dBdHRyIH0sCiAg
ICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpWYWx1ZVRleHQsIGFyaWFfdmFsdWV0ZXh0QXR0
ciB9CiAgICAgICAgIH07CiAgICAgICAgIEFSSUFBdHRyaWJ1dGVNYXAgbWFwOwpAQCAtMTI2LDYg
KzEzOCw0NSBAQCBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVCb29sZWFuKEFYUHJvCiAgICAg
fQogfQogCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVJbnQoQVhQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQoreworICAgIHN3aXRjaCAocHJvcGVydHlOYW1lKSB7CisgICAgY2FzZSBBWFBy
b3BlcnR5TmFtZTo6Q29sQ291bnQ6CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Um93Q291bnQ6
CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6U2V0U2l6ZToKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGlj
IGJvb2wgaXNQcm9wZXJ0eVZhbHVlVW5zaWduZWQoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQoreworICAgIHN3aXRjaCAocHJvcGVydHlOYW1lKSB7CisgICAgY2FzZSBBWFByb3BlcnR5TmFt
ZTo6Q29sSW5kZXg6CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Q29sU3BhbjoKKyAgICBjYXNl
IEFYUHJvcGVydHlOYW1lOjpMZXZlbDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpQb3NJblNl
dDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpSb3dJbmRleDoKKyAgICBjYXNlIEFYUHJvcGVy
dHlOYW1lOjpSb3dTcGFuOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFs
dWVGbG9hdChBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgc3dpdGNoIChwcm9w
ZXJ0eU5hbWUpIHsKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heDoKKyAgICBjYXNl
IEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1pbjoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1
ZU5vdzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogYm9vbCBBY2Nlc3NpYmxlTm9kZTo6aGFzUHJvcGVydHkoRWxl
bWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGlmIChh
dXRvKiBhY2Nlc3NpYmxlTm9kZSA9IGVsZW1lbnQuZXhpc3RpbmdBY2Nlc3NpYmxlTm9kZSgpKSB7
CkBAIC0xNDksNiArMjAwLDE1IEBAIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50IEFjY2Vzc2li
bGVOb2QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0
UHJvcGVydHkoYm9vbCBzaG91bGRSZW1vdmUsIFByb3BlcnR5VmFsdWVWYXJpYW50JiYgdmFsdWUs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7
CisgICAgICAgIG1fcHJvcGVydHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9wcm9wZXJ0eU1hcC5zZXQocHJvcGVydHlOYW1lLCB2YWx1ZSk7
Cit9CisKIGNvbnN0IFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlU3RyaW5nVmFsdWVG
b3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShlbGVt
ZW50LCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTY5LDE4ICsyMjksMjAgQEAgY29uc3QgU3RyaW5nIEFj
Y2Vzc2libGVOb2RlOjpzdHJpbmdWYWx1ZQogICAgIHJldHVybiBudWxsQXRvbSgpOwogfQogCi12
b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eShjb25zdCBTdHJpbmcmIHZhbHVl
LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Rk
OjpvcHRpb25hbDxUPiBBY2Nlc3NpYmxlTm9kZTo6b3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5KEVs
ZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAo
dmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fcHJvcGVydHlNYXAucmVtb3ZlKHByb3BlcnR5
TmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9wcm9wZXJ0eU1hcC5zZXQocHJv
cGVydHlOYW1lLCB2YWx1ZSk7CisgICAgY29uc3QgUHJvcGVydHlWYWx1ZVZhcmlhbnQmJiB2YXJp
YW50ID0gQWNjZXNzaWJsZU5vZGU6OnZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlO
YW1lKTsKKyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6Om51bGxwdHJfdD4odmFy
aWFudCkpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8VD4odmFyaWFudCkpCisgICAgICAgIHJldHVybiBXVEY6OmdldDxUPih2YXJp
YW50KTsKKyAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+
IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVCb29sVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmIGVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBzdGQ6Om9wdGlvbmFs
PGJvb2w+IHZhbHVlID0gYm9vbFZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1l
KTsKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlID0gb3B0aW9uYWxWYWx1ZUZvclByb3Bl
cnR5PGJvb2w+KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKHZhbHVlKQogICAgICAg
ICByZXR1cm4gKnZhbHVlOwogCkBAIC0xOTUsMjMgKzI1Nyw0MCBAQCBzdGQ6Om9wdGlvbmFsPGJv
b2w+IEFjY2Vzc2libGVOb2RlOjplZmZlCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAot
c3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6Ym9vbFZhbHVlRm9yUHJvcGVydHko
RWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoraW50IEFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
QVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIGNvbnN0IFByb3BlcnR5VmFsdWVW
YXJpYW50JiYgdmFyaWFudCA9IEFjY2Vzc2libGVOb2RlOjp2YWx1ZUZvclByb3BlcnR5KGVsZW1l
bnQsIHByb3BlcnR5TmFtZSk7Ci0gICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpu
dWxscHRyX3Q+KHZhcmlhbnQpKQotICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+KHZhcmlhbnQpKQotICAgICAgICByZXR1cm4g
V1RGOjpnZXQ8Ym9vbD4odmFyaWFudCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICBz
dGQ6Om9wdGlvbmFsPGludD4gdmFsdWUgPSBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8aW50Pihl
bGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJuICp2
YWx1ZTsKKworICAgIGlmIChhcmlhQXR0cmlidXRlTWFwKCkuY29udGFpbnMocHJvcGVydHlOYW1l
KSAmJiBpc1Byb3BlcnR5VmFsdWVJbnQocHJvcGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhQXR0cmlidXRlTWFwKCku
Z2V0KHByb3BlcnR5TmFtZSkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0Qm9vbFByb3BlcnR5KHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3Vuc2lnbmVkIEFjY2Vzc2libGVOb2RlOjpl
ZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBBWFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKCF2YWx1ZSkgewotICAgICAgICBtX3By
b3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fcHJvcGVydHlNYXAuc2V0KHByb3BlcnR5TmFtZSwgKnZhbHVlKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25l
ZD4oZWxlbWVudCwgcHJvcGVydHlOYW1lKTsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHJldHVy
biAqdmFsdWU7CisKKyAgICBpZiAoYXJpYUF0dHJpYnV0ZU1hcCgpLmNvbnRhaW5zKHByb3BlcnR5
TmFtZSkgJiYgaXNQcm9wZXJ0eVZhbHVlVW5zaWduZWQocHJvcGVydHlOYW1lKSkKKyAgICAgICAg
cmV0dXJuIGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhQXR0cmli
dXRlTWFwKCkuZ2V0KHByb3BlcnR5TmFtZSkpLnRvSW50KCk7CisKKyAgICByZXR1cm4gMDsKK30K
KworZmxvYXQgQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUZsb2F0VmFsdWVGb3JFbGVtZW50KEVs
ZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBzdGQ6
Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWUgPSBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8ZG91Ymxl
PihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJu
ICp2YWx1ZTsKKworICAgIGlmIChhcmlhQXR0cmlidXRlTWFwKCkuY29udGFpbnMocHJvcGVydHlO
YW1lKSAmJiBpc1Byb3BlcnR5VmFsdWVGbG9hdChwcm9wZXJ0eU5hbWUpKQorICAgICAgICByZXR1
cm4gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRyaWJ1dGVN
YXAoKS5nZXQocHJvcGVydHlOYW1lKSkudG9GbG9hdCgpOworCisgICAgcmV0dXJuIDAuMGY7CiB9
CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6Om5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkKQEAgLTIyMiwxMiArMzAxLDEyIEBAIHZvaWQgQWNj
ZXNzaWJsZU5vZGU6Om5vdGlmeUF0dHJpYnV0ZUNoYW4KIAogc3RkOjpvcHRpb25hbDxib29sPiBB
Y2Nlc3NpYmxlTm9kZTo6YXRvbWljKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9y
UHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpBdG9taWMpOworICAgIHJl
dHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpBdG9taWMpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRBdG9taWMo
c3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUs
IEFYUHJvcGVydHlOYW1lOjpBdG9taWMpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFs
dWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYyk7CiAgICAgbm90aWZ5
QXR0cmlidXRlQ2hhbmdlZChhcmlhX2F0b21pY0F0dHIpOwogfQogCkBAIC0yMzgsMTggKzMxNywx
OCBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmF1dG9jb21wbGV0ZSgpIGNvCiAKIHZvaWQgQWNj
ZXNzaWJsZU5vZGU6OnNldEF1dG9jb21wbGV0ZShjb25zdCBTdHJpbmcmIGF1dG9jb21wbGV0ZSkK
IHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShhdXRvY29tcGxldGUsIEFYUHJvcGVydHlOYW1lOjpB
dXRvY29tcGxldGUpOworICAgIHNldFByb3BlcnR5KGF1dG9jb21wbGV0ZS5pc0VtcHR5KCksIGF1
dG9jb21wbGV0ZSwgQVhQcm9wZXJ0eU5hbWU6OkF1dG9jb21wbGV0ZSk7CiAgICAgbm90aWZ5QXR0
cmlidXRlQ2hhbmdlZChhcmlhX2F1dG9jb21wbGV0ZUF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFs
PGJvb2w+IEFjY2Vzc2libGVOb2RlOjpidXN5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZh
bHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpCdXN5KTsKKyAg
ICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBB
WFByb3BlcnR5TmFtZTo6QnVzeSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEJ1c3ko
c3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUs
IEFYUHJvcGVydHlOYW1lOjpCdXN5KTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVl
KCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpCdXN5KTsKICAgICBub3RpZnlBdHRy
aWJ1dGVDaGFuZ2VkKGFyaWFfYnVzeUF0dHIpOwogfQogCkBAIC0yNjAsMTAgKzMzOSw0MyBAQCBT
dHJpbmcgQWNjZXNzaWJsZU5vZGU6OmNoZWNrZWQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVO
b2RlOjpzZXRDaGVja2VkKGNvbnN0IFN0cmluZyYgY2hlY2tlZCkKIHsKLSAgICBzZXRTdHJpbmdQ
cm9wZXJ0eShjaGVja2VkLCBBWFByb3BlcnR5TmFtZTo6Q2hlY2tlZCk7CisgICAgc2V0UHJvcGVy
dHkoY2hlY2tlZC5pc0VtcHR5KCksIGNoZWNrZWQsIEFYUHJvcGVydHlOYW1lOjpDaGVja2VkKTsK
ICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY2hlY2tlZEF0dHIpOwogfQogCitzdGQ6
Om9wdGlvbmFsPGludD4gQWNjZXNzaWJsZU5vZGU6OmNvbENvdW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGludD4obV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpDb2xDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldENvbENv
dW50KHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUu
aGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7Cisg
ICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2NvbGNvdW50QXR0cik7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpjb2xJbmRleCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1l
bnQsIEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6
OnNldENvbEluZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQoreworICAgIHNldFBy
b3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6
OkNvbEluZGV4KTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY29saW5kZXhBdHRy
KTsKK30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OmNvbFNwYW4o
KSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+
KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sU3Bhbik7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJsZU5vZGU6OnNldENvbFNwYW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7
CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFBy
b3BlcnR5TmFtZTo6Q29sU3Bhbik7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2Nv
bHNwYW5BdHRyKTsKK30KKwogU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpjdXJyZW50KCkgY29uc3QK
IHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OkN1cnJlbnQpOwpAQCAtMjcxLDI5ICszODMsMjkgQEAgU3RyaW5nIEFjY2Vz
c2libGVOb2RlOjpjdXJyZW50KCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0Q3Vy
cmVudChjb25zdCBTdHJpbmcmIGN1cnJlbnQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkoY3Vy
cmVudCwgQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnQpOworICAgIHNldFByb3BlcnR5KGN1cnJlbnQu
aXNFbXB0eSgpLCBjdXJyZW50LCBBWFByb3BlcnR5TmFtZTo6Q3VycmVudCk7CiAgICAgbm90aWZ5
QXR0cmlidXRlQ2hhbmdlZChhcmlhX2N1cnJlbnRBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxi
b29sPiBBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQoKSBjb25zdAogewotICAgIHJldHVybiBib29s
VmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkRpc2FibGVk
KTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVt
ZW50LCBBWFByb3BlcnR5TmFtZTo6RGlzYWJsZWQpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2Rl
OjpzZXREaXNhYmxlZChzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQ
cm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OkRpc2FibGVkKTsKKyAgICBzZXRQcm9wZXJ0
eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpEaXNh
YmxlZCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2Rpc2FibGVkQXR0cik7CiB9
CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OmV4cGFuZGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpFeHBhbmRlZCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0
eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVkKTsKIH0KIAog
dm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RXhwYW5kZWQoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1
ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpFeHBhbmRl
ZCk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBB
WFByb3BlcnR5TmFtZTo6RXhwYW5kZWQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJp
YV9leHBhbmRlZEF0dHIpOwogfQogCkBAIC0zMDQsMTggKzQxNiwxOCBAQCBTdHJpbmcgQWNjZXNz
aWJsZU5vZGU6Omhhc1BvcFVwKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0SGFz
UG9wVXAoY29uc3QgU3RyaW5nJiBoYXNQb3BVcCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eSho
YXNQb3BVcCwgQVhQcm9wZXJ0eU5hbWU6Okhhc1BvcFVwKTsKKyAgICBzZXRQcm9wZXJ0eShoYXNQ
b3BVcC5pc0VtcHR5KCksIGhhc1BvcFVwLCBBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXApOwogICAg
IG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9oYXNwb3B1cEF0dHIpOwogfQogCiBzdGQ6Om9w
dGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjpoaWRkZW4oKSBjb25zdAogewotICAgIHJldHVy
biBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Okhp
ZGRlbik7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVy
RWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbik7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5v
ZGU6OnNldEhpZGRlbihzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQ
cm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbik7CisgICAgc2V0UHJvcGVydHko
IXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6SGlkZGVu
KTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfaGlkZGVuQXR0cik7CiB9CiAKQEAg
LTMyNiw3ICs0MzgsNyBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmludmFsaWQoKSBjb25zdAog
CiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRJbnZhbGlkKGNvbnN0IFN0cmluZyYgaW52YWxpZCkK
IHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShpbnZhbGlkLCBBWFByb3BlcnR5TmFtZTo6SW52YWxp
ZCk7CisgICAgc2V0UHJvcGVydHkoaW52YWxpZC5pc0VtcHR5KCksIGludmFsaWQsIEFYUHJvcGVy
dHlOYW1lOjpJbnZhbGlkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfaW52YWxp
ZEF0dHIpOwogfQogCkBAIC0zMzcsNjIgKzQ0OSw3MyBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6
OmtleVNob3J0Y3V0cygpIGNvCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEtleVNob3J0Y3V0
cyhjb25zdCBTdHJpbmcmIGtleVNob3J0Y3V0cykKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShr
ZXlTaG9ydGN1dHMsIEFYUHJvcGVydHlOYW1lOjpLZXlTaG9ydGN1dHMpOworICAgIHNldFByb3Bl
cnR5KGtleVNob3J0Y3V0cy5pc0VtcHR5KCksIGtleVNob3J0Y3V0cywgQVhQcm9wZXJ0eU5hbWU6
OktleVNob3J0Y3V0cyk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2tleXNob3J0
Y3V0c0F0dHIpOwogfQogCi1TdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmxpdmUoKSBjb25zdAorU3Ry
aW5nIEFjY2Vzc2libGVOb2RlOjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0cmluZ1Zh
bHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpMaXZlKTsKKyAg
ICByZXR1cm4gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWU6OkxhYmVsKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGl2ZShjb25zdCBT
dHJpbmcmIGxpdmUpCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMYWJlbChjb25zdCBTdHJpbmcm
IGxhYmVsKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGxpdmUsIEFYUHJvcGVydHlOYW1lOjpM
aXZlKTsKLSAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGl2ZUF0dHIpOworICAgIHNl
dFByb3BlcnR5KGxhYmVsLmlzRW1wdHkoKSwgbGFiZWwsIEFYUHJvcGVydHlOYW1lOjpMYWJlbCk7
CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2xhYmVsQXR0cik7CiB9CiAKLVN0cmlu
ZyBBY2Nlc3NpYmxlTm9kZTo6bGFiZWwoKSBjb25zdAorc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4g
QWNjZXNzaWJsZU5vZGU6OmxldmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RyaW5nVmFsdWVG
b3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkxhYmVsKTsKKyAgICBy
ZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihtX293bmVyRWxlbWVudCwg
QVhQcm9wZXJ0eU5hbWU6OkxldmVsKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGFi
ZWwoY29uc3QgU3RyaW5nJiBsYWJlbCkKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldExldmVsKHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGxh
YmVsLCBBWFByb3BlcnR5TmFtZTo6TGFiZWwpOwotICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQo
YXJpYV9sYWJlbEF0dHIpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFs
dWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OkxldmVsKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVD
aGFuZ2VkKGFyaWFfbGV2ZWxBdHRyKTsKK30KKworU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpsaXZl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxl
bWVudCwgQVhQcm9wZXJ0eU5hbWU6OkxpdmUpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpz
ZXRMaXZlKGNvbnN0IFN0cmluZyYgbGl2ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eShsaXZlLmlzRW1w
dHkoKSwgbGl2ZSwgQVhQcm9wZXJ0eU5hbWU6OkxpdmUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV9saXZlQXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJs
ZU5vZGU6Om1vZGFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHko
bV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpNb2RhbCk7CisgICAgcmV0dXJuIG9wdGlv
bmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6
Ok1vZGFsKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TW9kYWwoc3RkOjpvcHRpb25h
bDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlO
YW1lOjpNb2RhbCk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52
YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6TW9kYWwpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5n
ZWQoYXJpYV9tb2RhbEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVO
b2RlOjptdWx0aWxpbmUoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0
eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSk7CisgICAgcmV0dXJu
IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWU6Ok11bHRpbGluZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldE11bHRpbGlu
ZShzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1
ZSwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhh
c192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6TXVsdGlsaW5lKTsKICAg
ICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbXVsdGlsaW5lQXR0cik7CiB9CiAKIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6Om11bHRpc2VsZWN0YWJsZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3Bl
cnR5TmFtZTo6TXVsdGlzZWxlY3RhYmxlKTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclBy
b3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TXVsdGlzZWxlY3Rh
YmxlKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TXVsdGlzZWxlY3RhYmxlKHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZhbHVlLCBBWFBy
b3BlcnR5TmFtZTo6TXVsdGlzZWxlY3RhYmxlKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFz
X3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUp
OwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9tdWx0aXNlbGVjdGFibGVBdHRyKTsK
IH0KIApAQCAtNDAzLDcgKzUyNiw3IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6b3JpZW50YXRp
b24oKSBjb24KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0T3JpZW50YXRpb24oY29uc3QgU3Ry
aW5nJiBvcmllbnRhdGlvbikKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShvcmllbnRhdGlvbiwg
QVhQcm9wZXJ0eU5hbWU6Ok9yaWVudGF0aW9uKTsKKyAgICBzZXRQcm9wZXJ0eShvcmllbnRhdGlv
bi5pc0VtcHR5KCksIG9yaWVudGF0aW9uLCBBWFByb3BlcnR5TmFtZTo6T3JpZW50YXRpb24pOwog
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9vcmllbnRhdGlvbkF0dHIpOwogfQogCkBA
IC00MTQsMTAgKzUzNywyMSBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnBsYWNlaG9sZGVyKCkg
Y29uCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYg
cGxhY2Vob2xkZXIpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkocGxhY2Vob2xkZXIsIEFYUHJv
cGVydHlOYW1lOjpQbGFjZWhvbGRlcik7CisgICAgc2V0UHJvcGVydHkocGxhY2Vob2xkZXIuaXNF
bXB0eSgpLCBwbGFjZWhvbGRlciwgQVhQcm9wZXJ0eU5hbWU6OlBsYWNlaG9sZGVyKTsKICAgICBu
b3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcGxhY2Vob2xkZXJBdHRyKTsKIH0KIAorc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OnBvc0luU2V0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihtX293bmVyRWxlbWVu
dCwgQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0KTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0UG9zSW5TZXQoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7CisgICAgc2V0UHJv
cGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6
UG9zSW5TZXQpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9wb3NpbnNldEF0dHIp
OworfQorCiBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnByZXNzZWQoKSBjb25zdAogewogICAgIHJl
dHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFt
ZTo6UHJlc3NlZCk7CkBAIC00MjUsMTggKzU1OSwxOCBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6
OnByZXNzZWQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRQcmVzc2VkKGNvbnN0
IFN0cmluZyYgcHJlc3NlZCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShwcmVzc2VkLCBBWFBy
b3BlcnR5TmFtZTo6UHJlc3NlZCk7CisgICAgc2V0UHJvcGVydHkocHJlc3NlZC5pc0VtcHR5KCks
IHByZXNzZWQsIEFYUHJvcGVydHlOYW1lOjpQcmVzc2VkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVD
aGFuZ2VkKGFyaWFfcHJlc3NlZEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vz
c2libGVOb2RlOjpyZWFkT25seSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclBy
b3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHkpOworICAgIHJl
dHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJv
cGVydHlOYW1lOjpSZWFkT25seSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJlYWRP
bmx5KHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZh
bHVlLCBBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHkpOworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5o
YXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OlJlYWRPbmx5KTsKICAg
ICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcmVhZG9ubHlBdHRyKTsKIH0KIApAQCAtNDQ3
LDE4ICs1ODEsMTggQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpyZWxldmFudCgpIGNvbnN0CiAK
IHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJlbGV2YW50KGNvbnN0IFN0cmluZyYgcmVsZXZhbnQp
CiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkocmVsZXZhbnQsIEFYUHJvcGVydHlOYW1lOjpSZWxl
dmFudCk7CisgICAgc2V0UHJvcGVydHkocmVsZXZhbnQuaXNFbXB0eSgpLCByZWxldmFudCwgQVhQ
cm9wZXJ0eU5hbWU6OlJlbGV2YW50KTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFf
cmVsZXZhbnRBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6
cmVxdWlyZWQoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293
bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJlcXVpcmVkKTsKKyAgICByZXR1cm4gb3B0aW9u
YWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
UmVxdWlyZWQpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRSZXF1aXJlZChzdGQ6Om9w
dGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9w
ZXJ0eU5hbWU6OlJlcXVpcmVkKTsKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCks
IHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpSZXF1aXJlZCk7CiAgICAgbm90aWZ5QXR0
cmlidXRlQ2hhbmdlZChhcmlhX3JlcXVpcmVkQXR0cik7CiB9CiAKQEAgLTQ2OSw3ICs2MDMsNyBA
QCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnJvbGUoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVO
b2RlOjpzZXRSb2xlKGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0
eShyb2xlLCBBWFByb3BlcnR5TmFtZTo6Um9sZSk7CisgICAgc2V0UHJvcGVydHkocm9sZS5pc0Vt
cHR5KCksIHJvbGUsIEFYUHJvcGVydHlOYW1lOjpSb2xlKTsKICAgICBub3RpZnlBdHRyaWJ1dGVD
aGFuZ2VkKHJvbGVBdHRyKTsKIH0KIApAQCAtNDgwLDIxICs2MTQsNjUgQEAgU3RyaW5nIEFjY2Vz
c2libGVOb2RlOjpyb2xlRGVzY3JpcHRpb24oKQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRS
b2xlRGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiByb2xlRGVzY3JpcHRpb24pCiB7Ci0gICAgc2V0
U3RyaW5nUHJvcGVydHkocm9sZURlc2NyaXB0aW9uLCBBWFByb3BlcnR5TmFtZTo6Um9sZURlc2Ny
aXB0aW9uKTsKKyAgICBzZXRQcm9wZXJ0eShyb2xlRGVzY3JpcHRpb24uaXNFbXB0eSgpLCByb2xl
RGVzY3JpcHRpb24sIEFYUHJvcGVydHlOYW1lOjpSb2xlRGVzY3JpcHRpb24pOwogICAgIG5vdGlm
eUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yb2xlZGVzY3JpcHRpb25BdHRyKTsKIH0KIAorc3RkOjpv
cHRpb25hbDxpbnQ+IEFjY2Vzc2libGVOb2RlOjpyb3dDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxpbnQ+KG1fb3duZXJFbGVtZW50LCBBWFByb3Bl
cnR5TmFtZTo6Um93Q291bnQpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRSb3dDb3Vu
dChzdGQ6Om9wdGlvbmFsPGludD4gdmFsdWUpCit7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhh
c192YWx1ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6Um93Q291bnQpOworICAg
IG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yb3djb3VudEF0dHIpOworfQorCitzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6cm93SW5kZXgoKSBjb25zdAoreworICAg
IHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3duZXJFbGVtZW50
LCBBWFByb3BlcnR5TmFtZTo6Um93Q291bnQpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpz
ZXRSb3dJbmRleChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9w
ZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVlKCksIEFYUHJvcGVydHlOYW1lOjpS
b3dJbmRleCk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jvd2luZGV4QXR0cik7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpyb3dTcGFuKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPiht
X293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJvd1NwYW4pOworfQorCit2b2lkIEFjY2Vz
c2libGVOb2RlOjpzZXRSb3dTcGFuKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQorewor
ICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFsdWUudmFsdWUoKSwgQVhQcm9w
ZXJ0eU5hbWU6OlJvd1NwYW4pOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yb3dz
cGFuQXR0cik7Cit9CisKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OnNlbGVj
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFs
dWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlNlbGVj
dGVkKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0U2VsZWN0ZWQoc3RkOjpvcHRpb25h
bDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlO
YW1lOjpTZWxlY3RlZCk7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1ZSgpLCB2YWx1
ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWQpOwogICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV9zZWxlY3RlZEF0dHIpOwogfQogCitzdGQ6Om9wdGlvbmFsPGludD4gQWNj
ZXNzaWJsZU5vZGU6OnNldFNpemUoKSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVl
Rm9yUHJvcGVydHk8aW50PihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUp
OworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRTZXRTaXplKHN0ZDo6b3B0aW9uYWw8aW50
PiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZh
bHVlKCksIEFYUHJvcGVydHlOYW1lOjpTZXRTaXplKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFu
Z2VkKGFyaWFfc2V0c2l6ZUF0dHIpOworfQorCiBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnNvcnQo
KSBjb25zdAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVt
ZW50LCBBWFByb3BlcnR5TmFtZTo6U29ydCk7CkBAIC01MDIsMTAgKzY4MCw0MyBAQCBTdHJpbmcg
QWNjZXNzaWJsZU5vZGU6OnNvcnQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRT
b3J0KGNvbnN0IFN0cmluZyYgc29ydCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShzb3J0LCBB
WFByb3BlcnR5TmFtZTo6U29ydCk7CisgICAgc2V0UHJvcGVydHkoc29ydC5pc0VtcHR5KCksIHNv
cnQsIEFYUHJvcGVydHlOYW1lOjpTb3J0KTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFy
aWFfc29ydEF0dHIpOwogfQogCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gQWNjZXNzaWJsZU5vZGU6
OnZhbHVlTWF4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5
PGRvdWJsZT4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCk7Cit9CisK
K3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFZhbHVlTWF4KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2
YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eSghdmFsdWUuaGFzX3ZhbHVlKCksIHZhbHVlLnZhbHVl
KCksIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdl
ZChhcmlhX3ZhbHVlbWF4QXR0cik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBBY2Nlc3Np
YmxlTm9kZTo6dmFsdWVNaW4oKSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9y
UHJvcGVydHk8ZG91YmxlPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWlu
KTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNaW4oc3RkOjpvcHRpb25hbDxk
b3VibGU+IHZhbHVlKQoreworICAgIHNldFByb3BlcnR5KCF2YWx1ZS5oYXNfdmFsdWUoKSwgdmFs
dWUudmFsdWUoKSwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluKTsKKyAgICBub3RpZnlBdHRyaWJ1
dGVDaGFuZ2VkKGFyaWFfdmFsdWVtaW5BdHRyKTsKK30KKworc3RkOjpvcHRpb25hbDxkb3VibGU+
IEFjY2Vzc2libGVOb2RlOjp2YWx1ZU5vdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFs
VmFsdWVGb3JQcm9wZXJ0eTxkb3VibGU+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
VmFsdWVOb3cpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU5vdyhzdGQ6Om9w
dGlvbmFsPGRvdWJsZT4gdmFsdWUpCit7CisgICAgc2V0UHJvcGVydHkoIXZhbHVlLmhhc192YWx1
ZSgpLCB2YWx1ZS52YWx1ZSgpLCBBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cpOworICAgIG5vdGlm
eUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV92YWx1ZW5vd0F0dHIpOworfQorCiBTdHJpbmcgQWNjZXNz
aWJsZU5vZGU6OnZhbHVlVGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9y
UHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpWYWx1ZVRleHQpOwpAQCAt
NTEzLDcgKzcyNCw3IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6dmFsdWVUZXh0KCkgY29uc3QK
IAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWVU
ZXh0KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHZhbHVlVGV4dCwgQVhQcm9wZXJ0eU5hbWU6
OlZhbHVlVGV4dCk7CisgICAgc2V0UHJvcGVydHkodmFsdWVUZXh0LmlzRW1wdHkoKSwgdmFsdWVU
ZXh0LCBBWFByb3BlcnR5TmFtZTo6VmFsdWVUZXh0KTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFu
Z2VkKGFyaWFfdmFsdWV0ZXh0QXR0cik7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmgJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgVmFyaWFu
dDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBib29sLCBpbnQ+IFByb3BlcnR5VmFsdWVWYXJpYW50
OwordHlwZWRlZiBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGJvb2wsIGludCwgdW5z
aWduZWQsIGRvdWJsZT4gUHJvcGVydHlWYWx1ZVZhcmlhbnQ7CiAKIGVudW0gY2xhc3MgQVhQcm9w
ZXJ0eU5hbWUgewogICAgIE5vbmUsCkBAIC00NCw2ICs0NCw5IEBAIGVudW0gY2xhc3MgQVhQcm9w
ZXJ0eU5hbWUgewogICAgIEF1dG9jb21wbGV0ZSwKICAgICBCdXN5LAogICAgIENoZWNrZWQsCisg
ICAgQ29sQ291bnQsCisgICAgQ29sSW5kZXgsCisgICAgQ29sU3BhbiwKICAgICBDdXJyZW50LAog
ICAgIERpc2FibGVkLAogICAgIEV4cGFuZGVkLApAQCAtNTIsMjAgKzU1LDI5IEBAIGVudW0gY2xh
c3MgQVhQcm9wZXJ0eU5hbWUgewogICAgIEludmFsaWQsCiAgICAgS2V5U2hvcnRjdXRzLAogICAg
IExhYmVsLAorICAgIExldmVsLAogICAgIExpdmUsCiAgICAgTW9kYWwsCiAgICAgTXVsdGlsaW5l
LAogICAgIE11bHRpc2VsZWN0YWJsZSwKICAgICBPcmllbnRhdGlvbiwKICAgICBQbGFjZWhvbGRl
ciwKKyAgICBQb3NJblNldCwKICAgICBQcmVzc2VkLAogICAgIFJlYWRPbmx5LAogICAgIFJlbGV2
YW50LAogICAgIFJlcXVpcmVkLAogICAgIFJvbGUsCiAgICAgUm9sZURlc2NyaXB0aW9uLAorICAg
IFJvd0NvdW50LAorICAgIFJvd0luZGV4LAorICAgIFJvd1NwYW4sCiAgICAgU2VsZWN0ZWQsCisg
ICAgU2V0U2l6ZSwKICAgICBTb3J0LAorICAgIFZhbHVlTWF4LAorICAgIFZhbHVlTWluLAorICAg
IFZhbHVlTm93LAogICAgIFZhbHVlVGV4dAogfTsKIApAQCAtOTUsNiArMTA3LDkgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBlZmZlY3RpdmVTdHJpbmdWYWx1ZUZvckVsZW1l
bnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxi
b29sPiBlZmZlY3RpdmVCb29sVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmLCBBWFByb3BlcnR5TmFt
ZSk7CisgICAgc3RhdGljIGludCBlZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYs
IEFYUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZWZmZWN0aXZlVW5zaWduZWRW
YWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgZmxv
YXQgZWZmZWN0aXZlRmxvYXRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1l
KTsKICAgICBzdGF0aWMgYm9vbCBoYXNQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUp
OwogCiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBhdG9taWMoKSBjb25zdDsKQEAgLTEwOSw2ICsx
MjQsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyBjaGVja2VkKCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRDaGVja2VkKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IGNvbENv
dW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRDb2xDb3VudChzdGQ6Om9wdGlvbmFsPGludD4pOwor
CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29sSW5kZXgoKSBjb25zdDsKKyAgICB2b2lk
IHNldENvbEluZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsKKworICAgIHN0ZDo6b3B0aW9u
YWw8dW5zaWduZWQ+IGNvbFNwYW4oKSBjb25zdDsKKyAgICB2b2lkIHNldENvbFNwYW4oc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4pOworCiAgICAgU3RyaW5nIGN1cnJlbnQoKSBjb25zdDsKICAgICB2
b2lkIHNldEN1cnJlbnQoY29uc3QgU3RyaW5nJik7CiAKQEAgLTEzMCwxMiArMTU0LDE1IEBAIHB1
YmxpYzoKICAgICBTdHJpbmcga2V5U2hvcnRjdXRzKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRLZXlT
aG9ydGN1dHMoY29uc3QgU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgbGl2ZSgpIGNvbnN0OwotICAg
IHZvaWQgc2V0TGl2ZShjb25zdCBTdHJpbmcmKTsKLQogICAgIFN0cmluZyBsYWJlbCgpIGNvbnN0
OwogICAgIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlvbmFs
PHVuc2lnbmVkPiBsZXZlbCgpIGNvbnN0OworICAgIHZvaWQgc2V0TGV2ZWwoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4pOworCisgICAgU3RyaW5nIGxpdmUoKSBjb25zdDsKKyAgICB2b2lkIHNldExp
dmUoY29uc3QgU3RyaW5nJik7CisKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IG1vZGFsKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXRNb2RhbChzdGQ6Om9wdGlvbmFsPGJvb2w+KTsKIApAQCAtMTUxLDYg
KzE3OCw5IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcGxhY2Vob2xkZXIoKSBjb25zdDsKICAgICB2
b2lkIHNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RkOjpvcHRpb25hbDx1
bnNpZ25lZD4gcG9zSW5TZXQoKSBjb25zdDsKKyAgICB2b2lkIHNldFBvc0luU2V0KHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+KTsKKyAgICAKICAgICBTdHJpbmcgcHJlc3NlZCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0UHJlc3NlZChjb25zdCBTdHJpbmcmKTsKIApAQCAtMTY5LDIxICsxOTksNDMgQEAg
cHVibGljOgogICAgIFN0cmluZyByb2xlRGVzY3JpcHRpb24oKSBjb25zdDsKICAgICB2b2lkIHNl
dFJvbGVEZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmKTsKIAorICAgIHN0ZDo6b3B0aW9uYWw8aW50
PiByb3dDb3VudCgpIGNvbnN0OworICAgIHZvaWQgc2V0Um93Q291bnQoc3RkOjpvcHRpb25hbDxp
bnQ+KTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHJvd0luZGV4KCkgY29uc3Q7Cisg
ICAgdm9pZCBzZXRSb3dJbmRleChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiByb3dTcGFuKCkgY29uc3Q7CisgICAgdm9pZCBzZXRSb3dTcGFu
KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gc2Vs
ZWN0ZWQoKSBjb25zdDsKICAgICB2b2lkIHNldFNlbGVjdGVkKHN0ZDo6b3B0aW9uYWw8Ym9vbD4p
OwogCisgICAgc3RkOjpvcHRpb25hbDxpbnQ+IHNldFNpemUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dFNldFNpemUoc3RkOjpvcHRpb25hbDxpbnQ+KTsKKwogICAgIFN0cmluZyBzb3J0KCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTb3J0KGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RkOjpvcHRpb25hbDxk
b3VibGU+IHZhbHVlTWF4KCkgY29uc3Q7CisgICAgdm9pZCBzZXRWYWx1ZU1heChzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4pOworCisgICAgc3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbHVlTWluKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRWYWx1ZU1pbihzdGQ6Om9wdGlvbmFsPGRvdWJsZT4pOworCisgICAg
c3RkOjpvcHRpb25hbDxkb3VibGU+IHZhbHVlTm93KCkgY29uc3Q7CisgICAgdm9pZCBzZXRWYWx1
ZU5vdyhzdGQ6Om9wdGlvbmFsPGRvdWJsZT4pOworCiAgICAgU3RyaW5nIHZhbHVlVGV4dCgpIGNv
bnN0OwogICAgIHZvaWQgc2V0VmFsdWVUZXh0KGNvbnN0IFN0cmluZyYpOwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCBQcm9wZXJ0eVZhbHVlVmFyaWFudCB2YWx1ZUZvclByb3BlcnR5KEVs
ZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBzdHJpbmdW
YWx1ZUZvclByb3BlcnR5KEVsZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7Ci0gICAgc3RhdGljIHN0
ZDo6b3B0aW9uYWw8Ym9vbD4gYm9vbFZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVy
dHlOYW1lKTsKLSAgICB2b2lkIHNldFN0cmluZ1Byb3BlcnR5KGNvbnN0IFN0cmluZyYsIEFYUHJv
cGVydHlOYW1lKTsKLSAgICB2b2lkIHNldEJvb2xQcm9wZXJ0eShzdGQ6Om9wdGlvbmFsPGJvb2w+
LCBBWFByb3BlcnR5TmFtZSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxUPiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJv
cGVydHlOYW1lKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5KGJvb2wsIFByb3BlcnR5VmFs
dWVWYXJpYW50JiYsIEFYUHJvcGVydHlOYW1lKTsKICAgICAKICAgICB2b2lkIG5vdGlmeUF0dHJp
YnV0ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYpOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmlkbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmlkbAkocmV2aXNp
b24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9k
ZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDkgQEAKICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nPyBhdXRvY29tcGxldGU7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGJ1c3k7CiAgICAg
YXR0cmlidXRlIERPTVN0cmluZz8gY2hlY2tlZDsKKyAgICBhdHRyaWJ1dGUgbG9uZz8gY29sQ291
bnQ7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGNvbEluZGV4OworICAgIGF0dHJpYnV0
ZSB1bnNpZ25lZCBsb25nPyBjb2xTcGFuOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGN1cnJl
bnQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGRpc2FibGVkOwogICAgIGF0dHJpYnV0ZSBib29s
ZWFuPyBleHBhbmRlZDsKQEAgLTM5LDE5ICs0MiwyOCBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJp
bmc/IGludmFsaWQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8ga2V5U2hvcnRjdXRzOwogICAg
IGF0dHJpYnV0ZSBET01TdHJpbmc/IGxhYmVsOworICAgIGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25n
PyBsZXZlbDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBsaXZlOwogICAgIGF0dHJpYnV0ZSBi
b29sZWFuPyBtb2RhbDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gbXVsdGlsaW5lOwogICAgIGF0
dHJpYnV0ZSBib29sZWFuPyBtdWx0aXNlbGVjdGFibGU7CiAgICAgYXR0cmlidXRlIERPTVN0cmlu
Zz8gb3JpZW50YXRpb247CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcGxhY2Vob2xkZXI7Cisg
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHBvc0luU2V0OwogICAgIGF0dHJpYnV0ZSBET01T
dHJpbmc/IHByZXNzZWQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHJlYWRPbmx5OwogICAgIGF0
dHJpYnV0ZSBET01TdHJpbmc/IHJlbGV2YW50OwogICAgIGF0dHJpYnV0ZSBib29sZWFuPyByZXF1
aXJlZDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyByb2xlOwogICAgIGF0dHJpYnV0ZSBET01T
dHJpbmc/IHJvbGVEZXNjcmlwdGlvbjsKKyAgICBhdHRyaWJ1dGUgbG9uZz8gcm93Q291bnQ7Cisg
ICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHJvd0luZGV4OworICAgIGF0dHJpYnV0ZSB1bnNp
Z25lZCBsb25nPyByb3dTcGFuOwogICAgIGF0dHJpYnV0ZSBib29sZWFuPyBzZWxlY3RlZDsKKyAg
ICBhdHRyaWJ1dGUgbG9uZz8gc2V0U2l6ZTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBzb3J0
OworICAgIGF0dHJpYnV0ZSBkb3VibGU/IHZhbHVlTWF4OworICAgIGF0dHJpYnV0ZSBkb3VibGU/
IHZhbHVlTWluOworICAgIGF0dHJpYnV0ZSBkb3VibGU/IHZhbHVlTm93OwogICAgIGF0dHJpYnV0
ZSBET01TdHJpbmc/IHZhbHVlVGV4dDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUYWJsZS5jcHAJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVHZXROQ29sCiAgICAgaWYgKCFpczxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKGludCBjb2x1bW5Db3VudCA9IGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5hcmlhQ29sdW1uQ291bnQoKSkKKyAgICBpZiAo
aW50IGNvbHVtbkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUp
LmF4Q29sdW1uQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGNvbHVtbkNvdW50OwogCiAgICAgcmV0
dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5jb2x1bW5Db3VudCgp
OwpAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdl
dE5Sb3cKICAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBpZiAoaW50IHJvd0NvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlPigqYWNjVGFibGUpLmFyaWFSb3dDb3VudCgpKQorICAgIGlmIChpbnQgcm93Q291
bnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuYXhSb3dDb3VudCgp
KQogICAgICAgICByZXR1cm4gcm93Q291bnQ7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLnJvd0NvdW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRh
YmxlQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBnYm9vbGVhbiB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0UG9zCiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4gY29sdW1uUm93UmFuZ2U7CiAgICAgaWYgKHJvdykgewogICAgICAgICAvLyBhcmlh
LXJvd2luZGV4IGlzIDEtYmFzZWQuCi0gICAgICAgIGludCByb3dJbmRleCA9IGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuYXJpYVJvd0luZGV4KCkgLSAxOworICAg
ICAgICBpbnQgcm93SW5kZXggPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhP
YmplY3QpLmF4Um93SW5kZXgoKSAtIDE7CiAgICAgICAgIGlmIChyb3dJbmRleCA8PSAtMSkgewog
ICAgICAgICAgICAgZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5y
b3dJbmRleFJhbmdlKGNvbHVtblJvd1JhbmdlKTsKICAgICAgICAgICAgIHJvd0luZGV4ID0gY29s
dW1uUm93UmFuZ2UuZmlyc3Q7CkBAIC0xMjksNyArMTI5LDcgQEAgZ2Jvb2xlYW4gd2Via2l0QWNj
ZXNzaWJsZVRhYmxlQ2VsbEdldFBvcwogICAgIH0KICAgICBpZiAoY29sdW1uKSB7CiAgICAgICAg
IC8vIGFyaWEtY29saW5kZXggaXMgMS1iYXNlZC4KLSAgICAgICAgaW50IGNvbHVtbkluZGV4ID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5hcmlhQ29sdW1uSW5k
ZXgoKSAtIDE7CisgICAgICAgIGludCBjb2x1bW5JbmRleCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpheE9iamVjdCkuYXhDb2x1bW5JbmRleCgpIC0gMTsKICAgICAgICAgaWYg
KGNvbHVtbkluZGV4IDw9IC0xKSB7CiAgICAgICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsPigqYXhPYmplY3QpLmNvbHVtbkluZGV4UmFuZ2UoY29sdW1uUm93UmFuZ2UpOwog
ICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5Sb3dSYW5nZS5maXJzdDsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHAJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDY0LDMzICs0NjQsMzMgQEAgc3RhdGljIEF0a0F0dHJpYnV0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZQogCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNv
cmVPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpLmlz
RXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSkgewogICAgICAgICBhdXRvJiB0YWJsZSA9
IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNvcmVPYmplY3QpOwotICAgICAgICBpbnQg
cm93Q291bnQgPSB0YWJsZS5hcmlhUm93Q291bnQoKTsKKyAgICAgICAgaW50IHJvd0NvdW50ID0g
dGFibGUuYXhSb3dDb3VudCgpOwogICAgICAgICBpZiAocm93Q291bnQpCiAgICAgICAgICAgICBh
dHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3djb3Vu
dCIsIFN0cmluZzo6bnVtYmVyKHJvd0NvdW50KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBp
bnQgY29sdW1uQ291bnQgPSB0YWJsZS5hcmlhQ29sdW1uQ291bnQoKTsKKyAgICAgICAgaW50IGNv
bHVtbkNvdW50ID0gdGFibGUuYXhDb2x1bW5Db3VudCgpOwogICAgICAgICBpZiAoY29sdW1uQ291
bnQpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRy
aWJ1dGVTZXQsICJjb2xjb3VudCIsIFN0cmluZzo6bnVtYmVyKGNvbHVtbkNvdW50KS51dGY4KCku
ZGF0YSgpKTsKICAgICB9IGVsc2UgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZVJvdz4oKmNvcmVP
YmplY3QpKSB7CiAgICAgICAgIGF1dG8mIHJvdyA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJs
ZVJvdz4oKmNvcmVPYmplY3QpOwotICAgICAgICBpbnQgcm93SW5kZXggPSByb3cuYXJpYVJvd0lu
ZGV4KCk7CisgICAgICAgIGludCByb3dJbmRleCA9IHJvdy5heFJvd0luZGV4KCk7CiAgICAgICAg
IGlmIChyb3dJbmRleCAhPSAtMSkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRr
QXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2luZGV4IiwgU3RyaW5nOjpudW1iZXIocm93
SW5kZXgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbD4oKmNvcmVPYmplY3QpKSB7CiAgICAgICAgIGF1dG8mIGNlbGwgPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY29yZU9iamVjdCk7Ci0gICAgICAgIGludCByb3dJbmRl
eCA9IGNlbGwuYXJpYVJvd0luZGV4KCk7CisgICAgICAgIGludCByb3dJbmRleCA9IGNlbGwuYXhS
b3dJbmRleCgpOwogICAgICAgICBpZiAocm93SW5kZXggIT0gLTEpCiAgICAgICAgICAgICBhdHRy
aWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3dpbmRleCIs
IFN0cmluZzo6bnVtYmVyKHJvd0luZGV4KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpbnQg
Y29sdW1uSW5kZXggPSBjZWxsLmFyaWFDb2x1bW5JbmRleCgpOworICAgICAgICBpbnQgY29sdW1u
SW5kZXggPSBjZWxsLmF4Q29sdW1uSW5kZXgoKTsKICAgICAgICAgaWYgKGNvbHVtbkluZGV4ICE9
IC0xKQogICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0
cmlidXRlU2V0LCAiY29saW5kZXgiLCBTdHJpbmc6Om51bWJlcihjb2x1bW5JbmRleCkudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICAgICAgaW50IHJvd1NwYW4gPSBjZWxsLmFyaWFSb3dTcGFuKCk7Cisg
ICAgICAgIGludCByb3dTcGFuID0gY2VsbC5heFJvd1NwYW4oKTsKICAgICAgICAgaWYgKHJvd1Nw
YW4gIT0gLTEpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNl
dChhdHRyaWJ1dGVTZXQsICJyb3dzcGFuIiwgU3RyaW5nOjpudW1iZXIocm93U3BhbikudXRmOCgp
LmRhdGEoKSk7CiAKLSAgICAgICAgaW50IGNvbHVtblNwYW4gPSBjZWxsLmFyaWFDb2x1bW5TcGFu
KCk7CisgICAgICAgIGludCBjb2x1bW5TcGFuID0gY2VsbC5heENvbHVtblNwYW4oKTsKICAgICAg
ICAgaWYgKGNvbHVtblNwYW4gIT0gLTEpCiAgICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJjb2xzcGFuIiwgU3RyaW5nOjpudW1iZXIo
Y29sdW1uU3BhbikudXRmOCgpLmRhdGEoKSk7CiAgICAgfQpAQCAtNTI3LDExICs1MjcsMTEgQEAg
c3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJsZQogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGNvcmVPYmplY3QtPnN1cHBvcnRzQVJJQVBvc0luU2V0KCkpCi0gICAgICAg
IGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInBvc2lu
c2V0IiwgU3RyaW5nOjpudW1iZXIoY29yZU9iamVjdC0+YXJpYVBvc0luU2V0KCkpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGlmIChjb3JlT2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkpCisgICAgICAg
IGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInBvc2lu
c2V0IiwgU3RyaW5nOjpudW1iZXIoY29yZU9iamVjdC0+cG9zSW5TZXQoKSkudXRmOCgpLmRhdGEo
KSk7CiAKLSAgICBpZiAoY29yZU9iamVjdC0+c3VwcG9ydHNBUklBU2V0U2l6ZSgpKQotICAgICAg
ICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJzZXRz
aXplIiwgU3RyaW5nOjpudW1iZXIoY29yZU9iamVjdC0+YXJpYVNldFNpemUoKSkudXRmOCgpLmRh
dGEoKSk7CisgICAgaWYgKGNvcmVPYmplY3QtPnN1cHBvcnRzU2V0U2l6ZSgpKQorICAgICAgICBh
dHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJzZXRzaXpl
IiwgU3RyaW5nOjpudW1iZXIoY29yZU9iamVjdC0+c2V0U2l6ZSgpKS51dGY4KCkuZGF0YSgpKTsK
IAogICAgIFN0cmluZyBpc1JlYWRPbmx5ID0gY29yZU9iamVjdC0+cmVhZE9ubHlWYWx1ZSgpOwog
ICAgIGlmICghaXNSZWFkT25seS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbQkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEyNzQsNyArMTI3NCw3IEBAIC0gKE5TVUludGVnZXIpYWNjZXNzaWJp
bGl0eUFSSUFSb3dDb3VudAogICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiAwOwogICAg
IAotICAgIE5TSW50ZWdlciByb3dDb3VudCA9IHRhYmxlLT5hcmlhUm93Q291bnQoKTsKKyAgICBO
U0ludGVnZXIgcm93Q291bnQgPSB0YWJsZS0+YXhSb3dDb3VudCgpOwogICAgIHJldHVybiByb3dD
b3VudCA+IDAgPyByb3dDb3VudCA6IDA7CiB9CiAKQEAgLTEyODYsNyArMTI4Niw3IEBAIC0gKE5T
VUludGVnZXIpYWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5Db3UKICAgICBpZiAoIXRhYmxlKQogICAg
ICAgICByZXR1cm4gMDsKICAgICAKLSAgICBOU0ludGVnZXIgY29sQ291bnQgPSB0YWJsZS0+YXJp
YUNvbHVtbkNvdW50KCk7CisgICAgTlNJbnRlZ2VyIGNvbENvdW50ID0gdGFibGUtPmF4Q29sdW1u
Q291bnQoKTsKICAgICByZXR1cm4gY29sQ291bnQgPiAwID8gY29sQ291bnQgOiAwOwogfQogCkBA
IC0xMjk4LDcgKzEyOTgsNyBAQCAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBUklBUm93SW5k
ZXgKICAgICBpZiAoIXRhYmxlQ2VsbCkKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiAgICAg
Ci0gICAgTlNJbnRlZ2VyIHJvd0luZGV4ID0gdGFibGVDZWxsLT5hcmlhUm93SW5kZXgoKTsKKyAg
ICBOU0ludGVnZXIgcm93SW5kZXggPSB0YWJsZUNlbGwtPmF4Um93SW5kZXgoKTsKICAgICByZXR1
cm4gcm93SW5kZXggPiAwID8gcm93SW5kZXggOiBOU05vdEZvdW5kOwogfQogCkBAIC0xMzEwLDcg
KzEzMTAsNyBAQCAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBUklBQ29sdW1uSW5kCiAgICAg
aWYgKCF0YWJsZUNlbGwpCiAgICAgICAgIHJldHVybiBOU05vdEZvdW5kOwogICAgIAotICAgIE5T
SW50ZWdlciBjb2x1bW5JbmRleCA9IHRhYmxlQ2VsbC0+YXJpYUNvbHVtbkluZGV4KCk7CisgICAg
TlNJbnRlZ2VyIGNvbHVtbkluZGV4ID0gdGFibGVDZWxsLT5heENvbHVtbkluZGV4KCk7CiAgICAg
cmV0dXJuIGNvbHVtbkluZGV4ID4gMCA/IGNvbHVtbkluZGV4IDogTlNOb3RGb3VuZDsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIy
NDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBACiAj
aW1wb3J0ICJBY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmgiCiAjaW1wb3J0ICJBY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW4uaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZVJvdy5oIgorI2ltcG9y
dCAiQWNjZXNzaWJsZU5vZGUuaCIKICNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9ydCAiQ2hyb21l
Q2xpZW50LmgiCiAjaW1wb3J0ICJDb2xvck1hYy5oIgpAQCAtMTE5Miw5ICsxMTkzLDkgQEAgLSAo
TlNBcnJheSopYWRkaXRpb25hbEFjY2Vzc2liaWxpdHlBdHRyaQogICAgICAgICBbYWRkaXRpb25h
bCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQVJlbGV2YW50QXR0cmlidXRlXTsKICAgICB9
CiAgICAgCi0gICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c0FSSUFTZXRTaXplKCkpCisgICAgaWYg
KG1fb2JqZWN0LT5zdXBwb3J0c1NldFNpemUoKSkKICAgICAgICAgW2FkZGl0aW9uYWwgYWRkT2Jq
ZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFTZXRTaXplQXR0cmlidXRlXTsKLSAgICBpZiAobV9vYmpl
Y3QtPnN1cHBvcnRzQVJJQVBvc0luU2V0KCkpCisgICAgaWYgKG1fb2JqZWN0LT5zdXBwb3J0c1Bv
c0luU2V0KCkpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxpdHlB
UklBUG9zSW5TZXRBdHRyaWJ1dGVdOwogICAgIAogICAgIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0
aW9uIHNvcnREaXJlY3Rpb24gPSBtX29iamVjdC0+c29ydERpcmVjdGlvbigpOwpAQCAtMjY2OCwx
NCArMjY2OSwxNCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAg
ICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3NpYmls
aXR5TWluVmFsdWVBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJvZ3Jl
c3MgaW5kaWNhdG9yIHNob3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlh
Um9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAm
JiAhbV9vYmplY3QtPmhhc0F0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cikpCisgICAgICAgIGlm
IChtX29iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJv
Z3Jlc3NJbmRpY2F0b3IgJiYgIW1fb2JqZWN0LT5oYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
VmFsdWVOb3cpKQogICAgICAgICAgICAgcmV0dXJuIEAwOwogICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpXTsKICAgICB9
CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzogTlNBY2Nlc3Np
YmlsaXR5TWF4VmFsdWVBdHRyaWJ1dGVdKSB7CiAgICAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcHJv
Z3Jlc3MgaW5kaWNhdG9yIHNob3VsZCByZXR1cm4gMC4KLSAgICAgICAgaWYgKG1fb2JqZWN0LT5h
cmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRv
ciAmJiAhbV9vYmplY3QtPmhhc0F0dHJpYnV0ZShhcmlhX3ZhbHVlbm93QXR0cikpCisgICAgICAg
IGlmIChtX29iamVjdC0+YXJpYVJvbGVBdHRyaWJ1dGUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6
UHJvZ3Jlc3NJbmRpY2F0b3IgJiYgIW1fb2JqZWN0LT5oYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6VmFsdWVOb3cpKQogICAgICAgICAgICAgcmV0dXJuIEAwOwogICAgICAgICByZXR1cm4gW05T
TnVtYmVyIG51bWJlcldpdGhGbG9hdDptX29iamVjdC0+bWF4VmFsdWVGb3JSYW5nZSgpXTsKICAg
ICB9CkBAIC0yODEyLDEwICsyODEzLDEwIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKICAgICAgICAgICAgIHJldHVybiBAKHRhYmxlLnJvd0NvdW50KCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vz
c2liaWxpdHlBUklBQ29sdW1uQ291bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAo
dGFibGUuYXJpYUNvbHVtbkNvdW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXhD
b2x1bW5Db3VudCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0Vx
dWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJvd0NvdW50QXR0cmlidXRlXSkKLSAgICAg
ICAgICAgIHJldHVybiBAKHRhYmxlLmFyaWFSb3dDb3VudCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBAKHRhYmxlLmF4Um93Q291bnQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChpczxBY2Nlc3Np
YmlsaXR5VGFibGVDb2x1bW4+KCptX29iamVjdCkpIHsKQEAgLTI4NTksMTAgKzI4NjAsMTAgQEAg
LSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgcmV0
dXJuIGNvbnZlcnRUb05TQXJyYXkocm93SGVhZGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBQ29sdW1u
SW5kZXhBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAoY2VsbC5hcmlhQ29sdW1uSW5k
ZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gQChjZWxsLmF4Q29sdW1uSW5kZXgoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUFSSUFSb3dJbmRleEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQChjZWxs
LmFyaWFSb3dJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXhSb3dJbmRleCgp
KTsKICAgICB9CiAgICAgCiAgICAgaWYgKG1fb2JqZWN0LT5pc1RyZWUoKSkgewpAQCAtMzA1Nyw5
ICszMDU4LDkgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAg
IH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNz
aWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIg
bnVtYmVyV2l0aEludDptX29iamVjdC0+YXJpYVBvc0luU2V0KCldOworICAgICAgICByZXR1cm4g
W05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmplY3QtPnBvc0luU2V0KCldOwogICAgIGlmIChb
YXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVNldFNpemVB
dHRyaWJ1dGVdKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJbnQ6bV9vYmpl
Y3QtPmFyaWFTZXRTaXplKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhJ
bnQ6bV9vYmplY3QtPnNldFNpemUoKV07CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlz
RXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlHcmFiYmVkQXR0cmlidXRlXSkKICAgICAgICAg
cmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBUklBR3JhYmJlZCgp
XTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNDk5OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTExLTE3ICBOYW4gV2FuZyAgPG5f
d2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFPTTogSW1wbGVtZW50IG51bWJlciB0eXBl
IHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTQ5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0
aWVzLmh0bWw6IEFkZGVkLgorCiAyMDE3LTExLTE3ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRA
YXBwbGUuY29tPgogCiAgICAgICAgIE1hcmsgc3ZnL2luLWh0bWwvYnktcmVmZXJlbmNlLmh0bWwg
YXMgZmxha3kgb24gaU9TLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9N
LW51bWJlci1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXIt
cHJvcGVydGllcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
Rmlyc3QgTmFtZQorVGhpcyB0ZXN0cyBudW1iZXIgdHlwZSBBY2Nlc3NpYmlsaXR5IE9iamVjdCBN
b2RlbCBwcm9wZXJ0aWVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworCitUZXN0
IEFPTSBudW1iZXIgcHJvcGVydGllcyBjYW4gYmUgY2xlYXJlZC4KK1BBU1MgYXhOb2RlLnN0cmlu
Z1ZhbHVlIGlzICJBWFZhbHVlOiA1IgorUEFTUyBub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTm93
IGlzIG51bGwKK1BBU1MgYXhOb2RlLnN0cmluZ1ZhbHVlIGlzICJBWFZhbHVlOiA2IgorUEFTUyBu
b2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTm93IGlzIG51bGwKK1BBU1MgYXhOb2RlLnN0cmluZ1Zh
bHVlIGlzICJBWFZhbHVlOiA1IgorCitWYWx1ZU1heCwgVmFsdWVNaW4gYW5kIFZhbHVlTm93IHN1
cHBvcnQKK1BBU1MgYXhOb2RlLm1heFZhbHVlIGlzIDEwMAorUEFTUyBheE5vZGUuaW50VmFsdWUg
aXMgNQorUEFTUyBheE5vZGUubWluVmFsdWUgaXMgMAorUEFTUyBheE5vZGUubWF4VmFsdWUgaXMg
MjAKK1BBU1MgYXhOb2RlLmludFZhbHVlIGlzIDE1CitQQVNTIGF4Tm9kZS5taW5WYWx1ZSBpcyAx
MAorCitUYWJsZSByZWxhdGVkIHByb3BlcnRpZXMgc3VwcG9ydAorUEFTUyBheE5vZGUubnVtYmVy
QXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkNvdW50JykgaXMgMAorUEFTUyBheE5vZGUubnVt
YmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0NvdW50JykgaXMgMAorUEFTUyBheE5vZGUubnVt
YmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkNvdW50JykgaXMgMTYKK1BBU1MgYXhOb2Rl
Lm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dDb3VudCcpIGlzIDMwCitQQVNTIGF4Tm9k
ZS5jb2x1bW5JbmRleFJhbmdlKCkgaXMgJ3swLCAxfScKK1BBU1MgYXhOb2RlLnJvd0luZGV4UmFu
Z2UoKSBpcyAnezAsIDF9JworUEFTUyBheE5vZGUuY29sdW1uSW5kZXhSYW5nZSgpIGlzICd7MCwg
Mn0nCitQQVNTIGF4Tm9kZS5yb3dJbmRleFJhbmdlKCkgaXMgJ3swLCAzfScKK1BBU1MgYXhOb2Rl
Lm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFDb2x1bW5JbmRleCcpIGlzIC0xCitQQVNTIGF4
Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93SW5kZXgnKSBpcyAtMQorUEFTUyBh
eE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkluZGV4JykgaXMgMQorUEFT
UyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0luZGV4JykgaXMgMgorCitM
ZXZlbCBzdXBwb3J0CitQQVNTIGF4Tm9kZS5pbnRWYWx1ZSBpcyAyCitQQVNTIGF4Tm9kZS5pbnRW
YWx1ZSBpcyA2CisKK1Bvc0luU2V0IGFuZCBTZXRTaXplIHN1cHBvcnQKK1BBU1MgYXhOb2RlLm51
bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFQb3NJblNldCcpIGlzIDkKK1BBU1MgYXhOb2RlLm51
bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFTZXRTaXplJykgaXMgMTAKKwpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0
aWVzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
QU9NLW51bWJlci1wcm9wZXJ0aWVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQg
QEAKKzwhRE9DVFlQRSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9hY2Nlc3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKworPGRpdiByb2xlPSJzbGlkZXIiIGlkPSJzbGlkZXIiIGFyaWEtdmFsdWVub3c9IjUiPjwv
ZGl2PgorCis8ZGl2IGlkPSJncmlkIiByb2xlPSJncmlkIj4KKyAgPGRpdiByb2xlPSJyb3dncm91
cCI+CisgICAgPGRpdiByb2xlPSJyb3ciPgorICAgICAgPHNwYW4gaWQ9ImNlbGwiIHJvbGU9ImNv
bHVtbmhlYWRlciI+Rmlyc3QgTmFtZTwvc3Bhbj4KKyAgICA8L2Rpdj4KKyAgPC9kaXY+Cis8L2Rp
dj4KKworPGggcm9sZT0iaGVhZGluZyIgaWQ9ImhlYWRpbmciPgorPGRpdiByb2xlPSJsaXN0Ij4K
KzxkaXYgcm9sZT0ibGlzdGl0ZW0iIGlkPSJsaXN0aXRlbSI+PC9kaXY+Cis8L2Rpdj4KKworPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlw
dD4KKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyBudW1iZXIgdHlwZSBBY2Nlc3NpYmlsaXR5
IE9iamVjdCBNb2RlbCBwcm9wZXJ0aWVzLiIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdmFyIG5vZGU7CisgICAgICAgIHZhciBheE5vZGU7CisK
KyAgICAgICAgdGVzdENsZWFyTnVtYmVyUHJvcGVydHkoKTsKKyAgICAgICAgdGVzdFJhbmdlUHJv
cGVydGllcygpOworICAgICAgICB0ZXN0VGFibGVQcm9wZXJ0aWVzKCk7CisgICAgICAgIHRlc3RM
ZXZlbCgpOworICAgICAgICB0ZXN0TGlzdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RD
bGVhck51bWJlclByb3BlcnR5KCkgeworICAgICAgICBkZWJ1ZygiXG5UZXN0IEFPTSBudW1iZXIg
cHJvcGVydGllcyBjYW4gYmUgY2xlYXJlZC4iKTsKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgLy8gTnVt
YmVyIHZhbHVlIHNob3VsZCBiZSBudWxsIGlmIG5vdCBzZXQuCisgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygiYXhOb2RlLnN0cmluZ1ZhbHVlIiwgIkFYVmFsdWU6IDUiKTsKKyAgICAgICAg
c2hvdWxkQmVOdWxsKCJub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTm93Iik7CisgICAgICAgIC8v
IFNldCB0aGUgQU9NIHByb3BlcnR5CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVO
b3cgPSA2OworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImF4Tm9kZS5zdHJpbmdWYWx1
ZSIsICJBWFZhbHVlOiA2Iik7CisgICAgICAgIC8vIENsZWFyIHRoZSBBT00gcHJvcGVydHkKKyAg
ICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU5vdyA9IG51bGw7CisgICAgICAgIHNob3Vs
ZEJlTnVsbCgibm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU5vdyIpOworICAgICAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImF4Tm9kZS5zdHJpbmdWYWx1ZSIsICJBWFZhbHVlOiA1Iik7CisgICAg
fQorCisgICAgZnVuY3Rpb24gdGVzdFJhbmdlUHJvcGVydGllcygpIHsKKyAgICAgICAgZGVidWco
IlxuVmFsdWVNYXgsIFZhbHVlTWluIGFuZCBWYWx1ZU5vdyBzdXBwb3J0Iik7CisgICAgICAgIG5v
ZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2xpZGVyIik7CisgICAgICAgIGF4Tm9kZSA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgic2xpZGVyIik7
CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubWF4VmFsdWUiLCAiMTAwIik7CisgICAgICAgIHNo
b3VsZEJlKCJheE5vZGUuaW50VmFsdWUiLCAiNSIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2Rl
Lm1pblZhbHVlIiwgIjAiKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU1heCA9
IDIwOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTm93ID0gMTU7CisgICAgICAg
IG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVNaW4gPSAxMDsKKyAgICAgICAgc2hvdWxkQmUoImF4
Tm9kZS5tYXhWYWx1ZSIsICIyMCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLmludFZhbHVl
IiwgIjE1Iik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubWluVmFsdWUiLCAiMTAiKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0VGFibGVQcm9wZXJ0aWVzKCkgeworICAgICAgICBkZWJ1
ZygiXG5UYWJsZSByZWxhdGVkIHByb3BlcnRpZXMgc3VwcG9ydCIpOworICAgICAgICAvLyBjb2xD
b3VudCBhbmQgcm93Q291bnQKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJncmlkIik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgiZ3JpZCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJl
ckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFDb2x1bW5Db3VudCcpIiwgIjAiKTsKKyAgICAgICAgc2hv
dWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93Q291bnQnKSIsICIw
Iik7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuY29sQ291bnQgPSAxNjsKKyAgICAgICAg
bm9kZS5hY2Nlc3NpYmxlTm9kZS5yb3dDb3VudCA9IDMwOworICAgICAgICBzaG91bGRCZSgiYXhO
b2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFDb2x1bW5Db3VudCcpIiwgIjE2Iik7Cisg
ICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0Nv
dW50JykiLCAiMzAiKTsKKyAgICAgICAgCisgICAgICAgIC8vIGNvbFNwYW4gYW5kIHJvd1NwYW4K
KyAgICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjZWxsIik7CisgICAgICAg
IGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgi
Y2VsbCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLmNvbHVtbkluZGV4UmFuZ2UoKSIsICIn
ezAsIDF9JyIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLnJvd0luZGV4UmFuZ2UoKSIsICIn
ezAsIDF9JyIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmNvbFNwYW4gPSAyOworICAg
ICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnJvd1NwYW4gPSAzOworICAgICAgICBzaG91bGRCZSgi
YXhOb2RlLmNvbHVtbkluZGV4UmFuZ2UoKSIsICInezAsIDJ9JyIpOworICAgICAgICBzaG91bGRC
ZSgiYXhOb2RlLnJvd0luZGV4UmFuZ2UoKSIsICInezAsIDN9JyIpOworICAgICAgICAKKyAgICAg
ICAgLy8gY29sSW5kZXggYW5kIHJvd0luZGV4CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVt
YmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkluZGV4JykiLCAiLTEiKTsKKyAgICAgICAg
c2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93SW5kZXgnKSIs
ICItMSIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmNvbEluZGV4ID0gMTsKKyAgICAg
ICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5yb3dJbmRleCA9IDI7CisgICAgICAgIHNob3VsZEJlKCJh
eE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkluZGV4JykiLCAiMSIpOwor
ICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dJ
bmRleCcpIiwgIjIiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0TGV2ZWwoKSB7CisgICAg
ICAgIGRlYnVnKCJcbkxldmVsIHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJoZWFkaW5nIik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgiaGVhZGluZyIpOworICAgICAgICAvLyBU
aGUgaW1wbGljaXQgdmFsdWUgb2YgYXJpYS1sZXZlbCBpcyAyIGZvciB0aGUgaGVhZGluZyByb2xl
LgorICAgICAgICBzaG91bGRCZSgiYXhOb2RlLmludFZhbHVlIiwgIjIiKTsKKyAgICAgICAgbm9k
ZS5hY2Nlc3NpYmxlTm9kZS5sZXZlbCA9IDY7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuaW50
VmFsdWUiLCAiNiIpCisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdExpc3QoKSB7CisgICAgICAg
IGRlYnVnKCJcblBvc0luU2V0IGFuZCBTZXRTaXplIHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsaXN0aXRlbSIpOworICAgICAgICBheE5vZGUgPSBh
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImxpc3RpdGVtIik7
CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUucG9zSW5TZXQgPSA5OworICAgICAgICBub2Rl
LmFjY2Vzc2libGVOb2RlLnNldFNpemUgPSAxMDsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5u
dW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUG9zSW5TZXQnKSIsICI5Iik7CisgICAgICAgIHNo
b3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVNldFNpemUnKSIsICIx
MCIpOworICAgIH0KKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327318</attachid>
            <date>2017-11-18 12:57:37 -0800</date>
            <delta_ts>2017-11-18 13:20:29 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>86026</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBAQAorMjAxNy0xMS0xOCAgTmFuIFdh
bmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBBT006IEltcGxlbWVudCBudW1i
ZXIgdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzk0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBY2Nlc3NpYmlsaXR5IE9iamVjdCBNb2RlbAorICAgICAgICBFeHBsYWluZXI6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL2V4cGxhaW5lci5odG1sCisgICAgICAgIFNwZWM6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL3NwZWMvCisKKyAgICAgICAgSW1wbGVtZW50ZWQg
dGhlIG51bWJlciB0eXBlIHByb3BlcnRpZXMgZm9yIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGFs
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXItcHJvcGVydGll
cy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlBUklBR3JpZDo6aXNNdWx0aVNlbGVjdGFibGUgY29uc3QpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleFJhbmdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OmF4Um93U3BhbldpdGhSb3dJ
bmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
Ojpjb2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGw6OmFyaWFSb3dTcGFuV2l0aFJvd0luZGV4IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3Rh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c1JlcXVpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpoZWFkaW5nTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNh
bExldmVsIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWVG
b3JQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZmxvYXRWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzU2V0U2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c1Bvc0luU2V0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFNpemUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6cG9zSW5TZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklB
U2V0U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjpzdXBwb3J0c0FSSUFQb3NJblNldCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhU2V0U2l6ZSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUG9zSW5TZXQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpkZWZhdWx0
T2JqZWN0SW5jbHVzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmxpdmVSZWdpb25BdG9taWMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZTo6aXNEYXRhVGFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlOjpheENvbHVtbkNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlUYWJsZTo6YXhSb3dDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFDb2x1bW5Db3VudCBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFSb3dDb3VudCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJh
bmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmNv
bHVtbkluZGV4UmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbDo6YXhDb2x1bW5JbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGVDZWxsOjpheFJvd0luZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uU3BhbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheFJvd1NwYW4gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYUNvbHVtbkluZGV4IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFS
b3dJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsOjphcmlhQ29sdW1uU3BhbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhUm93U3BhbiBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpzZXRBWENvbEluZGV4RnJvbVJv
dyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpzZXRBUklBQ29s
SW5kZXhGcm9tUm93KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVS
b3c6OmFkZENoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJv
dzo6YXhDb2x1bW5JbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
VGFibGVSb3c6OmF4Um93SW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVRhYmxlUm93OjphcmlhQ29sdW1uSW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlUm93OjphcmlhUm93SW5kZXggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93Lmg6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjphcmlhQXR0cmlidXRlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OmlzUHJvcGVydHlWYWx1
ZUludCk6CisgICAgICAgIChXZWJDb3JlOjppc1Byb3BlcnR5VmFsdWVVbnNpZ25lZCk6CisgICAg
ICAgIChXZWJDb3JlOjppc1Byb3BlcnR5VmFsdWVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldE9wdGlvbmFsUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldFN0cmluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OmVmZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUludFZhbHVlRm9yRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUZsb2F0VmFs
dWVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjphdG9taWMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEF0b21pYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0QXV0b2NvbXBsZXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpidXN5IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpzZXRCdXN5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRDaGVja2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpj
b2xDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29s
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmNvbEluZGV4IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRDb2xJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6Y29sU3BhbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Q29sU3Bhbik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6c2V0Q3VycmVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6ZGlzYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OnNldERpc2FibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpleHBhbmRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0RXhwYW5kZWQp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEhhc1BvcFVwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpoaWRkZW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEhpZGRlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlTm9kZTo6c2V0SW52YWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9k
ZTo6c2V0S2V5U2hvcnRjdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjps
YWJlbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0TGFiZWwp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmxldmVsIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRMZXZlbCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6bGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmxlTm9kZTo6c2V0TGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bW9k
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE1vZGFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjptdWx0aWxpbmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE11bHRpbGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bXVsdGlzZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRNdWx0aXNlbGVjdGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpzZXRQbGFjZWhvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmxlTm9kZTo6cG9zSW5TZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OnNldFBvc0luU2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2Rl
OjpzZXRQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpyZWFkT25s
eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVhZE9ubHkp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJlbGV2YW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpyZXF1aXJlZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJsZU5vZGU6OnNldFJvbGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5v
ZGU6OnNldFJvbGVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9k
ZTo6cm93Q291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNl
dFJvd0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpyb3dJbmRleCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Um93SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnJvd1NwYW4gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFJvd1NwYW4pOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJsZU5vZGU6OnNlbGVjdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2libGVOb2RlOjpzZXRTZWxlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6c2V0U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6
c2V0U2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0U29ydCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6dmFsdWVNYXggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFZhbHVlTWF4KToKKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2libGVOb2RlOjp2YWx1ZU1pbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNaW4pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OnZhbHVlTm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpzZXRWYWx1ZU5vdyk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0
VmFsdWVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpib29sVmFsdWVG
b3JQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6
c2V0Qm9vbFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2libGVOb2RlLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5pZGw6
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRh
YmxlLmNwcDoKKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2x1bW5zKToKKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Sb3dzKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcDoKKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRQb3NpdGlvbik6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwOgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQVJvd0NvdW50XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklB
Q29sdW1uQ291bnRdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
YWNjZXNzaWJpbGl0eUFSSUFSb3dJbmRleF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QVJJQUNvbHVtbkluZGV4XSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFkZGl0aW9uYWxBY2Nlc3Np
YmlsaXR5QXR0cmlidXRlTmFtZXNdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOl0pOgorCiAyMDE3LTExLTE4ICBT
aW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGZlVHVyYnVs
ZW5jZSB3aXRoIHN0aXRjaFRpbGVzIGlzIGJyb2tlbgpJbmRleDogU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODgyLDcgKzI4ODIsNyBAQCBib29sIGlzTm9kZUFyaWFWaXNpYmxlKE5vZGUqIG5v
ZGUpCiAgICAgYm9vbCBheEhpZGRlbkZhbHNlUHJlc2VudCA9IGZhbHNlOwogICAgIGZvciAoTm9k
ZSogdGVzdE5vZGUgPSBub2RlOyB0ZXN0Tm9kZTsgdGVzdE5vZGUgPSB0ZXN0Tm9kZS0+cGFyZW50
Tm9kZSgpKSB7CiAgICAgICAgIGlmIChpczxFbGVtZW50PigqdGVzdE5vZGUpKSB7Ci0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGhpZGRlblZhbHVlID0gQWNjZXNzaWJsZU5vZGU6OmVm
ZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKnRlc3ROb2RlKSwg
QVhQcm9wZXJ0eU5hbWU6OkhpZGRlbik7CisgICAgICAgICAgICBhdXRvIGhpZGRlblZhbHVlID0g
QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoZG93bmNhc3Q8RWxl
bWVudD4oKnRlc3ROb2RlKSwgQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbik7CiAgICAgICAgICAgICBi
b29sIGF4SGlkZGVuRmFsc2UgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChoaWRkZW5WYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGlmIChoaWRkZW5WYWx1ZS52YWx1ZSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlk
LmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBA
IGJvb2wgQWNjZXNzaWJpbGl0eUFSSUFHcmlkOjphZGRUYWJsZUNlbGwKIAogYm9vbCBBY2Nlc3Np
YmlsaXR5QVJJQUdyaWQ6OmlzTXVsdGlTZWxlY3RhYmxlKCkgY29uc3QKIHsKLSAgICBzdGQ6Om9w
dGlvbmFsPGJvb2w+IG11bHRpU2VsZWN0YWJsZSA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOworICAgIGF1dG8gbXVsdGlTZWxlY3RhYmxlID0g
Ym9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSk7CiAg
ICAgaWYgKG11bHRpU2VsZWN0YWJsZSAmJiAhbXVsdGlTZWxlY3RhYmxlLnZhbHVlKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
LmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIgKzkx
LDEyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6cm93SW5kZXgKIAogICAgIC8v
IEFSSUEgMS4xLCBhcmlhLXJvd3NwYW4gYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBjZWxscyBh
bmQgZ3JpZGNlbGxzIHdoaWNoIGFyZSBub3QgY29udGFpbmVkIGluIGEgbmF0aXZlIHRhYmxlLgog
ICAgIC8vIFNvIHdlIHNob3VsZCBjaGVjayBmb3IgdGhhdCBhdHRyaWJ1dGUgaGVyZS4KLSAgICBy
b3dSYW5nZS5zZWNvbmQgPSBhcmlhUm93U3BhbldpdGhSb3dJbmRleChyb3dSYW5nZS5maXJzdCk7
CisgICAgcm93UmFuZ2Uuc2Vjb25kID0gYXhSb3dTcGFuV2l0aFJvd0luZGV4KHJvd1JhbmdlLmZp
cnN0KTsKIH0KIAotdW5zaWduZWQgQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbDo6YXJpYVJvd1Nw
YW5XaXRoUm93SW5kZXgodW5zaWduZWQgcm93SW5kZXgpIGNvbnN0Cit1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5QVJJQUdyaWRDZWxsOjpheFJvd1NwYW5XaXRoUm93SW5kZXgodW5zaWduZWQgcm93SW5k
ZXgpIGNvbnN0CiB7Ci0gICAgaW50IHJvd1NwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjph
cmlhUm93U3BhbigpOworICAgIGludCByb3dTcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6
YXhSb3dTcGFuKCk7CiAgICAgaWYgKHJvd1NwYW4gPT0gLTEpIHsKICAgICAgICAgc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gcmFuZ2U7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OnJvd0luZGV4UmFuZ2UocmFuZ2UpOwpAQCAtMTUxLDEyICsxNTEsMTIgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpjb2x1bW5JbgogICAgICAgICAgICAgY29sdW1uUmFuZ2Uu
Zmlyc3QgPSBpbmRleFdpdGhTcGFuOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgaW5kZXhXaXRoU3BhbiArPSBpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQp
ID8gc3RkOjptYXgoZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNoaWxkKS5hcmlh
Q29sdW1uU3BhbigpLCAxKSA6IDE7CisgICAgICAgIGluZGV4V2l0aFNwYW4gKz0gaXM8QWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbD4oKmNoaWxkKSA/IHN0ZDo6bWF4KGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpjaGlsZCkuYXhDb2x1bW5TcGFuKCksIDEpIDogMTsKICAgICB9CiAgICAg
CiAgICAgLy8gQVJJQSAxLjEsIGFyaWEtY29sc3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9y
IGNlbGxzIGFuZCBncmlkY2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQgaW4gYSBuYXRpdmUg
dGFibGUuCiAgICAgLy8gU28gd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGF0IGF0dHJpYnV0ZSBoZXJl
LgotICAgIGludCBjb2x1bW5TcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYUNvbHVt
blNwYW4oKTsKKyAgICBpbnQgY29sdW1uU3BhbiA9IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4
Q29sdW1uU3BhbigpOwogICAgIGlmIChjb2x1bW5TcGFuID09IC0xKSB7CiAgICAgICAgIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHJhbmdlOwogICAgICAgICBBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsOjpjb2x1bW5JbmRleFJhbmdlKHJhbmdlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5oCShy
ZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlBUklBR3JpZENlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBwcml2
YXRlOgogCiAgICAgQWNjZXNzaWJpbGl0eVRhYmxlKiBwYXJlbnRUYWJsZSgpIGNvbnN0IG92ZXJy
aWRlOwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudFJvd0dyb3VwKCkgY29uc3Q7Ci0g
ICAgdW5zaWduZWQgYXJpYVJvd1NwYW5XaXRoUm93SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0
OworICAgIHVuc2lnbmVkIGF4Um93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CiAgICAgU3RyaW5nIHJlYWRPbmx5VmFsdWUoKSBjb25zdCBvdmVycmlkZTsKIH07IAogICAg
IApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MjUsNyArNjI1LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNF
bmFibGVkKAogewogICAgIC8vIEFSSUEgc2F5cyB0aGF0IHRoZSBkaXNhYmxlZCBzdGF0dXMgYXBw
bGllcyB0byB0aGUgY3VycmVudCBlbGVtZW50IGFuZCBhbGwgZGVzY2VuZGFudCBlbGVtZW50cy4K
ICAgICBmb3IgKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamVjdCA9IGNvbnN0X2Nhc3Q8QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3QqPih0aGlzKTsgb2JqZWN0OyBvYmplY3QgPSBvYmplY3QtPnBhcmVu
dE9iamVjdCgpKSB7Ci0gICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPGJvb2w+IGRpc2FibGVkID0g
b2JqZWN0LT5ib29sVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6RGlzYWJsZWQpKSB7
CisgICAgICAgIGlmIChhdXRvIGRpc2FibGVkID0gb2JqZWN0LT5ib29sVmFsdWVGb3JQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6RGlzYWJsZWQpKSB7CiAgICAgICAgICAgICBpZiAoZGlzYWJsZWQu
dmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTcwNCw4ICs3MDQsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0hv
dmVyZWQoCiAKIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3RhYmxl
KCkgY29uc3QKIHsKLSAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IG11bHRpU2VsZWN0YWJsZSA9IGJv
b2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOwotICAg
IGlmIChtdWx0aVNlbGVjdGFibGUpCisgICAgaWYgKGF1dG8gbXVsdGlTZWxlY3RhYmxlID0gYm9v
bFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSkpCiAgICAg
ICAgIHJldHVybiBtdWx0aVNlbGVjdGFibGUudmFsdWUoKTsKICAgICAKICAgICByZXR1cm4gbm9k
ZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpICYmIGRvd25jYXN0PEhUTUxTZWxl
Y3RFbGVtZW50Pigqbm9kZSgpKS5tdWx0aXBsZSgpOwpAQCAtNzE0LDggKzcxMyw3IEBAIGJvb2wg
QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWwKIGJvb2wgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmlzUmVxdWlyZWQoKSBjb25zdAogewogICAgIC8vIEV4cGxpY2l0IGFyaWEtcmVx
dWlyZWQgdmFsdWVzIHNob3VsZCB0cnVtcCBuYXRpdmUgcmVxdWlyZWQgYXR0cmlidXRlcy4KLSAg
ICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGF4UmVxdWlyZWQgPSBib29sVmFsdWVGb3JQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6UmVxdWlyZWQpOwotICAgIGlmIChheFJlcXVpcmVkKQorICAgIGlmIChh
dXRvIGF4UmVxdWlyZWQgPSBib29sVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UmVx
dWlyZWQpKQogICAgICAgICByZXR1cm4gYXhSZXF1aXJlZC52YWx1ZSgpOwogCiAgICAgTm9kZSog
biA9IHRoaXMtPm5vZGUoKTsKQEAgLTc2Miw5ICs3NjAsOSBAQCBpbnQgQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3Q6OmhlYWRpbmdMZXZlCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChp
c0hlYWRpbmcoKSkgewotICAgICAgICBpbnQgYXJpYUxldmVsID0gZ2V0QXR0cmlidXRlKGFyaWFf
bGV2ZWxBdHRyKS50b0ludCgpOwotICAgICAgICBpZiAoYXJpYUxldmVsID4gMCkKLSAgICAgICAg
ICAgIHJldHVybiBhcmlhTGV2ZWw7CisgICAgICAgIGludCBsZXZlbCA9IHVuc2lnbmVkVmFsdWVG
b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGV2ZWwpOworICAgICAgICBpZiAobGV2ZWwgPiAw
KQorICAgICAgICAgICAgcmV0dXJuIGxldmVsOwogICAgIH0KIAogICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKGgxVGFnKSkKQEAgLTgxNCw5ICs4MTIsOCBAQCBmbG9hdCBBY2Nlc3NpYmlsaXR5Tm9k
ZU9iamVjdDo6dmFsdWVGb3JSCiAKICAgICAvLyBJbiBBUklBIDEuMSwgdGhlIGltcGxpY2l0IHZh
bHVlIGZvciBhcmlhLXZhbHVlbm93IG9uIGEgc3BpbiBidXR0b24gaXMgMC4KICAgICAvLyBGb3Ig
b3RoZXIgcm9sZXMsIGl0IGlzIGhhbGYgd2F5IGJldHdlZW4gYXJpYS12YWx1ZW1pbiBhbmQgYXJp
YS12YWx1ZW1heC4KLSAgICBhdXRvJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbm93
QXR0cik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50
b0Zsb2F0KCk7CisgICAgaWYgKGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykp
CisgICAgICAgIHJldHVybiBmbG9hdFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZh
bHVlTm93KTsKIAogICAgIHJldHVybiBpc1NwaW5CdXR0b24oKSA/IDAgOiAobWluVmFsdWVGb3JS
YW5nZSgpICsgbWF4VmFsdWVGb3JSYW5nZSgpKSAvIDI7CiB9CkBAIC04MzIsOSArODI5LDggQEAg
ZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRgogICAgIGlmICghaXNSYW5n
ZUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKLSAgICBhdXRvJiB2YWx1ZSA9IGdl
dEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWF4QXR0cik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7CisgICAgaWYgKGhhc1Byb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpWYWx1ZU1heCkpCisgICAgICAgIHJldHVybiBmbG9hdFZhbHVlRm9yUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4KTsKIAogICAgIC8vIEluIEFSSUEgMS4xLCB0
aGUgaW1wbGljaXQgdmFsdWUgZm9yIGFyaWEtdmFsdWVtYXggb24gYSBzcGluIGJ1dHRvbgogICAg
IC8vIGlzIHRoYXQgdGhlcmUgaXMgbm8gbWF4aW11bSB2YWx1ZS4gRm9yIG90aGVyIHJvbGVzLCBp
dCBpcyAxMDAuCkBAIC04NTIsOSArODQ4LDggQEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6Om1pblZhbHVlRgogICAgIGlmICghaXNSYW5nZUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJu
IDAuMGY7CiAKLSAgICBhdXRvJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWluQXR0
cik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0Zs
b2F0KCk7CisgICAgaWYgKGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1pbikpCisg
ICAgICAgIHJldHVybiBmbG9hdFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVl
TWluKTsKIAogICAgIC8vIEluIEFSSUEgMS4xLCB0aGUgaW1wbGljaXQgdmFsdWUgZm9yIGFyaWEt
dmFsdWVtaW4gb24gYSBzcGluIGJ1dHRvbgogICAgIC8vIGlzIHRoYXQgdGhlcmUgaXMgbm8gbWlu
aW11bSB2YWx1ZS4gRm9yIG90aGVyIHJvbGVzLCBpdCBpcyAwLgpAQCAtMTYyMiwxMCArMTYxNyw4
IEBAIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpoaWVyYXIKICAgICBOb2RlKiBu
b2RlID0gdGhpcy0+bm9kZSgpOwogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAg
IHJldHVybiAwOwotICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSk7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmlhTGV2ZWwgPSBlbGVtZW50LmF0dHJpYnV0
ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9sZXZlbEF0dHIpOwotICAgIGlmICghYXJpYUxl
dmVsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGFyaWFMZXZlbC50b0ludCgpOworICAgIGlm
IChoYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGV2ZWwpKQorICAgICAgICByZXR1cm4gdW5z
aWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMZXZlbCk7CiAgICAgCiAgICAg
Ly8gT25seSB0cmVlIGl0ZW0gd2lsbCBjYWxjdWxhdGUgaXRzIGxldmVsIHRocm91Z2ggdGhlIERP
TSBjdXJyZW50bHkuCiAgICAgaWYgKHJvbGVWYWx1ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpU
cmVlSXRlbSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE2Niw2ICsyMTY2LDI3IEBAIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJpbGl0eU9i
amVjdDoKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQogCitpbnQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6aW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29u
c3QKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoKmVs
ZW1lbnQsIHByb3BlcnR5S2V5KTsKKyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6dW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHBy
b3BlcnR5S2V5KSBjb25zdAoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVk
VmFsdWVGb3JFbGVtZW50KCplbGVtZW50LCBwcm9wZXJ0eUtleSk7CisgICAgcmV0dXJuIDA7Cit9
CisKK2Zsb2F0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZsb2F0VmFsdWVGb3JQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29uc3QKK3sKKyAgICBpZiAoRWxlbWVudCogZWxlbWVu
dCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2libGVOb2RlOjplZmZl
Y3RpdmVGbG9hdFZhbHVlRm9yRWxlbWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOworICAgIHJl
dHVybiAwLjBmOworfQorCiAvLyBMYWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0
aW9uLCBob3Jpem9udGFsIG1lYW5zIHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQg
PiB3aWR0aDsKIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpv
cmllbnRhdGlvbigpIGNvbnN0CiB7CkBAIC0yNjUyLDI0ICsyNjczLDI0IEBAIFN0cmluZyBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNQb3B1cFZhbHUKICAgICByZXR1cm4gImZhbHNlIjsKIH0KIAot
Ym9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c0FSSUFTZXRTaXplKCkgY29uc3QKK2Jv
b2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNTZXRTaXplKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gaGFzQXR0cmlidXRlKGFyaWFfc2V0c2l6ZUF0dHIpOworICAgIHJldHVybiBoYXNQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6U2V0U2l6ZSk7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9i
amVjdDo6c3VwcG9ydHNBUklBUG9zSW5TZXQoKSBjb25zdAorYm9vbCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzdXBwb3J0c1Bvc0luU2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRl
KGFyaWFfcG9zaW5zZXRBdHRyKTsKKyAgICByZXR1cm4gaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWU6OlBvc0luU2V0KTsKIH0KICAgICAKLWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhU2V0
U2l6ZSgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6c2V0U2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhcmlhX3NldHNpemVBdHRyKS50b0ludCgpOworICAg
IHJldHVybiBpbnRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTZXRTaXplKTsKIH0K
IAotaW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFQb3NJblNldCgpIGNvbnN0CitpbnQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6cG9zSW5TZXQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoYXJpYV9wb3NpbnNldEF0dHIpLnRvSW50KCk7CisgICAgcmV0dXJuIHVuc2lnbmVkVmFs
dWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQpOwogfQogICAgIAogY29uc3Qg
QXRvbWljU3RyaW5nJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjppZGVudGlmaWVyQXR0cmlidXRlKCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5oCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzA4LDEw
ICs3MDgsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaXNNb2RhbERlc2NlbmRhbnQoTm9kZSopIGNv
bnN0OwogICAgIGJvb2wgaXNNb2RhbE5vZGUoKSBjb25zdDsKICAgICAKLSAgICBib29sIHN1cHBv
cnRzQVJJQVNldFNpemUoKSBjb25zdDsKLSAgICBib29sIHN1cHBvcnRzQVJJQVBvc0luU2V0KCkg
Y29uc3Q7Ci0gICAgaW50IGFyaWFTZXRTaXplKCkgY29uc3Q7Ci0gICAgaW50IGFyaWFQb3NJblNl
dCgpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNTZXRTaXplKCkgY29uc3Q7CisgICAgYm9vbCBz
dXBwb3J0c1Bvc0luU2V0KCkgY29uc3Q7CisgICAgaW50IHNldFNpemUoKSBjb25zdDsKKyAgICBp
bnQgcG9zSW5TZXQoKSBjb25zdDsKICAgICAKICAgICAvLyBBUklBIGRyYWcgYW5kIGRyb3AKICAg
ICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBUklBRHJvcHBpbmcoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtODk2LDYgKzg5Niw5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc1Byb3BlcnR5KEFY
UHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBjb25zdCBTdHJpbmcgc3RyaW5nVmFsdWVGb3JQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBib29s
VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgaW50IGludFZhbHVl
Rm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIHVuc2lnbmVkIHVuc2lnbmVk
VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgZmxvYXQgZmxvYXRW
YWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIHZpcnR1YWwgVmlz
aWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7IHJldHVybiBW
aXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5n
ZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IHsgcmV0dXJuIFZp
c2libGVQb3NpdGlvblJhbmdlKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkocmV2aXNp
b24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgQWNj
ZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaQogCiAgICAgaWYgKG1fcmVuZGVy
ZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKICAgICAgICAgLy8gYXJpYS1o
aWRkZW4gaXMgbWVhbnQgdG8gb3ZlcnJpZGUgdmlzaWJpbGl0eSBhcyB0aGUgZGV0ZXJtaW5hbnQg
aW4gQVggaGllcmFyY2h5IGluY2x1c2lvbi4KLSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gaGlkZGVuID0gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbikp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGlkZGVuID0gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OkhpZGRlbikpIHsKICAgICAgICAgICAgIGlmICghaGlkZGVuLnZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1
bHRCZWhhdmlvcjsKICAgICAgICAgfQpAQCAtMzI3OSw3ICszMjc5LDcgQEAgY29uc3QgU3RyaW5n
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OgogCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmxpdmVSZWdpb25BdG9taWMoKSBjb25zdAogewotICAgIGlmIChzdGQ6Om9wdGlvbmFs
PGJvb2w+IGF0b21pYyA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBdG9t
aWMpKQorICAgIGlmIChhdXRvIGF0b21pYyA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpBdG9taWMpKQogICAgICAgICByZXR1cm4gYXRvbWljLnZhbHVlKCk7CiAKICAgICAv
LyBXQUktQVJJQSAiYWxlcnQiIGFuZCAic3RhdHVzIiByb2xlcyBoYXZlIGFuIGltcGxpY2l0IGFy
aWEtYXRvbWljIHZhbHVlIG9mIHRydWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFi
bGVDb2x1bW4uaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIu
aCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRlICJBY2Nlc3Np
YmxlTm9kZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCkBAIC0xNTMsMTIg
KzE1NCwxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUoKSBjCiAgICAg
CiAgICAgLy8gSWYgdGhlIGF1dGhvciBoYXMgdXNlZCBBUklBIHRvIHNwZWNpZnkgYSB2YWxpZCBj
b2x1bW4gb3Igcm93IGNvdW50LCBhc3N1bWUgdGhleQogICAgIC8vIHdhbnQgdXMgdG8gdHJlYXQg
dGhlIHRhYmxlIGFzIGEgZGF0YSB0YWJsZS4KLSAgICBpbnQgYXJpYUNvbHVtbkNvdW50ID0gZ2V0
QXR0cmlidXRlKGFyaWFfY29sY291bnRBdHRyKS50b0ludCgpOwotICAgIGlmIChhcmlhQ29sdW1u
Q291bnQgPT0gLTEgfHwgYXJpYUNvbHVtbkNvdW50ID4gMCkKKyAgICBpbnQgYXhDb2x1bW5Db3Vu
dCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50KTsKKyAgICBp
ZiAoYXhDb2x1bW5Db3VudCA9PSAtMSB8fCBheENvbHVtbkNvdW50ID4gMCkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBpbnQgYXJpYVJvd0NvdW50ID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93
Y291bnRBdHRyKS50b0ludCgpOwotICAgIGlmIChhcmlhUm93Q291bnQgPT0gLTEgfHwgYXJpYVJv
d0NvdW50ID4gMCkKKyAgICBpbnQgYXhSb3dDb3VudCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKKyAgICBpZiAoYXhSb3dDb3VudCA9PSAtMSB8fCBheFJv
d0NvdW50ID4gMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJUYWJsZSYgdGFi
bGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oKm1fcmVuZGVyZXIpOwpAQCAtMjM0LDI5ICsyMzUs
MjkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgYwogCiAgICAgICAg
ICAgICAvLyBJZiB0aGUgYXV0aG9yIGhhcyB1c2VkIEFSSUEgdG8gc3BlY2lmeSBhIHZhbGlkIGNv
bHVtbiBvciByb3cgaW5kZXgsIGFzc3VtZSB0aGV5IHdhbnQgdXMKICAgICAgICAgICAgIC8vIHRv
IHRyZWF0IHRoZSB0YWJsZSBhcyBhIGRhdGEgdGFibGUuCi0gICAgICAgICAgICBpbnQgYXJpYUNv
bHVtbkluZGV4ID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
YXJpYV9jb2xpbmRleEF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYUNvbHVtbklu
ZGV4ID49IDEpCisgICAgICAgICAgICBpbnQgYXhDb2x1bW5JbmRleCA9IEFjY2Vzc2libGVOb2Rl
OjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1lbnQsIEFYUHJvcGVy
dHlOYW1lOjpDb2xJbmRleCk7CisgICAgICAgICAgICBpZiAoYXhDb2x1bW5JbmRleCA+PSAxKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBpbnQgYXJpYVJvd0lu
ZGV4ID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oYXJpYV9y
b3dpbmRleEF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYVJvd0luZGV4ID49IDEp
CisgICAgICAgICAgICBpbnQgYXhSb3dJbmRleCA9IEFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVV
bnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dJ
bmRleCk7CisgICAgICAgICAgICBpZiAoYXhSb3dJbmRleCA+PSAxKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICBpZiAoYXV0byBjZWxsUGFyZW50RWxlbWVudCA9
IGNlbGxFbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICBhcmlhUm93
SW5kZXggPSBjZWxsUGFyZW50RWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihhcmlhX3Jvd2luZGV4QXR0cikudG9JbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJpYVJv
d0luZGV4ID49IDEpCisgICAgICAgICAgICAgICAgYXhSb3dJbmRleCA9IEFjY2Vzc2libGVOb2Rl
OjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbFBhcmVudEVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpSb3dJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGF4Um93SW5kZXgg
Pj0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIC8vIElmIHRoZSBhdXRob3IgaGFzIHVzZWQgQVJJQSB0byBzcGVjaWZ5IGEg
Y29sdW1uIG9yIHJvdyBzcGFuLCB3ZSdyZSBzdXBwb3NlZCB0byBpZ25vcmUKICAgICAgICAgICAg
IC8vIHRoZSB2YWx1ZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGV4cG9zaW5nIHRoZSBzcGFuLiBCdXQg
YXNzdW1lIHRoZXkgd2FudCB1cyB0byB0cmVhdCB0aGUKICAgICAgICAgICAgIC8vIHRhYmxlIGFz
IGEgZGF0YSB0YWJsZS4KLSAgICAgICAgICAgIGludCBhcmlhQ29sdW1uU3BhbiA9IGNlbGxFbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfY29sc3BhbkF0dHIpLnRv
SW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYUNvbHVtblNwYW4gPj0gMSkKKyAgICAgICAgICAg
IGludCBheENvbHVtblNwYW4gPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5zaWduZWRWYWx1
ZUZvckVsZW1lbnQoKmNlbGxFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sU3Bhbik7CisgICAg
ICAgICAgICBpZiAoYXhDb2x1bW5TcGFuID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICAgICAgICAgIGludCBhcmlhUm93U3BhbiA9IGNlbGxFbGVtZW50LT5hdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfcm93c3BhbkF0dHIpLnRvSW50KCk7Ci0gICAg
ICAgICAgICBpZiAoYXJpYVJvd1NwYW4gPj0gMSkKKyAgICAgICAgICAgIGludCBheFJvd1NwYW4g
PSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQoKmNlbGxF
bGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Um93U3Bhbik7CisgICAgICAgICAgICBpZiAoYXhSb3dT
cGFuID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlJiByZW5kZXJTdHlsZSA9IGNlbGwtPnN0eWxlKCk7CkBAIC02OTgsMTEg
KzY5OSw5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKCkgY29uc3QKICAgICBy
ZXR1cm4gdGl0bGU7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFDb2x1bW5Db3Vu
dCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlOjpheENvbHVtbkNvdW50KCkgY29uc3QK
IHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbENvdW50VmFsdWUgPSBnZXRBdHRyaWJ1dGUo
YXJpYV9jb2xjb3VudEF0dHIpOwotICAgIAotICAgIGludCBjb2xDb3VudEludCA9IGNvbENvdW50
VmFsdWUudG9JbnQoKTsKKyAgICBpbnQgY29sQ291bnRJbnQgPSBpbnRWYWx1ZUZvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7CiAgICAgLy8gVGhlIEFSSUEgc3BlYyBzdGF0ZXMs
ICJBdXRob3JzIG11c3Qgc2V0IHRoZSB2YWx1ZSBvZiBhcmlhLWNvbGNvdW50IHRvIGFuIGludGVn
ZXIgZXF1YWwgdG8gdGhlCiAgICAgLy8gbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIGZ1bGwgdGFi
bGUuIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpcyB1bmtub3duLCBhdXRob3JzIG11
c3QKICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIGFyaWEtY29sY291bnQgdG8gLTEgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkIGJ5CkBAIC03MTMsMTEg
KzcxMiw5IEBAIGludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFDb2x1bW5Db3VudCgKICAgICBy
ZXR1cm4gMDsKIH0KIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZTo6YXJpYVJvd0NvdW50KCkgY29u
c3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmF4Um93Q291bnQoKSBjb25zdAogewotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgcm93Q291bnRWYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX3Jvd2Nv
dW50QXR0cik7Ci0gICAgCi0gICAgaW50IHJvd0NvdW50SW50ID0gcm93Q291bnRWYWx1ZS50b0lu
dCgpOworICAgIGludCByb3dDb3VudEludCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlJvd0NvdW50KTsKICAgICAvLyBUaGUgQVJJQSBzcGVjIHN0YXRlcywgIkF1dGhvcnMg
bXVzdCBzZXQgdGhlIHZhbHVlIG9mIGFyaWEtcm93Y291bnQgdG8gYW4gaW50ZWdlciBlcXVhbCB0
byB0aGUKICAgICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZnVsbCB0YWJsZS4gSWYgdGhlIHRv
dGFsIG51bWJlciBvZiByb3dzIGlzIHVua25vd24sIGF1dGhvcnMgbXVzdCBzZXQKICAgICAvLyB0
aGUgdmFsdWUgb2YgYXJpYS1yb3djb3VudCB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB2YWx1
ZSBzaG91bGQgbm90IGJlIGNhbGN1bGF0ZWQgYnkgdGhlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJKHJldmlzaW9uIDIyNDk5
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc0LDggKzc0LDggQEAgcHVibGljOgogICAgIC8vIGlzRXhwb3Nh
YmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9zZWQgYXMgYW4g
QWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBwbGF0Zm9ybS4KICAgICBib29sIGlzRXhwb3NhYmxl
VGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdDsKICAgICAKLSAgICBpbnQgYXJpYUNvbHVtbkNv
dW50KCkgY29uc3Q7Ci0gICAgaW50IGFyaWFSb3dDb3VudCgpIGNvbnN0OworICAgIGludCBheENv
bHVtbkNvdW50KCkgY29uc3Q7CisgICAgaW50IGF4Um93Q291bnQoKSBjb25zdDsKIAogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlUYWJsZShSZW5kZXJPYmplY3QqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVDZWxsLmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKKyNp
bmNsdWRlICJBY2Nlc3NpYmxlTm9kZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC00NCw3
ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGw6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAg
ICA6IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVyZXIpCi0gICAgLCBtX2FyaWFDb2xJ
bmRleEZyb21Sb3coLTEpCisgICAgLCBtX2F4Q29sSW5kZXhGcm9tUm93KC0xKQogewogfQogCkBA
IC0zMjAsNyArMzIxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpyb3dJbmRleFJh
bgogICAgIC8vIEFSSUEgMS4xJ3MgYXJpYS1yb3dzcGFuIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBm
b3IgY2VsbHMgYW5kIGdyaWRjZWxscyB3aGljaCBhcmUgbm90IGNvbnRhaW5lZAogICAgIC8vIGlu
IGEgbmF0aXZlIHRhYmxlLiBCdXQgaWYgd2UgaGF2ZSBhIHZhbGlkIGF1dGhvci1wcm92aWRlZCB2
YWx1ZSBhbmQgZG8gbm90IGhhdmUgYW4gZXhwbGljaXQKICAgICAvLyBuYXRpdmUgaG9zdCBsYW5n
dWFnZSB2YWx1ZSBmb3IgdGhlIHJvd3NwYW4sIGV4cG9zZSB0aGUgQVJJQSB2YWx1ZS4KLSAgICBy
b3dSYW5nZS5zZWNvbmQgPSBhcmlhUm93U3BhbigpOworICAgIHJvd1JhbmdlLnNlY29uZCA9IGF4
Um93U3BhbigpOwogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHJvd1JhbmdlLnNlY29uZCkgPT0g
LTEpCiAgICAgICAgIHJvd1JhbmdlLnNlY29uZCA9IHJlbmRlckNlbGwucm93U3BhbigpOwogICAg
IApAQCAtMzM5LDcgKzM0MCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6Y29sdW1u
SW5kZXgKICAgICAvLyBBUklBIDEuMSdzIGFyaWEtY29sc3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5k
ZWQgZm9yIGNlbGxzIGFuZCBncmlkY2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQKICAgICAv
LyBpbiBhIG5hdGl2ZSB0YWJsZS4gQnV0IGlmIHdlIGhhdmUgYSB2YWxpZCBhdXRob3ItcHJvdmlk
ZWQgdmFsdWUgYW5kIGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0CiAgICAgLy8gbmF0aXZlIGhvc3Qg
bGFuZ3VhZ2UgdmFsdWUgZm9yIHRoZSBjb2xzcGFuLCBleHBvc2UgdGhlIEFSSUEgdmFsdWUuCi0g
ICAgY29sdW1uUmFuZ2Uuc2Vjb25kID0gYXJpYUNvbHVtblNwYW4oKTsKKyAgICBjb2x1bW5SYW5n
ZS5zZWNvbmQgPSBheENvbHVtblNwYW4oKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50Pihjb2x1
bW5SYW5nZS5zZWNvbmQpICE9IC0xKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4Myw2NiArMzg0
LDY2IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUMKICAgICByZXR1
cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShoZWFkZXJDZWxsKTsKIH0KICAgICAKLWlu
dCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhQ29sdW1uSW5kZXgoKSBjb25zdAoraW50IEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uSW5kZXgoKSBjb25zdAogewotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgY29sSW5kZXhWYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlhX2NvbGluZGV4
QXR0cik7Ci0gICAgaWYgKGNvbEluZGV4VmFsdWUudG9JbnQoKSA+PSAxKQotICAgICAgICByZXR1
cm4gY29sSW5kZXhWYWx1ZS50b0ludCgpOworICAgIHVuc2lnbmVkIGNvbEluZGV4VmFsdWUgPSB1
bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbEluZGV4KTsKKyAgICBp
ZiAoY29sSW5kZXhWYWx1ZSA+PSAxKQorICAgICAgICByZXR1cm4gY29sSW5kZXhWYWx1ZTsKICAg
ICAKICAgICAvLyAiQVJJQSAxLjE6IElmIHRoZSBzZXQgb2YgY29sdW1ucyB3aGljaCBpcyBwcmVz
ZW50IGluIHRoZSBET00gaXMgY29udGlndW91cywgYW5kIGlmIHRoZXJlIGFyZSBubyBjZWxscyB3
aGljaCBzcGFuIG1vcmUgdGhhbiBvbmUgcm93CiAgICAgLy8gb3IgY29sdW1uIGluIHRoYXQgc2V0
LCB0aGVuIGF1dGhvcnMgbWF5IHBsYWNlIGFyaWEtY29saW5kZXggb24gZWFjaCByb3csIHNldHRp
bmcgdGhlIHZhbHVlIHRvIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY29sdW1uIG9mIHRoZSBzZXQu
IgogICAgIC8vIEhlcmUsIHdlIGxldCBpdHMgcGFyZW50IHJvdyB0byBzZXQgaXRzIGluZGV4IGJl
Zm9yZWhhbmQsIHNvIHdlIGRvbid0IGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgc2libGluZ3MgdG8g
Y2FsY3VsYXRlIHRoZSBpbmRleC4KICAgICBBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIHBhcmVudFJv
dyA9IHRoaXMtPnBhcmVudFJvdygpOwotICAgIGlmIChwYXJlbnRSb3cgJiYgbV9hcmlhQ29sSW5k
ZXhGcm9tUm93ICE9IC0xKQotICAgICAgICByZXR1cm4gbV9hcmlhQ29sSW5kZXhGcm9tUm93Owor
ICAgIGlmIChwYXJlbnRSb3cgJiYgbV9heENvbEluZGV4RnJvbVJvdyAhPSAtMSkKKyAgICAgICAg
cmV0dXJuIG1fYXhDb2xJbmRleEZyb21Sb3c7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogICAg
IAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFSb3dJbmRleCgpIGNvbnN0CitpbnQg
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dJbmRleCgpIGNvbnN0CiB7CiAgICAgLy8gQVJJ
QSAxLjE6IEF1dGhvcnMgc2hvdWxkIHBsYWNlIGFyaWEtcm93aW5kZXggb24gZWFjaCByb3cuIEF1
dGhvcnMgbWF5IGFsc28gcGxhY2UKICAgICAvLyBhcmlhLXJvd2luZGV4IG9uIGFsbCBvZiB0aGUg
Y2hpbGRyZW4gb3Igb3duZWQgZWxlbWVudHMgb2YgZWFjaCByb3cuCi0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiByb3dJbmRleFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93aW5kZXhBdHRyKTsK
LSAgICBpZiAocm93SW5kZXhWYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiByb3dJ
bmRleFZhbHVlLnRvSW50KCk7CisgICAgdW5zaWduZWQgcm93SW5kZXhWYWx1ZSA9IHVuc2lnbmVk
VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93SW5kZXgpOworICAgIGlmIChyb3dJ
bmRleFZhbHVlID49IDEpCisgICAgICAgIHJldHVybiByb3dJbmRleFZhbHVlOwogICAgIAogICAg
IGlmIChBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIHBhcmVudFJvdyA9IHRoaXMtPnBhcmVudFJvdygp
KQotICAgICAgICByZXR1cm4gcGFyZW50Um93LT5hcmlhUm93SW5kZXgoKTsKKyAgICAgICAgcmV0
dXJuIHBhcmVudFJvdy0+YXhSb3dJbmRleCgpOwogICAgIAogICAgIHJldHVybiAtMTsKIH0KIAot
aW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFDb2x1bW5TcGFuKCkgY29uc3QKK2ludCBB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheENvbHVtblNwYW4oKSBjb25zdAogewogICAgIC8vIEFj
Y29yZGluZyB0byB0aGUgQVJJQSBzcGVjLCAiSWYgYXJpYS1jb2xwYW4gaXMgdXNlZCBvbiBhbiBl
bGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBsYW5ndWFnZQogICAgIC8vIHByb3ZpZGVzIGFuIGVx
dWl2YWxlbnQgYXR0cmlidXRlLCB1c2VyIGFnZW50cyBtdXN0IGlnbm9yZSB0aGUgdmFsdWUgb2Yg
YXJpYS1jb2xzcGFuLiIKICAgICBpZiAoaGFzQXR0cmlidXRlKGNvbHNwYW5BdHRyKSkKICAgICAg
ICAgcmV0dXJuIC0xOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2xTcGFuVmFsdWUgPSBn
ZXRBdHRyaWJ1dGUoYXJpYV9jb2xzcGFuQXR0cik7CisgICAgdW5zaWduZWQgY29sU3BhblZhbHVl
ID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKICAg
ICAvLyBBUklBIDEuMTogQXV0aG9ycyBtdXN0IHNldCB0aGUgdmFsdWUgb2YgYXJpYS1jb2xzcGFu
IHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuCi0gICAgaWYgKGNvbFNw
YW5WYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiBjb2xTcGFuVmFsdWUudG9JbnQo
KTsKKyAgICBpZiAoY29sU3BhblZhbHVlID49IDEpCisgICAgICAgIHJldHVybiBjb2xTcGFuVmFs
dWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bDo6YXJpYVJvd1NwYW4oKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Um93
U3BhbigpIGNvbnN0CiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBBUklBIHNwZWMsICJJZiBh
cmlhLXJvd3NwYW4gaXMgdXNlZCBvbiBhbiBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBsYW5n
dWFnZQogICAgIC8vIHByb3ZpZGVzIGFuIGVxdWl2YWxlbnQgYXR0cmlidXRlLCB1c2VyIGFnZW50
cyBtdXN0IGlnbm9yZSB0aGUgdmFsdWUgb2YgYXJpYS1yb3dzcGFuLiIKICAgICBpZiAoaGFzQXR0
cmlidXRlKHJvd3NwYW5BdHRyKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiByb3dTcGFuVmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3dzcGFuQXR0cik7
CisgICAgdW5zaWduZWQgcm93U3BhblZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFY
UHJvcGVydHlOYW1lOjpSb3dTcGFuKTsKICAgICAKICAgICAvLyBBUklBIDEuMTogQXV0aG9ycyBt
dXN0IHNldCB0aGUgdmFsdWUgb2YgYXJpYS1yb3dzcGFuIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0
aGFuIG9yIGVxdWFsIHRvIDAuCiAgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8gMCBpbmRpY2F0
ZXMgdGhhdCB0aGUgY2VsbCBvciBncmlkY2VsbCBpcyB0byBzcGFuIGFsbCB0aGUgcmVtYWluaW5n
IHJvd3MgaW4gdGhlIHJvdyBncm91cC4KLSAgICBpZiAocm93U3BhblZhbHVlID09ICIwIikKKyAg
ICBpZiAoaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd1NwYW4pICYmICFyb3dTcGFuVmFs
dWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChyb3dTcGFuVmFsdWUudG9JbnQoKSA+PSAx
KQotICAgICAgICByZXR1cm4gcm93U3BhblZhbHVlLnRvSW50KCk7CisgICAgaWYgKHJvd1NwYW5W
YWx1ZSA+PSAxKQorICAgICAgICByZXR1cm4gcm93U3BhblZhbHVlOwogICAgIAogICAgIHJldHVy
biAtMTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbHVtbkhlYWRlcnMoQWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CiAgICAgdm9pZCByb3dIZWFkZXJzKEFjY2Vzc2li
aWxpdHlDaGlsZHJlblZlY3RvciYpOwogICAgIAotICAgIGludCBhcmlhQ29sdW1uSW5kZXgoKSBj
b25zdDsKLSAgICBpbnQgYXJpYVJvd0luZGV4KCkgY29uc3Q7Ci0gICAgaW50IGFyaWFDb2x1bW5T
cGFuKCkgY29uc3Q7Ci0gICAgaW50IGFyaWFSb3dTcGFuKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRB
UklBQ29sSW5kZXhGcm9tUm93KGludCBpbmRleCkgeyBtX2FyaWFDb2xJbmRleEZyb21Sb3cgPSBp
bmRleDsgfQorICAgIGludCBheENvbHVtbkluZGV4KCkgY29uc3Q7CisgICAgaW50IGF4Um93SW5k
ZXgoKSBjb25zdDsKKyAgICBpbnQgYXhDb2x1bW5TcGFuKCkgY29uc3Q7CisgICAgaW50IGF4Um93
U3BhbigpIGNvbnN0OworICAgIHZvaWQgc2V0QVhDb2xJbmRleEZyb21Sb3coaW50IGluZGV4KSB7
IG1fYXhDb2xJbmRleEZyb21Sb3cgPSBpbmRleDsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgZXhwbGlj
aXQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChSZW5kZXJPYmplY3QqKTsKQEAgLTY3LDcgKzY3LDcg
QEAgcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxp
dHlSb2xlKCkgZmluYWw7CiAKICAgICBpbnQgbV9yb3dJbmRleDsKLSAgICBpbnQgbV9hcmlhQ29s
SW5kZXhGcm9tUm93OworICAgIGludCBtX2F4Q29sSW5kZXhGcm9tUm93OwogCiBwcml2YXRlOgog
ICAgIC8vIElmIGEgdGFibGUgY2VsbCBpcyBub3QgZXhwb3NlZCBhcyBhIHRhYmxlIGNlbGwsIGEg
VEggZWxlbWVudCBjYW4gc2VydmUgYXMgaXRzIHRpdGxlIFVJIGVsZW1lbnQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVS
b3cuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRh
YmxlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgorI2luY2x1ZGUgIkFj
Y2Vzc2libGVOb2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTFRh
YmxlUm93RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtMTUzLDM0ICsx
NTQsMzQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmFkZENoaWxkcmVuKAogICAgIAog
ICAgIC8vICJBUklBIDEuMSwgSWYgdGhlIHNldCBvZiBjb2x1bW5zIHdoaWNoIGlzIHByZXNlbnQg
aW4gdGhlIERPTSBpcyBjb250aWd1b3VzLCBhbmQgaWYgdGhlcmUgYXJlIG5vIGNlbGxzIHdoaWNo
IHNwYW4gbW9yZSB0aGFuIG9uZSByb3cgb3IKICAgICAvLyBjb2x1bW4gaW4gdGhhdCBzZXQsIHRo
ZW4gYXV0aG9ycyBtYXkgcGxhY2UgYXJpYS1jb2xpbmRleCBvbiBlYWNoIHJvdywgc2V0dGluZyB0
aGUgdmFsdWUgdG8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhlIHNldC4iCi0g
ICAgLy8gVXBkYXRlIGNoaWxkIGNlbGxzJyBhcmlhQ29sSW5kZXggaWYgdGhlcmUncyBhbiBhcmlh
LWNvbGluZGV4IHZhbHVlIHNldCBmb3IgdGhlIHJvdy4gU28gdGhlIGNlbGwgZG9lc24ndCBoYXZl
IHRvIGdvIHRocm91Z2ggdGhlIHNpYmxpbmdzCisgICAgLy8gVXBkYXRlIGNoaWxkIGNlbGxzJyBh
eENvbEluZGV4IGlmIHRoZXJlJ3MgYW4gYXJpYS1jb2xpbmRleCB2YWx1ZSBzZXQgZm9yIHRoZSBy
b3cuIFNvIHRoZSBjZWxsIGRvZXNuJ3QgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBzaWJsaW5ncwog
ICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgaW5kZXguCi0gICAgaW50IGNvbEluZGV4ID0gYXJpYUNv
bHVtbkluZGV4KCk7CisgICAgaW50IGNvbEluZGV4ID0gYXhDb2x1bW5JbmRleCgpOwogICAgIGlm
IChjb2xJbmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gMDsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNlbGwgOiBjaGlsZHJlbigpKSB7CiAgICAg
ICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkpCi0gICAgICAgICAgICBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkuc2V0QVJJQUNvbEluZGV4RnJv
bVJvdyhjb2xJbmRleCArIGluZGV4KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZUNlbGw+KCpjZWxsKS5zZXRBWENvbEluZGV4RnJvbVJvdyhjb2xJbmRleCArIGluZGV4
KTsKICAgICAgICAgaW5kZXgrKzsKICAgICB9CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGVS
b3c6OmFyaWFDb2x1bW5JbmRleCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlUm93Ojph
eENvbHVtbkluZGV4KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbEluZGV4
VmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xpbmRleEF0dHIpOwotICAgIGlmIChjb2xJbmRl
eFZhbHVlLnRvSW50KCkgPj0gMSkKLSAgICAgICAgcmV0dXJuIGNvbEluZGV4VmFsdWUudG9JbnQo
KTsKKyAgICB1bnNpZ25lZCBjb2xJbmRleFZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCk7CisgICAgaWYgKGNvbEluZGV4VmFsdWUgPj0gMSkK
KyAgICAgICAgcmV0dXJuIGNvbEluZGV4VmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQog
Ci1pbnQgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjphcmlhUm93SW5kZXgoKSBjb25zdAoraW50IEFj
Y2Vzc2liaWxpdHlUYWJsZVJvdzo6YXhSb3dJbmRleCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiByb3dJbmRleFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93aW5kZXhBdHRy
KTsKLSAgICBpZiAocm93SW5kZXhWYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiBy
b3dJbmRleFZhbHVlLnRvSW50KCk7CisgICAgdW5zaWduZWQgcm93SW5kZXhWYWx1ZSA9IHVuc2ln
bmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93SW5kZXgpOworICAgIGlmIChy
b3dJbmRleFZhbHVlID49IDEpCisgICAgICAgIHJldHVybiByb3dJbmRleFZhbHVlOwogICAgIAog
ICAgIHJldHVybiAtMTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaAkocmV2aXNpb24gMjI0OTk5KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRDaGls
ZHJlbigpIG92ZXJyaWRlOwogICAgIAotICAgIGludCBhcmlhQ29sdW1uSW5kZXgoKSBjb25zdDsK
LSAgICBpbnQgYXJpYVJvd0luZGV4KCkgY29uc3Q7CisgICAgaW50IGF4Q29sdW1uSW5kZXgoKSBj
b25zdDsKKyAgICBpbnQgYXhSb3dJbmRleCgpIGNvbnN0OwogICAgIAogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlUYWJsZVJvdyhSZW5kZXJPYmplY3QqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCShyZXZp
c2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQCBzdGF0aWMgQVJJQUF0dHJp
YnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpB
dXRvY29tcGxldGUsIGFyaWFfYXV0b2NvbXBsZXRlQXR0ciB9LAogICAgICAgICAgICAgeyBBWFBy
b3BlcnR5TmFtZTo6QnVzeSwgYXJpYV9idXN5QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3Bl
cnR5TmFtZTo6Q2hlY2tlZCwgYXJpYV9jaGVja2VkQXR0ciB9LAorICAgICAgICAgICAgeyBBWFBy
b3BlcnR5TmFtZTo6Q29sQ291bnQsIGFyaWFfY29sY291bnRBdHRyIH0sCisgICAgICAgICAgICB7
IEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCwgYXJpYV9jb2xpbmRleEF0dHIgfSwKKyAgICAgICAg
ICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkNvbFNwYW4sIGFyaWFfY29sc3BhbkF0dHIgfSwKICAgICAg
ICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnQsIGFyaWFfY3VycmVudEF0dHIgfSwKICAg
ICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkRpc2FibGVkLCBhcmlhX2Rpc2FibGVkQXR0ciB9
LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWQsIGFyaWFfZXhwYW5kZWRB
dHRyIH0sCkBAIC01NywyMCArNjAsMjkgQEAgc3RhdGljIEFSSUFBdHRyaWJ1dGVNYXAmIGFyaWFB
dHRyaWJ1dGVNYQogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6SW52YWxpZCwgYXJpYV9p
bnZhbGlkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6S2V5U2hvcnRjdXRz
LCBhcmlhX2tleXNob3J0Y3V0c0F0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OkxhYmVsLCBhcmlhX2xhYmVsQXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6
TGV2ZWwsIGFyaWFfbGV2ZWxBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpM
aXZlLCBhcmlhX2xpdmVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpNb2Rh
bCwgYXJpYV9tb2RhbEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6Ok11bHRp
bGluZSwgYXJpYV9tdWx0aWxpbmVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1l
OjpNdWx0aXNlbGVjdGFibGUsIGFyaWFfbXVsdGlzZWxlY3RhYmxlQXR0ciB9LAogICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6T3JpZW50YXRpb24sIGFyaWFfb3JpZW50YXRpb25BdHRyIH0s
CiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlciwgYXJpYV9wbGFjZWhv
bGRlckF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0LCBhcmlh
X3Bvc2luc2V0QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6UHJlc3NlZCwg
YXJpYV9wcmVzc2VkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6UmVhZE9u
bHksIGFyaWFfcmVhZG9ubHlBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpS
ZWxldmFudCwgYXJpYV9yZWxldmFudEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5h
bWU6OlJlcXVpcmVkLCBhcmlhX3JlcXVpcmVkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3Bl
cnR5TmFtZTo6Um9sZSwgcm9sZUF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OlJvbGVEZXNjcmlwdGlvbiwgYXJpYV9yb2xlZGVzY3JpcHRpb25BdHRyIH0sCisgICAgICAgICAg
ICB7IEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCwgYXJpYV9yb3djb3VudEF0dHIgfSwKKyAgICAg
ICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4LCBhcmlhX3Jvd2luZGV4QXR0ciB9LAor
ICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Um93U3BhbiwgYXJpYV9yb3dzcGFuQXR0ciB9
LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWQsIGFyaWFfc2VsZWN0ZWRB
dHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpTZXRTaXplLCBhcmlhX3NldHNp
emVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpTb3J0LCBhcmlhX3NvcnRB
dHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCwgYXJpYV92YWx1
ZW1heEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluLCBhcmlh
X3ZhbHVlbWluQXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cs
IGFyaWFfdmFsdWVub3dBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpWYWx1
ZVRleHQsIGFyaWFfdmFsdWV0ZXh0QXR0ciB9CiAgICAgICAgIH07CiAgICAgICAgIEFSSUFBdHRy
aWJ1dGVNYXAgbWFwOwpAQCAtMTI2LDYgKzEzOCw0NSBAQCBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5
VmFsdWVCb29sZWFuKEFYUHJvCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFs
dWVJbnQoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHN3aXRjaCAocHJvcGVy
dHlOYW1lKSB7CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQ6CisgICAgY2FzZSBB
WFByb3BlcnR5TmFtZTo6Um93Q291bnQ6CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6U2V0U2l6
ZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNQcm9wZXJ0eVZhbHVlVW5zaWduZWQoQVhQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHN3aXRjaCAocHJvcGVydHlOYW1lKSB7
CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Q29sSW5kZXg6CisgICAgY2FzZSBBWFByb3BlcnR5
TmFtZTo6Q29sU3BhbjoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpMZXZlbDoKKyAgICBjYXNl
IEFYUHJvcGVydHlOYW1lOjpQb3NJblNldDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpSb3dJ
bmRleDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitz
dGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVGbG9hdChBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWUpIHsKKyAgICBjYXNlIEFYUHJvcGVydHlO
YW1lOjpWYWx1ZU1heDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1pbjoKKyAgICBj
YXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogYm9vbCBBY2Nlc3Np
YmxlTm9kZTo6aGFzUHJvcGVydHkoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewogICAgIGlmIChhdXRvKiBhY2Nlc3NpYmxlTm9kZSA9IGVsZW1lbnQuZXhp
c3RpbmdBY2Nlc3NpYmxlTm9kZSgpKSB7CkBAIC0xNDksNiArMjAwLDI2IEBAIGNvbnN0IFByb3Bl
cnR5VmFsdWVWYXJpYW50IEFjY2Vzc2libGVOb2QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
dm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhbHVlLCBib29sIHNob3VsZFJlbW92ZSkKK3sK
KyAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7CisgICAgICAgIG1fcHJvcGVydHlNYXAucmVtb3ZlKHBy
b3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wcm9wZXJ0eU1hcC5z
ZXQocHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lk
IEFjY2Vzc2libGVOb2RlOjpzZXRPcHRpb25hbFByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgc3RkOjpvcHRpb25hbDxUPiBvcHRpb25hbCkKK3sKKyAgICBzZXRQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIG9wdGlvbmFsLnZhbHVlKCksICFvcHRpb25hbC5oYXNfdmFsdWUoKSk7Cit9
CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzZXRQcm9wZXJ0eShw
cm9wZXJ0eU5hbWUsIHZhbHVlLCB2YWx1ZS5pc0VtcHR5KCkpOworfQorCiBjb25zdCBTdHJpbmcg
QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1lKTsK
QEAgLTE2OSwxOCArMjQwLDIwIEBAIGNvbnN0IFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6c3RyaW5n
VmFsdWUKICAgICByZXR1cm4gbnVsbEF0b20oKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0U3RyaW5nUHJvcGVydHkoY29uc3QgU3RyaW5nJiB2YWx1ZSwgQVhQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3B0aW9uYWw8VD4gQWNjZXNz
aWJsZU5vZGU6Om9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LCBBWFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgewot
ICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fcHJvcGVydHlNYXAuc2V0KHByb3BlcnR5TmFtZSwgdmFsdWUpOwor
ICAgIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50JiYgdmFyaWFudCA9IEFjY2Vzc2libGVOb2Rl
Ojp2YWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KHZhcmlhbnQpKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFQ+KHZhcmlh
bnQpKQorICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VD4odmFyaWFudCk7CisgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6ZWZm
ZWN0aXZlQm9vbFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBBWFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSA9IGJvb2xW
YWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgYXV0byB2YWx1ZSA9
IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOwog
ICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuICp2YWx1ZTsKIApAQCAtMTk1LDIzICsyNjgs
NDIgQEAgc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6ZWZmZQogICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6
OmJvb2xWYWx1ZUZvclByb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK2ludCBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlSW50VmFsdWVGb3JFbGVt
ZW50KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICBjb25zdCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhcmlhbnQgPSBBY2Nlc3NpYmxlTm9kZTo6
dmFsdWVGb3JQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pih2YXJpYW50KSkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVsbG9wdDsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxib29sPih2YXJp
YW50KSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGJvb2w+KHZhcmlhbnQpOwotICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0
eTxpbnQ+KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBy
ZXR1cm4gKnZhbHVlOworCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250YWlucyhwcm9w
ZXJ0eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZUludChwcm9wZXJ0eU5hbWUpKQorICAgICAgICBy
ZXR1cm4gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRyaWJ1
dGVNYXAoKS5nZXQocHJvcGVydHlOYW1lKSkudG9JbnQoKTsKKworICAgIHJldHVybiAwOwogfQog
Ci12b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRCb29sUHJvcGVydHkoc3RkOjpvcHRpb25hbDxib29s
PiB2YWx1ZSwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQordW5zaWduZWQgQWNjZXNzaWJs
ZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoIXZhbHVlKSB7Ci0gICAg
ICAgIG1fcHJvcGVydHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBhdXRvIHZhbHVlID0gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihlbGVt
ZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0dXJuICp2YWx1
ZTsKKworICAgIGlmIChhcmlhQXR0cmlidXRlTWFwKCkuY29udGFpbnMocHJvcGVydHlOYW1lKSAm
JiBpc1Byb3BlcnR5VmFsdWVVbnNpZ25lZChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSAgZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9u
KGFyaWFBdHRyaWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1lKSk7CisgICAgICAgIHJldHVybiB2
YWx1ZS50b1VJbnQoKTsKICAgICB9Ci0gICAgbV9wcm9wZXJ0eU1hcC5zZXQocHJvcGVydHlOYW1l
LCAqdmFsdWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2Zsb2F0IEFjY2Vzc2libGVOb2RlOjpl
ZmZlY3RpdmVGbG9hdFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBBWFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgYXV0byB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQ
cm9wZXJ0eTxkb3VibGU+KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKHZhbHVlKQor
ICAgICAgICByZXR1cm4gKnZhbHVlOworCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250
YWlucyhwcm9wZXJ0eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZUZsb2F0KHByb3BlcnR5TmFtZSkp
CisgICAgICAgIHJldHVybiBlbGVtZW50LmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
YXJpYUF0dHJpYnV0ZU1hcCgpLmdldChwcm9wZXJ0eU5hbWUpKS50b0Zsb2F0KCk7CisKKyAgICBy
ZXR1cm4gMC4wZjsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6bm90aWZ5QXR0cmlidXRlQ2hh
bmdlZChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBuYW1lKQpAQCAtMjIyLDEyICszMTQs
MTIgQEAgdm9pZCBBY2Nlc3NpYmxlTm9kZTo6bm90aWZ5QXR0cmlidXRlQ2hhbgogCiBzdGQ6Om9w
dGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjphdG9taWMoKSBjb25zdAogewotICAgIHJldHVy
biBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkF0
b21pYyk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVy
RWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYyk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5v
ZGU6OnNldEF0b21pYyhzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQ
cm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYyk7CisgICAgc2V0T3B0aW9uYWxQ
cm9wZXJ0eTxib29sPihBWFByb3BlcnR5TmFtZTo6QXRvbWljLCB2YWx1ZSk7CiAgICAgbm90aWZ5
QXR0cmlidXRlQ2hhbmdlZChhcmlhX2F0b21pY0F0dHIpOwogfQogCkBAIC0yMzgsMTggKzMzMCwx
OCBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmF1dG9jb21wbGV0ZSgpIGNvCiAKIHZvaWQgQWNj
ZXNzaWJsZU5vZGU6OnNldEF1dG9jb21wbGV0ZShjb25zdCBTdHJpbmcmIGF1dG9jb21wbGV0ZSkK
IHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShhdXRvY29tcGxldGUsIEFYUHJvcGVydHlOYW1lOjpB
dXRvY29tcGxldGUpOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpBdXRv
Y29tcGxldGUsIGF1dG9jb21wbGV0ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlh
X2F1dG9jb21wbGV0ZUF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVO
b2RlOjpidXN5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9v
d25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpCdXN5KTsKKyAgICByZXR1cm4gb3B0aW9uYWxW
YWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6QnVz
eSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEJ1c3koc3RkOjpvcHRpb25hbDxib29s
PiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpC
dXN5KTsKKyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJvcGVydHlOYW1lOjpCdXN5
LCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2J1c3lBdHRyKTsKIH0K
IApAQCAtMjYwLDEwICszNTIsNDMgQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpjaGVja2VkKCkg
Y29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0Q2hlY2tlZChjb25zdCBTdHJpbmcmIGNo
ZWNrZWQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkoY2hlY2tlZCwgQVhQcm9wZXJ0eU5hbWU6
OkNoZWNrZWQpOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDaGVja2Vk
LCBjaGVja2VkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY2hlY2tlZEF0dHIp
OwogfQogCitzdGQ6Om9wdGlvbmFsPGludD4gQWNjZXNzaWJsZU5vZGU6OmNvbENvdW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGludD4obV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5v
ZGU6OnNldENvbENvdW50KHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSkKK3sKKyAgICBzZXRPcHRp
b25hbFByb3BlcnR5PGludD4oQVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50LCB2YWx1ZSk7CisgICAg
bm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2NvbGNvdW50QXR0cik7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpjb2xJbmRleCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNl
dENvbEluZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQoreworICAgIHNldE9wdGlv
bmFsUHJvcGVydHk8dW5zaWduZWQ+KEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCwgdmFsdWUpOwor
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jb2xpbmRleEF0dHIpOworfQorCitzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6Y29sU3BhbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1l
bnQsIEFYUHJvcGVydHlOYW1lOjpDb2xTcGFuKTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0Q29sU3BhbihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sKKyAgICBzZXRPcHRp
b25hbFByb3BlcnR5PHVuc2lnbmVkPihBWFByb3BlcnR5TmFtZTo6Q29sU3BhbiwgdmFsdWUpOwor
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jb2xzcGFuQXR0cik7Cit9CisKIFN0cmlu
ZyBBY2Nlc3NpYmxlTm9kZTo6Y3VycmVudCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHN0cmluZ1Zh
bHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpDdXJyZW50KTsK
QEAgLTI3MSwyOSArMzk2LDI5IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6Y3VycmVudCgpIGNv
bnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEN1cnJlbnQoY29uc3QgU3RyaW5nJiBjdXJy
ZW50KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGN1cnJlbnQsIEFYUHJvcGVydHlOYW1lOjpD
dXJyZW50KTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Q3VycmVudCwg
Y3VycmVudCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2N1cnJlbnRBdHRyKTsK
IH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQoKSBjb25z
dAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQ
cm9wZXJ0eU5hbWU6OkRpc2FibGVkKTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3Bl
cnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6RGlzYWJsZWQpOwogfQog
CiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXREaXNhYmxlZChzdGQ6Om9wdGlvbmFsPGJvb2w+IHZh
bHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OkRpc2Fi
bGVkKTsKKyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJvcGVydHlOYW1lOjpEaXNh
YmxlZCwgdmFsdWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9kaXNhYmxlZEF0
dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjpleHBhbmRlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50
LCBBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWQpOworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9y
UHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpFeHBhbmRlZCk7
CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEV4cGFuZGVkKHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZhbHVlLCBBWFByb3BlcnR5TmFtZTo6
RXhwYW5kZWQpOworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8Ym9vbD4oQVhQcm9wZXJ0eU5hbWU6
OkV4cGFuZGVkLCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2V4cGFu
ZGVkQXR0cik7CiB9CiAKQEAgLTMwNCwxOCArNDI5LDE4IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9k
ZTo6aGFzUG9wVXAoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRIYXNQb3BVcChj
b25zdCBTdHJpbmcmIGhhc1BvcFVwKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGhhc1BvcFVw
LCBBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXApOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpIYXNQb3BVcCwgaGFzUG9wVXApOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5n
ZWQoYXJpYV9oYXNwb3B1cEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2li
bGVOb2RlOjpoaWRkZW4oKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0
eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbik7CisgICAgcmV0dXJuIG9w
dGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5h
bWU6OkhpZGRlbik7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEhpZGRlbihzdGQ6Om9w
dGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9w
ZXJ0eU5hbWU6OkhpZGRlbik7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3Bl
cnR5TmFtZTo6SGlkZGVuLCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlh
X2hpZGRlbkF0dHIpOwogfQogCkBAIC0zMjYsNyArNDUxLDcgQEAgU3RyaW5nIEFjY2Vzc2libGVO
b2RlOjppbnZhbGlkKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0SW52YWxpZChj
b25zdCBTdHJpbmcmIGludmFsaWQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkoaW52YWxpZCwg
QVhQcm9wZXJ0eU5hbWU6OkludmFsaWQpOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVy
dHlOYW1lOjpJbnZhbGlkLCBpbnZhbGlkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFy
aWFfaW52YWxpZEF0dHIpOwogfQogCkBAIC0zMzcsNjIgKzQ2Miw3MyBAQCBTdHJpbmcgQWNjZXNz
aWJsZU5vZGU6OmtleVNob3J0Y3V0cygpIGNvCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEtl
eVNob3J0Y3V0cyhjb25zdCBTdHJpbmcmIGtleVNob3J0Y3V0cykKIHsKLSAgICBzZXRTdHJpbmdQ
cm9wZXJ0eShrZXlTaG9ydGN1dHMsIEFYUHJvcGVydHlOYW1lOjpLZXlTaG9ydGN1dHMpOworICAg
IHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpLZXlTaG9ydGN1dHMsIGtleVNob3J0
Y3V0cyk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2tleXNob3J0Y3V0c0F0dHIp
OwogfQogCi1TdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmxpdmUoKSBjb25zdAorU3RyaW5nIEFjY2Vz
c2libGVOb2RlOjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJv
cGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpMaXZlKTsKKyAgICByZXR1cm4g
c3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Okxh
YmVsKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGl2ZShjb25zdCBTdHJpbmcmIGxp
dmUpCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQog
ewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGxpdmUsIEFYUHJvcGVydHlOYW1lOjpMaXZlKTsKLSAg
ICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGl2ZUF0dHIpOworICAgIHNldFN0cmluZ1By
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMYWJlbCwgbGFiZWwpOworICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV9sYWJlbEF0dHIpOwogfQogCi1TdHJpbmcgQWNjZXNzaWJsZU5vZGU6Omxh
YmVsKCkgY29uc3QKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpsZXZl
bCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpMYWJlbCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVG
b3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpMZXZl
bCk7CiB9CiAKLXZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldExhYmVsKGNvbnN0IFN0cmluZyYgbGFi
ZWwpCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMZXZlbChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVk
PiB2YWx1ZSkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShsYWJlbCwgQVhQcm9wZXJ0eU5hbWU6
OkxhYmVsKTsKLSAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGFiZWxBdHRyKTsKKyAg
ICBzZXRPcHRpb25hbFByb3BlcnR5PHVuc2lnbmVkPihBWFByb3BlcnR5TmFtZTo6TGV2ZWwsIHZh
bHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGV2ZWxBdHRyKTsKK30KKwor
U3RyaW5nIEFjY2Vzc2libGVOb2RlOjpsaXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3RyaW5n
VmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkxpdmUpOwor
fQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMaXZlKGNvbnN0IFN0cmluZyYgbGl2ZSkKK3sK
KyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGl2ZSwgbGl2ZSk7CisgICAg
bm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2xpdmVBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25h
bDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6bW9kYWwoKSBjb25zdAogewotICAgIHJldHVybiBib29s
VmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok1vZGFsKTsK
KyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50
LCBBWFByb3BlcnR5TmFtZTo6TW9kYWwpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRN
b2RhbChzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2
YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6Ok1vZGFsKTsKKyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJv
b2w+KEFYUHJvcGVydHlOYW1lOjpNb2RhbCwgdmFsdWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV9tb2RhbEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2li
bGVOb2RlOjptdWx0aWxpbmUoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9w
ZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSk7CisgICAgcmV0
dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9w
ZXJ0eU5hbWU6Ok11bHRpbGluZSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldE11bHRp
bGluZShzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2
YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0
eTxib29sPihBWFByb3BlcnR5TmFtZTo6TXVsdGlsaW5lLCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0
cmlidXRlQ2hhbmdlZChhcmlhX211bHRpbGluZUF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJv
b2w+IEFjY2Vzc2libGVOb2RlOjptdWx0aXNlbGVjdGFibGUoKSBjb25zdAogewotICAgIHJldHVy
biBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok11
bHRpc2VsZWN0YWJsZSk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29s
PihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSk7CiB9CiAK
IHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldE11bHRpc2VsZWN0YWJsZShzdGQ6Om9wdGlvbmFsPGJv
b2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6
Ok11bHRpc2VsZWN0YWJsZSk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3Bl
cnR5TmFtZTo6TXVsdGlzZWxlY3RhYmxlLCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hh
bmdlZChhcmlhX211bHRpc2VsZWN0YWJsZUF0dHIpOwogfQogCkBAIC00MDMsNyArNTM5LDcgQEAg
U3RyaW5nIEFjY2Vzc2libGVOb2RlOjpvcmllbnRhdGlvbigpIGNvbgogCiB2b2lkIEFjY2Vzc2li
bGVOb2RlOjpzZXRPcmllbnRhdGlvbihjb25zdCBTdHJpbmcmIG9yaWVudGF0aW9uKQogewotICAg
IHNldFN0cmluZ1Byb3BlcnR5KG9yaWVudGF0aW9uLCBBWFByb3BlcnR5TmFtZTo6T3JpZW50YXRp
b24pOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpPcmllbnRhdGlvbiwg
b3JpZW50YXRpb24pOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9vcmllbnRhdGlv
bkF0dHIpOwogfQogCkBAIC00MTQsMTAgKzU1MCwyMSBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6
OnBsYWNlaG9sZGVyKCkgY29uCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFBsYWNlaG9sZGVy
KGNvbnN0IFN0cmluZyYgcGxhY2Vob2xkZXIpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkocGxh
Y2Vob2xkZXIsIEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlcik7CisgICAgc2V0U3RyaW5nUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBsYWNlaG9sZGVyLCBwbGFjZWhvbGRlcik7CiAgICAgbm90
aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3BsYWNlaG9sZGVyQXR0cik7CiB9CiAKK3N0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpwb3NJblNldCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9vd25lckVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNl
dFBvc0luU2V0KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQoreworICAgIHNldE9wdGlv
bmFsUHJvcGVydHk8dW5zaWduZWQ+KEFYUHJvcGVydHlOYW1lOjpQb3NJblNldCwgdmFsdWUpOwor
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9wb3NpbnNldEF0dHIpOworfQorCiBTdHJp
bmcgQWNjZXNzaWJsZU5vZGU6OnByZXNzZWQoKSBjb25zdAogewogICAgIHJldHVybiBzdHJpbmdW
YWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UHJlc3NlZCk7
CkBAIC00MjUsMTggKzU3MiwxOCBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnByZXNzZWQoKSBj
b25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRQcmVzc2VkKGNvbnN0IFN0cmluZyYgcHJl
c3NlZCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShwcmVzc2VkLCBBWFByb3BlcnR5TmFtZTo6
UHJlc3NlZCk7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlByZXNzZWQs
IHByZXNzZWQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9wcmVzc2VkQXR0cik7
CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OnJlYWRPbmx5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpSZWFkT25seSk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9w
ZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJlYWRPbmx5KTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UmVhZE9ubHkoc3RkOjpvcHRpb25hbDxib29sPiB2
YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpSZWFk
T25seSk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3BlcnR5TmFtZTo6UmVh
ZE9ubHksIHZhbHVlKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcmVhZG9ubHlB
dHRyKTsKIH0KIApAQCAtNDQ3LDE4ICs1OTQsMTggQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpy
ZWxldmFudCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJlbGV2YW50KGNvbnN0
IFN0cmluZyYgcmVsZXZhbnQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkocmVsZXZhbnQsIEFY
UHJvcGVydHlOYW1lOjpSZWxldmFudCk7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0
eU5hbWU6OlJlbGV2YW50LCByZWxldmFudCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChh
cmlhX3JlbGV2YW50QXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5v
ZGU6OnJlcXVpcmVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHko
bV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSZXF1aXJlZCk7CisgICAgcmV0dXJuIG9w
dGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5h
bWU6OlJlcXVpcmVkKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UmVxdWlyZWQoc3Rk
OjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFY
UHJvcGVydHlOYW1lOjpSZXF1aXJlZCk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihB
WFByb3BlcnR5TmFtZTo6UmVxdWlyZWQsIHZhbHVlKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFu
Z2VkKGFyaWFfcmVxdWlyZWRBdHRyKTsKIH0KIApAQCAtNDY5LDcgKzYxNiw3IEBAIFN0cmluZyBB
Y2Nlc3NpYmxlTm9kZTo6cm9sZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJv
bGUoY29uc3QgU3RyaW5nJiByb2xlKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHJvbGUsIEFY
UHJvcGVydHlOYW1lOjpSb2xlKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6Um9sZSwgcm9sZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChyb2xlQXR0cik7CiB9
CiAKQEAgLTQ4MCwyMSArNjI3LDY1IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6cm9sZURlc2Ny
aXB0aW9uKCkKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0Um9sZURlc2NyaXB0aW9uKGNvbnN0
IFN0cmluZyYgcm9sZURlc2NyaXB0aW9uKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHJvbGVE
ZXNjcmlwdGlvbiwgQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbik7CisgICAgc2V0U3Ry
aW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbiwgcm9sZURlc2NyaXB0
aW9uKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcm9sZWRlc2NyaXB0aW9uQXR0
cik7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8aW50PiBBY2Nlc3NpYmxlTm9kZTo6cm93Q291bnQoKSBj
b25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8aW50PihtX293bmVy
RWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmxl
Tm9kZTo6c2V0Um93Q291bnQoc3RkOjpvcHRpb25hbDxpbnQ+IHZhbHVlKQoreworICAgIHNldE9w
dGlvbmFsUHJvcGVydHk8aW50PihBWFByb3BlcnR5TmFtZTo6Um93Q291bnQsIHZhbHVlKTsKKyAg
ICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcm93Y291bnRBdHRyKTsKK30KKworc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OnJvd0luZGV4KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihtX293bmVyRWxlbWVu
dCwgQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0Um93SW5kZXgoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7CisgICAgc2V0T3B0
aW9uYWxQcm9wZXJ0eTx1bnNpZ25lZD4oQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4LCB2YWx1ZSk7
CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jvd2luZGV4QXR0cik7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpyb3dTcGFuKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2lnbmVkPihtX293bmVyRWxl
bWVudCwgQVhQcm9wZXJ0eU5hbWU6OlJvd1NwYW4pOworfQorCit2b2lkIEFjY2Vzc2libGVOb2Rl
OjpzZXRSb3dTcGFuKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQoreworICAgIHNldE9w
dGlvbmFsUHJvcGVydHk8dW5zaWduZWQ+KEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuLCB2YWx1ZSk7
CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jvd3NwYW5BdHRyKTsKK30KKwogc3Rk
OjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6c2VsZWN0ZWQoKSBjb25zdAogewotICAg
IHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5h
bWU6OlNlbGVjdGVkKTsKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+
KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWQpOwogfQogCiB2b2lkIEFj
Y2Vzc2libGVOb2RlOjpzZXRTZWxlY3RlZChzdGQ6Om9wdGlvbmFsPGJvb2w+IHZhbHVlKQogewot
ICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkKTsKKyAg
ICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJvcGVydHlOYW1lOjpTZWxlY3RlZCwgdmFs
dWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9zZWxlY3RlZEF0dHIpOwogfQog
CitzdGQ6Om9wdGlvbmFsPGludD4gQWNjZXNzaWJsZU5vZGU6OnNldFNpemUoKSBjb25zdAorewor
ICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8aW50PihtX293bmVyRWxlbWVudCwg
QVhQcm9wZXJ0eU5hbWU6OlNldFNpemUpOworfQorCit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRT
ZXRTaXplKHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSkKK3sKKyAgICBzZXRPcHRpb25hbFByb3Bl
cnR5PGludD4oQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRy
aWJ1dGVDaGFuZ2VkKGFyaWFfc2V0c2l6ZUF0dHIpOworfQorCiBTdHJpbmcgQWNjZXNzaWJsZU5v
ZGU6OnNvcnQoKSBjb25zdAogewogICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1f
b3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6U29ydCk7CkBAIC01MDIsMTAgKzY5Myw0MyBA
QCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnNvcnQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVO
b2RlOjpzZXRTb3J0KGNvbnN0IFN0cmluZyYgc29ydCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0
eShzb3J0LCBBWFByb3BlcnR5TmFtZTo6U29ydCk7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlNvcnQsIHNvcnQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJp
YV9zb3J0QXR0cik7CiB9CiAKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBBY2Nlc3NpYmxlTm9kZTo6
dmFsdWVNYXgoKSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8
ZG91YmxlPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWF4KTsKK30KKwor
dm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNYXgoc3RkOjpvcHRpb25hbDxkb3VibGU+IHZh
bHVlKQoreworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8ZG91YmxlPihBWFByb3BlcnR5TmFtZTo6
VmFsdWVNYXgsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfdmFsdWVt
YXhBdHRyKTsKK30KKworc3RkOjpvcHRpb25hbDxkb3VibGU+IEFjY2Vzc2libGVOb2RlOjp2YWx1
ZU1pbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxkb3Vi
bGU+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6VmFsdWVNaW4pOworfQorCit2b2lk
IEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU1pbihzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWUp
Cit7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxkb3VibGU+KEFYUHJvcGVydHlOYW1lOjpWYWx1
ZU1pbiwgdmFsdWUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV92YWx1ZW1pbkF0
dHIpOworfQorCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gQWNjZXNzaWJsZU5vZGU6OnZhbHVlTm93
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGRvdWJsZT4o
bV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdyk7Cit9CisKK3ZvaWQgQWNj
ZXNzaWJsZU5vZGU6OnNldFZhbHVlTm93KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPiB2YWx1ZSkKK3sK
KyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGRvdWJsZT4oQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTm93
LCB2YWx1ZSk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3ZhbHVlbm93QXR0cik7
Cit9CisKIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6dmFsdWVUZXh0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5h
bWU6OlZhbHVlVGV4dCk7CkBAIC01MTMsNyArNzM3LDcgQEAgU3RyaW5nIEFjY2Vzc2libGVOb2Rl
Ojp2YWx1ZVRleHQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZVRleHQo
Y29uc3QgU3RyaW5nJiB2YWx1ZVRleHQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkodmFsdWVU
ZXh0LCBBWFByb3BlcnR5TmFtZTo6VmFsdWVUZXh0KTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZTo6VmFsdWVUZXh0LCB2YWx1ZVRleHQpOwogICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV92YWx1ZXRleHRBdHRyKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAkocmV2aXNpb24gMjI0OTk5KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBW
YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcsIGJvb2wsIGludD4gUHJvcGVydHlWYWx1ZVZh
cmlhbnQ7Cit0eXBlZGVmIFZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50
LCB1bnNpZ25lZCwgZG91YmxlPiBQcm9wZXJ0eVZhbHVlVmFyaWFudDsKIAogZW51bSBjbGFzcyBB
WFByb3BlcnR5TmFtZSB7CiAgICAgTm9uZSwKQEAgLTQ0LDYgKzQ0LDkgQEAgZW51bSBjbGFzcyBB
WFByb3BlcnR5TmFtZSB7CiAgICAgQXV0b2NvbXBsZXRlLAogICAgIEJ1c3ksCiAgICAgQ2hlY2tl
ZCwKKyAgICBDb2xDb3VudCwKKyAgICBDb2xJbmRleCwKKyAgICBDb2xTcGFuLAogICAgIEN1cnJl
bnQsCiAgICAgRGlzYWJsZWQsCiAgICAgRXhwYW5kZWQsCkBAIC01MiwyMCArNTUsMjkgQEAgZW51
bSBjbGFzcyBBWFByb3BlcnR5TmFtZSB7CiAgICAgSW52YWxpZCwKICAgICBLZXlTaG9ydGN1dHMs
CiAgICAgTGFiZWwsCisgICAgTGV2ZWwsCiAgICAgTGl2ZSwKICAgICBNb2RhbCwKICAgICBNdWx0
aWxpbmUsCiAgICAgTXVsdGlzZWxlY3RhYmxlLAogICAgIE9yaWVudGF0aW9uLAogICAgIFBsYWNl
aG9sZGVyLAorICAgIFBvc0luU2V0LAogICAgIFByZXNzZWQsCiAgICAgUmVhZE9ubHksCiAgICAg
UmVsZXZhbnQsCiAgICAgUmVxdWlyZWQsCiAgICAgUm9sZSwKICAgICBSb2xlRGVzY3JpcHRpb24s
CisgICAgUm93Q291bnQsCisgICAgUm93SW5kZXgsCisgICAgUm93U3BhbiwKICAgICBTZWxlY3Rl
ZCwKKyAgICBTZXRTaXplLAogICAgIFNvcnQsCisgICAgVmFsdWVNYXgsCisgICAgVmFsdWVNaW4s
CisgICAgVmFsdWVOb3csCiAgICAgVmFsdWVUZXh0CiB9OwogCkBAIC05NSw2ICsxMDcsOSBAQCBw
dWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIGVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9y
RWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBzdGQ6Om9wdGlv
bmFsPGJvb2w+IGVmZmVjdGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgaW50IGVmZmVjdGl2ZUludFZhbHVlRm9yRWxlbWVudChFbGVt
ZW50JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRpYyB1bnNpZ25lZCBlZmZlY3RpdmVVbnNp
Z25lZFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0YXRp
YyBmbG9hdCBlZmZlY3RpdmVGbG9hdFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0
eU5hbWUpOwogICAgIHN0YXRpYyBib29sIGhhc1Byb3BlcnR5KEVsZW1lbnQmLCBBWFByb3BlcnR5
TmFtZSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGF0b21pYygpIGNvbnN0OwpAQCAtMTA5
LDYgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNoZWNrZWQoKSBjb25zdDsKICAgICB2
b2lkIHNldENoZWNrZWQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4g
Y29sQ291bnQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbENvdW50KHN0ZDo6b3B0aW9uYWw8aW50
Pik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb2xJbmRleCgpIGNvbnN0OworICAg
IHZvaWQgc2V0Q29sSW5kZXgoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworCisgICAgc3RkOjpv
cHRpb25hbDx1bnNpZ25lZD4gY29sU3BhbigpIGNvbnN0OworICAgIHZvaWQgc2V0Q29sU3Bhbihz
dGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik7CisKICAgICBTdHJpbmcgY3VycmVudCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q3VycmVudChjb25zdCBTdHJpbmcmKTsKIApAQCAtMTMwLDEyICsxNTQsMTUg
QEAgcHVibGljOgogICAgIFN0cmluZyBrZXlTaG9ydGN1dHMoKSBjb25zdDsKICAgICB2b2lkIHNl
dEtleVNob3J0Y3V0cyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBsaXZlKCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRMaXZlKGNvbnN0IFN0cmluZyYpOwotCiAgICAgU3RyaW5nIGxhYmVsKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIAorICAgIHN0ZDo6b3B0
aW9uYWw8dW5zaWduZWQ+IGxldmVsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRMZXZlbChzdGQ6Om9w
dGlvbmFsPHVuc2lnbmVkPik7CisKKyAgICBTdHJpbmcgbGl2ZSgpIGNvbnN0OworICAgIHZvaWQg
c2V0TGl2ZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbW9kYWwo
KSBjb25zdDsKICAgICB2b2lkIHNldE1vZGFsKHN0ZDo6b3B0aW9uYWw8Ym9vbD4pOwogCkBAIC0x
NTEsNiArMTc4LDkgQEAgcHVibGljOgogICAgIFN0cmluZyBwbGFjZWhvbGRlcigpIGNvbnN0Owog
ICAgIHZvaWQgc2V0UGxhY2Vob2xkZXIoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBwb3NJblNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0UG9zSW5TZXQoc3Rk
OjpvcHRpb25hbDx1bnNpZ25lZD4pOworICAgIAogICAgIFN0cmluZyBwcmVzc2VkKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRQcmVzc2VkKGNvbnN0IFN0cmluZyYpOwogCkBAIC0xNjksMjEgKzE5OSw0
NCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJvbGVEZXNjcmlwdGlvbigpIGNvbnN0OwogICAgIHZv
aWQgc2V0Um9sZURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYpOwogCisgICAgc3RkOjpvcHRpb25h
bDxpbnQ+IHJvd0NvdW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSb3dDb3VudChzdGQ6Om9wdGlv
bmFsPGludD4pOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcm93SW5kZXgoKSBjb25z
dDsKKyAgICB2b2lkIHNldFJvd0luZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+KTsKKworICAg
IHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHJvd1NwYW4oKSBjb25zdDsKKyAgICB2b2lkIHNldFJv
d1NwYW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworCiAgICAgc3RkOjpvcHRpb25hbDxib29s
PiBzZWxlY3RlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWQoc3RkOjpvcHRpb25hbDxi
b29sPik7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gc2V0U2l6ZSgpIGNvbnN0OworICAgIHZv
aWQgc2V0U2V0U2l6ZShzdGQ6Om9wdGlvbmFsPGludD4pOworCiAgICAgU3RyaW5nIHNvcnQoKSBj
b25zdDsKICAgICB2b2lkIHNldFNvcnQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9wdGlv
bmFsPGRvdWJsZT4gdmFsdWVNYXgoKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlTWF4KHN0ZDo6
b3B0aW9uYWw8ZG91YmxlPik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVNaW4o
KSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlTWluKHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisK
KyAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVOb3coKSBjb25zdDsKKyAgICB2b2lkIHNl
dFZhbHVlTm93KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisKICAgICBTdHJpbmcgdmFsdWVUZXh0
KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZVRleHQoY29uc3QgU3RyaW5nJik7CiAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50IHZhbHVlRm9yUHJvcGVy
dHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0
cmluZ1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKLSAgICBzdGF0
aWMgc3RkOjpvcHRpb25hbDxib29sPiBib29sVmFsdWVGb3JQcm9wZXJ0eShFbGVtZW50JiwgQVhQ
cm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoY29uc3QgU3RyaW5nJiwg
QVhQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0Qm9vbFByb3BlcnR5KHN0ZDo6b3B0aW9uYWw8
Ym9vbD4sIEFYUHJvcGVydHlOYW1lKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxUPiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJv
cGVydHlOYW1lKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5KEFYUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVZhbHVlVmFyaWFudCYmLCBib29sKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHNldE9wdGlvbmFsUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIHN0ZDo6b3B0aW9uYWw8VD4p
OworICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIGNvbnN0IFN0cmlu
ZyYpOwogICAgIAogICAgIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChjb25zdCBXZWJDb3Jl
OjpRdWFsaWZpZWROYW1lJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJsZU5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsOSBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGF1dG9jb21wbGV0ZTsKICAg
ICBhdHRyaWJ1dGUgYm9vbGVhbj8gYnVzeTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBjaGVj
a2VkOworICAgIGF0dHJpYnV0ZSBsb25nPyBjb2xDb3VudDsKKyAgICBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZz8gY29sSW5kZXg7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGNvbFNwYW47
CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gY3VycmVudDsKICAgICBhdHRyaWJ1dGUgYm9vbGVh
bj8gZGlzYWJsZWQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGV4cGFuZGVkOwpAQCAtMzksMTkg
KzQyLDI4IEBACiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gaW52YWxpZDsKICAgICBhdHRyaWJ1
dGUgRE9NU3RyaW5nPyBrZXlTaG9ydGN1dHM7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gbGFi
ZWw7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGxldmVsOwogICAgIGF0dHJpYnV0ZSBE
T01TdHJpbmc/IGxpdmU7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IG1vZGFsOwogICAgIGF0dHJp
YnV0ZSBib29sZWFuPyBtdWx0aWxpbmU7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IG11bHRpc2Vs
ZWN0YWJsZTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBvcmllbnRhdGlvbjsKICAgICBhdHRy
aWJ1dGUgRE9NU3RyaW5nPyBwbGFjZWhvbGRlcjsKKyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
Zz8gcG9zSW5TZXQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcHJlc3NlZDsKICAgICBhdHRy
aWJ1dGUgYm9vbGVhbj8gcmVhZE9ubHk7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcmVsZXZh
bnQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHJlcXVpcmVkOwogICAgIGF0dHJpYnV0ZSBET01T
dHJpbmc/IHJvbGU7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcm9sZURlc2NyaXB0aW9uOwor
ICAgIGF0dHJpYnV0ZSBsb25nPyByb3dDb3VudDsKKyAgICBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
Zz8gcm93SW5kZXg7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHJvd1NwYW47CiAgICAg
YXR0cmlidXRlIGJvb2xlYW4/IHNlbGVjdGVkOworICAgIGF0dHJpYnV0ZSBsb25nPyBzZXRTaXpl
OwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IHNvcnQ7CisgICAgYXR0cmlidXRlIGRvdWJsZT8g
dmFsdWVNYXg7CisgICAgYXR0cmlidXRlIGRvdWJsZT8gdmFsdWVNaW47CisgICAgYXR0cmlidXRl
IGRvdWJsZT8gdmFsdWVOb3c7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gdmFsdWVUZXh0Owog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAkocmV2aXNpb24g
MjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBA
IHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2wKICAgICBpZiAoIWlzPEFj
Y2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBp
ZiAoaW50IGNvbHVtbkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFi
bGUpLmFyaWFDb2x1bW5Db3VudCgpKQorICAgIGlmIChpbnQgY29sdW1uQ291bnQgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuYXhDb2x1bW5Db3VudCgpKQogICAgICAg
ICByZXR1cm4gY29sdW1uQ291bnQ7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eVRhYmxlPigqYWNjVGFibGUpLmNvbHVtbkNvdW50KCk7CkBAIC0xNjcsNyArMTY3LDcgQEAgc3Rh
dGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvdwogICAgIGlmICghaXM8QWNjZXNz
aWJpbGl0eVRhYmxlPigqYWNjVGFibGUpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChp
bnQgcm93Q291bnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuYXJp
YVJvd0NvdW50KCkpCisgICAgaWYgKGludCByb3dDb3VudCA9IGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmFjY1RhYmxlKS5heFJvd0NvdW50KCkpCiAgICAgICAgIHJldHVybiByb3dDb3Vu
dDsKIAogICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSku
cm93Q291bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNl
bGwuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIwLDcgKzEyMCw3IEBAIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxH
ZXRQb3MKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1bW5Sb3dSYW5nZTsK
ICAgICBpZiAocm93KSB7CiAgICAgICAgIC8vIGFyaWEtcm93aW5kZXggaXMgMS1iYXNlZC4KLSAg
ICAgICAgaW50IHJvd0luZGV4ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4
T2JqZWN0KS5hcmlhUm93SW5kZXgoKSAtIDE7CisgICAgICAgIGludCByb3dJbmRleCA9IGRvd25j
YXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuYXhSb3dJbmRleCgpIC0gMTsK
ICAgICAgICAgaWYgKHJvd0luZGV4IDw9IC0xKSB7CiAgICAgICAgICAgICBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0luZGV4UmFuZ2UoY29sdW1uUm93UmFu
Z2UpOwogICAgICAgICAgICAgcm93SW5kZXggPSBjb2x1bW5Sb3dSYW5nZS5maXJzdDsKQEAgLTEy
OSw3ICsxMjksNyBAQCBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0UG9zCiAg
ICAgfQogICAgIGlmIChjb2x1bW4pIHsKICAgICAgICAgLy8gYXJpYS1jb2xpbmRleCBpcyAxLWJh
c2VkLgotICAgICAgICBpbnQgY29sdW1uSW5kZXggPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFi
bGVDZWxsPigqYXhPYmplY3QpLmFyaWFDb2x1bW5JbmRleCgpIC0gMTsKKyAgICAgICAgaW50IGNv
bHVtbkluZGV4ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmF4T2JqZWN0KS5h
eENvbHVtbkluZGV4KCkgLSAxOwogICAgICAgICBpZiAoY29sdW1uSW5kZXggPD0gLTEpIHsKICAg
ICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuY29s
dW1uSW5kZXhSYW5nZShjb2x1bW5Sb3dSYW5nZSk7CiAgICAgICAgICAgICBjb2x1bW5JbmRleCA9
IGNvbHVtblJvd1JhbmdlLmZpcnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVXcmFwcGVyQXRrLmNw
cAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjQsMzMg
KzQ2NCwzMyBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlCiAKICAg
ICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCkgJiYgZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCkuaXNFeHBvc2FibGVUaHJvdWdoQWNjZXNzaWJp
bGl0eSgpKSB7CiAgICAgICAgIGF1dG8mIHRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqY29yZU9iamVjdCk7Ci0gICAgICAgIGludCByb3dDb3VudCA9IHRhYmxlLmFyaWFSb3dD
b3VudCgpOworICAgICAgICBpbnQgcm93Q291bnQgPSB0YWJsZS5heFJvd0NvdW50KCk7CiAgICAg
ICAgIGlmIChyb3dDb3VudCkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0
cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2NvdW50IiwgU3RyaW5nOjpudW1iZXIocm93Q291
bnQpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGludCBjb2x1bW5Db3VudCA9IHRhYmxlLmFy
aWFDb2x1bW5Db3VudCgpOworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSB0YWJsZS5heENvbHVt
bkNvdW50KCk7CiAgICAgICAgIGlmIChjb2x1bW5Db3VudCkKICAgICAgICAgICAgIGF0dHJpYnV0
ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgImNvbGNvdW50IiwgU3Ry
aW5nOjpudW1iZXIoY29sdW1uQ291bnQpLnV0ZjgoKS5kYXRhKCkpOwogICAgIH0gZWxzZSBpZiAo
aXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY29yZU9iamVjdCkpIHsKICAgICAgICAgYXV0byYg
cm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY29yZU9iamVjdCk7Ci0gICAg
ICAgIGludCByb3dJbmRleCA9IHJvdy5hcmlhUm93SW5kZXgoKTsKKyAgICAgICAgaW50IHJvd0lu
ZGV4ID0gcm93LmF4Um93SW5kZXgoKTsKICAgICAgICAgaWYgKHJvd0luZGV4ICE9IC0xKQogICAg
ICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0
LCAicm93aW5kZXgiLCBTdHJpbmc6Om51bWJlcihyb3dJbmRleCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgfSBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY29yZU9iamVjdCkpIHsK
ICAgICAgICAgYXV0byYgY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpj
b3JlT2JqZWN0KTsKLSAgICAgICAgaW50IHJvd0luZGV4ID0gY2VsbC5hcmlhUm93SW5kZXgoKTsK
KyAgICAgICAgaW50IHJvd0luZGV4ID0gY2VsbC5heFJvd0luZGV4KCk7CiAgICAgICAgIGlmIChy
b3dJbmRleCAhPSAtMSkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2luZGV4IiwgU3RyaW5nOjpudW1iZXIocm93SW5kZXgp
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGludCBjb2x1bW5JbmRleCA9IGNlbGwuYXJpYUNv
bHVtbkluZGV4KCk7CisgICAgICAgIGludCBjb2x1bW5JbmRleCA9IGNlbGwuYXhDb2x1bW5JbmRl
eCgpOwogICAgICAgICBpZiAoY29sdW1uSW5kZXggIT0gLTEpCiAgICAgICAgICAgICBhdHRyaWJ1
dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJjb2xpbmRleCIsIFN0
cmluZzo6bnVtYmVyKGNvbHVtbkluZGV4KS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpbnQg
cm93U3BhbiA9IGNlbGwuYXJpYVJvd1NwYW4oKTsKKyAgICAgICAgaW50IHJvd1NwYW4gPSBjZWxs
LmF4Um93U3BhbigpOwogICAgICAgICBpZiAocm93U3BhbiAhPSAtMSkKICAgICAgICAgICAgIGF0
dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd3NwYW4i
LCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKS51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpbnQg
Y29sdW1uU3BhbiA9IGNlbGwuYXJpYUNvbHVtblNwYW4oKTsKKyAgICAgICAgaW50IGNvbHVtblNw
YW4gPSBjZWxsLmF4Q29sdW1uU3BhbigpOwogICAgICAgICBpZiAoY29sdW1uU3BhbiAhPSAtMSkK
ICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0
ZVNldCwgImNvbHNwYW4iLCBTdHJpbmc6Om51bWJlcihjb2x1bW5TcGFuKS51dGY4KCkuZGF0YSgp
KTsKICAgICB9CkBAIC01MjcsMTEgKzUyNywxMSBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3
ZWJraXRBY2Nlc3NpYmxlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29yZU9iamVjdC0+
c3VwcG9ydHNBUklBUG9zSW5TZXQoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtB
dHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAicG9zaW5zZXQiLCBTdHJpbmc6Om51bWJlcihjb3Jl
T2JqZWN0LT5hcmlhUG9zSW5TZXQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGNvcmVPYmpl
Y3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKKyAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtB
dHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAicG9zaW5zZXQiLCBTdHJpbmc6Om51bWJlcihjb3Jl
T2JqZWN0LT5wb3NJblNldCgpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIGlmIChjb3JlT2JqZWN0
LT5zdXBwb3J0c0FSSUFTZXRTaXplKCkpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRr
QXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInNldHNpemUiLCBTdHJpbmc6Om51bWJlcihjb3Jl
T2JqZWN0LT5hcmlhU2V0U2l6ZSgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoY29yZU9iamVj
dC0+c3VwcG9ydHNTZXRTaXplKCkpCisgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0
cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInNldHNpemUiLCBTdHJpbmc6Om51bWJlcihjb3JlT2Jq
ZWN0LT5zZXRTaXplKCkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgU3RyaW5nIGlzUmVhZE9ubHkg
PSBjb3JlT2JqZWN0LT5yZWFkT25seVZhbHVlKCk7CiAgICAgaWYgKCFpc1JlYWRPbmx5LmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZp
c2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI3NCw3ICsx
Mjc0LDcgQEAgLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QVJJQVJvd0NvdW50CiAgICAgaWYg
KCF0YWJsZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgTlNJbnRlZ2VyIHJvd0NvdW50
ID0gdGFibGUtPmFyaWFSb3dDb3VudCgpOworICAgIE5TSW50ZWdlciByb3dDb3VudCA9IHRhYmxl
LT5heFJvd0NvdW50KCk7CiAgICAgcmV0dXJuIHJvd0NvdW50ID4gMCA/IHJvd0NvdW50IDogMDsK
IH0KIApAQCAtMTI4Niw3ICsxMjg2LDcgQEAgLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QVJJ
QUNvbHVtbkNvdQogICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAg
IE5TSW50ZWdlciBjb2xDb3VudCA9IHRhYmxlLT5hcmlhQ29sdW1uQ291bnQoKTsKKyAgICBOU0lu
dGVnZXIgY29sQ291bnQgPSB0YWJsZS0+YXhDb2x1bW5Db3VudCgpOwogICAgIHJldHVybiBjb2xD
b3VudCA+IDAgPyBjb2xDb3VudCA6IDA7CiB9CiAKQEAgLTEyOTgsNyArMTI5OCw3IEBAIC0gKE5T
VUludGVnZXIpYWNjZXNzaWJpbGl0eUFSSUFSb3dJbmRleAogICAgIGlmICghdGFibGVDZWxsKQog
ICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKICAgICAKLSAgICBOU0ludGVnZXIgcm93SW5kZXgg
PSB0YWJsZUNlbGwtPmFyaWFSb3dJbmRleCgpOworICAgIE5TSW50ZWdlciByb3dJbmRleCA9IHRh
YmxlQ2VsbC0+YXhSb3dJbmRleCgpOwogICAgIHJldHVybiByb3dJbmRleCA+IDAgPyByb3dJbmRl
eCA6IE5TTm90Rm91bmQ7CiB9CiAKQEAgLTEzMTAsNyArMTMxMCw3IEBAIC0gKE5TVUludGVnZXIp
YWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmQKICAgICBpZiAoIXRhYmxlQ2VsbCkKICAgICAgICAg
cmV0dXJuIE5TTm90Rm91bmQ7CiAgICAgCi0gICAgTlNJbnRlZ2VyIGNvbHVtbkluZGV4ID0gdGFi
bGVDZWxsLT5hcmlhQ29sdW1uSW5kZXgoKTsKKyAgICBOU0ludGVnZXIgY29sdW1uSW5kZXggPSB0
YWJsZUNlbGwtPmF4Q29sdW1uSW5kZXgoKTsKICAgICByZXR1cm4gY29sdW1uSW5kZXggPiAwID8g
Y29sdW1uSW5kZXggOiBOU05vdEZvdW5kOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJs
ZUNlbGwuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5oIgogI2ltcG9ydCAi
QWNjZXNzaWJpbGl0eVRhYmxlUm93LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmxlTm9kZS5oIgogI2lt
cG9ydCAiQ2hyb21lLmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQgIkNvbG9y
TWFjLmgiCkBAIC0xMTkyLDkgKzExOTMsOSBAQCAtIChOU0FycmF5KilhZGRpdGlvbmFsQWNjZXNz
aWJpbGl0eUF0dHJpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpOU0FjY2Vzc2liaWxp
dHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdOwogICAgIH0KICAgICAKLSAgICBpZiAobV9vYmplY3Qt
PnN1cHBvcnRzQVJJQVNldFNpemUoKSkKKyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzU2V0U2l6
ZSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3NpYmlsaXR5QVJJQVNl
dFNpemVBdHRyaWJ1dGVdOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNBUklBUG9zSW5TZXQo
KSkKKyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKICAgICAgICAgW2FkZGl0
aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0dHJpYnV0ZV07CiAg
ICAgCiAgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERpcmVjdGlvbiA9IG1fb2Jq
ZWN0LT5zb3J0RGlyZWN0aW9uKCk7CkBAIC0yNjY4LDE0ICsyNjY5LDE0IEBAIC0gKGlkKWFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0dHJpYnV0ZV0pIHsK
ICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIHJldHVy
biAwLgotICAgICAgICBpZiAobV9vYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFtX29iamVjdC0+aGFzQXR0cmlidXRl
KGFyaWFfdmFsdWVub3dBdHRyKSkKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0dHJp
YnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9vYmpl
Y3QtPmhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykpCiAgICAgICAgICAgICBy
ZXR1cm4gQDA7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1fb2Jq
ZWN0LT5taW5WYWx1ZUZvclJhbmdlKCldOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNYXhWYWx1ZUF0dHJpYnV0ZV0p
IHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIHJl
dHVybiAwLgotICAgICAgICBpZiAobV9vYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFtX29iamVjdC0+aGFzQXR0cmli
dXRlKGFyaWFfdmFsdWVub3dBdHRyKSkKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5hcmlhUm9sZUF0
dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRvciAmJiAhbV9v
YmplY3QtPmhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykpCiAgICAgICAgICAg
ICByZXR1cm4gQDA7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Om1f
b2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCldOwogICAgIH0KQEAgLTI4MTIsMTAgKzI4MTMsMTAg
QEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAg
cmV0dXJuIEAodGFibGUucm93Q291bnQoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoW2F0dHJp
YnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5Db3VudEF0
dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5hcmlhQ29sdW1uQ291bnQoKSk7
CisgICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5heENvbHVtbkNvdW50KCkpOwogICAgICAgICAK
ICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxp
dHlBUklBUm93Q291bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXJp
YVJvd0NvdW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXhSb3dDb3VudCgpKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbj4oKm1fb2Jq
ZWN0KSkgewpAQCAtMjg1OSwxMCArMjg2MCwxMCBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShyb3dI
ZWFkZXJzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRv
U3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmRleEF0dHJpYnV0ZV0pCi0gICAgICAg
ICAgICByZXR1cm4gQChjZWxsLmFyaWFDb2x1bW5JbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBAKGNlbGwuYXhDb2x1bW5JbmRleCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJvd0luZGV4QXR0cmli
dXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXJpYVJvd0luZGV4KCkpOworICAgICAg
ICAgICAgcmV0dXJuIEAoY2VsbC5heFJvd0luZGV4KCkpOwogICAgIH0KICAgICAKICAgICBpZiAo
bV9vYmplY3QtPmlzVHJlZSgpKSB7CkBAIC0zMDU3LDkgKzMwNTgsOSBAQCAtIChpZClhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmli
dXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVBvc0luU2V0QXR0cmli
dXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50Om1fb2JqZWN0LT5h
cmlhUG9zSW5TZXQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDpt
X29iamVjdC0+cG9zSW5TZXQoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV0pCi0gICAgICAgIHJldHVy
biBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YXJpYVNldFNpemUoKV07CisgICAg
ICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+c2V0U2l6ZSgpXTsK
ICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJp
bGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldp
dGhCb29sOm1fb2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0
OTk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTctMTEtMTggIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAg
ICBBWDogQU9NOiBJbXBsZW1lbnQgbnVtYmVyIHR5cGUgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NDk3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9B
T00tbnVtYmVyLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbDogQWRkZWQuCisKIDIwMTct
MTEtMTcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFy
ayBzdmcvaW4taHRtbC9ieS1yZWZlcmVuY2UuaHRtbCBhcyBmbGFreSBvbiBpT1MuCkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL0FPTS1u
dW1iZXItcHJvcGVydGllcy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACitGaXJzdCBOYW1lCitUaGlzIHRlc3RzIG51
bWJlciB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRpZXMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1Rlc3QgQU9NIG51bWJlciBwcm9wZXJ0aWVzIGNh
biBiZSBjbGVhcmVkLgorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IDUiCitQ
QVNTIG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVOb3cgaXMgbnVsbAorUEFTUyBheE5vZGUuc3Ry
aW5nVmFsdWUgaXMgIkFYVmFsdWU6IDYiCitQQVNTIG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVO
b3cgaXMgbnVsbAorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IDUiCisKK1Zh
bHVlTWF4LCBWYWx1ZU1pbiBhbmQgVmFsdWVOb3cgc3VwcG9ydAorUEFTUyBheE5vZGUubWF4VmFs
dWUgaXMgMTAwCitQQVNTIGF4Tm9kZS5pbnRWYWx1ZSBpcyA1CitQQVNTIGF4Tm9kZS5taW5WYWx1
ZSBpcyAwCitQQVNTIGF4Tm9kZS5tYXhWYWx1ZSBpcyAyMAorUEFTUyBheE5vZGUuaW50VmFsdWUg
aXMgMTUKK1BBU1MgYXhOb2RlLm1pblZhbHVlIGlzIDEwCisKK1RhYmxlIHJlbGF0ZWQgcHJvcGVy
dGllcyBzdXBwb3J0CitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29s
dW1uQ291bnQnKSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklB
Um93Q291bnQnKSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklB
Q29sdW1uQ291bnQnKSBpcyAxNgorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FY
QVJJQVJvd0NvdW50JykgaXMgMzAKK1BBU1MgYXhOb2RlLmNvbHVtbkluZGV4UmFuZ2UoKSBpcyAn
ezAsIDF9JworUEFTUyBheE5vZGUucm93SW5kZXhSYW5nZSgpIGlzICd7MCwgMX0nCitQQVNTIGF4
Tm9kZS5jb2x1bW5JbmRleFJhbmdlKCkgaXMgJ3swLCAyfScKK1BBU1MgYXhOb2RlLnJvd0luZGV4
UmFuZ2UoKSBpcyAnezAsIDN9JworUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FY
QVJJQUNvbHVtbkluZGV4JykgaXMgLTEKK1BBU1MgYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVl
KCdBWEFSSUFSb3dJbmRleCcpIGlzIC0xCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1
ZSgnQVhBUklBQ29sdW1uSW5kZXgnKSBpcyAxCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVW
YWx1ZSgnQVhBUklBUm93SW5kZXgnKSBpcyAyCisKK0xldmVsIHN1cHBvcnQKK1BBU1MgYXhOb2Rl
LmludFZhbHVlIGlzIDIKK1BBU1MgYXhOb2RlLmludFZhbHVlIGlzIDYKKworUG9zSW5TZXQgYW5k
IFNldFNpemUgc3VwcG9ydAorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJ
QVBvc0luU2V0JykgaXMgOQorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJ
QVNldFNpemUnKSBpcyAxMAorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9B
T00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVs
cGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IHJvbGU9InNsaWRlciIg
aWQ9InNsaWRlciIgYXJpYS12YWx1ZW5vdz0iNSI+PC9kaXY+CisKKzxkaXYgaWQ9ImdyaWQiIHJv
bGU9ImdyaWQiPgorICA8ZGl2IHJvbGU9InJvd2dyb3VwIj4KKyAgICA8ZGl2IHJvbGU9InJvdyI+
CisgICAgICA8c3BhbiBpZD0iY2VsbCIgcm9sZT0iY29sdW1uaGVhZGVyIj5GaXJzdCBOYW1lPC9z
cGFuPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorCis8aCByb2xlPSJoZWFkaW5nIiBp
ZD0iaGVhZGluZyI+Cis8ZGl2IHJvbGU9Imxpc3QiPgorPGRpdiByb2xlPSJsaXN0aXRlbSIgaWQ9
Imxpc3RpdGVtIj48L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorICAgIGRlc2NyaXB0aW9uKCJUaGlz
IHRlc3RzIG51bWJlciB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRpZXMu
Iik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB2
YXIgbm9kZTsKKyAgICAgICAgdmFyIGF4Tm9kZTsKKworICAgICAgICB0ZXN0Q2xlYXJOdW1iZXJQ
cm9wZXJ0eSgpOworICAgICAgICB0ZXN0UmFuZ2VQcm9wZXJ0aWVzKCk7CisgICAgICAgIHRlc3RU
YWJsZVByb3BlcnRpZXMoKTsKKyAgICAgICAgdGVzdExldmVsKCk7CisgICAgICAgIHRlc3RMaXN0
KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdENsZWFyTnVtYmVyUHJvcGVydHkoKSB7Cisg
ICAgICAgIGRlYnVnKCJcblRlc3QgQU9NIG51bWJlciBwcm9wZXJ0aWVzIGNhbiBiZSBjbGVhcmVk
LiIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNsaWRlciIpOwor
ICAgICAgICBheE5vZGUgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVu
dEJ5SWQoInNsaWRlciIpOworICAgICAgICAvLyBOdW1iZXIgdmFsdWUgc2hvdWxkIGJlIG51bGwg
aWYgbm90IHNldC4KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJheE5vZGUuc3RyaW5n
VmFsdWUiLCAiQVhWYWx1ZTogNSIpOworICAgICAgICBzaG91bGRCZU51bGwoIm5vZGUuYWNjZXNz
aWJsZU5vZGUudmFsdWVOb3ciKTsKKyAgICAgICAgLy8gU2V0IHRoZSBBT00gcHJvcGVydHkKKyAg
ICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU5vdyA9IDY7CisgICAgICAgIHNob3VsZEJl
RXF1YWxUb1N0cmluZygiYXhOb2RlLnN0cmluZ1ZhbHVlIiwgIkFYVmFsdWU6IDYiKTsKKyAgICAg
ICAgLy8gQ2xlYXIgdGhlIEFPTSBwcm9wZXJ0eQorICAgICAgICBub2RlLmFjY2Vzc2libGVOb2Rl
LnZhbHVlTm93ID0gbnVsbDsKKyAgICAgICAgc2hvdWxkQmVOdWxsKCJub2RlLmFjY2Vzc2libGVO
b2RlLnZhbHVlTm93Iik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiYXhOb2RlLnN0
cmluZ1ZhbHVlIiwgIkFYVmFsdWU6IDUiKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0UmFu
Z2VQcm9wZXJ0aWVzKCkgeworICAgICAgICBkZWJ1ZygiXG5WYWx1ZU1heCwgVmFsdWVNaW4gYW5k
IFZhbHVlTm93IHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzbGlkZXIiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9k
ZS5tYXhWYWx1ZSIsICIxMDAiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5pbnRWYWx1ZSIs
ICI1Iik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubWluVmFsdWUiLCAiMCIpOworICAgICAg
ICBub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTWF4ID0gMjA7CisgICAgICAgIG5vZGUuYWNjZXNz
aWJsZU5vZGUudmFsdWVOb3cgPSAxNTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1
ZU1pbiA9IDEwOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm1heFZhbHVlIiwgIjIwIik7Cisg
ICAgICAgIHNob3VsZEJlKCJheE5vZGUuaW50VmFsdWUiLCAiMTUiKTsKKyAgICAgICAgc2hvdWxk
QmUoImF4Tm9kZS5taW5WYWx1ZSIsICIxMCIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RU
YWJsZVByb3BlcnRpZXMoKSB7CisgICAgICAgIGRlYnVnKCJcblRhYmxlIHJlbGF0ZWQgcHJvcGVy
dGllcyBzdXBwb3J0Iik7CisgICAgICAgIC8vIGNvbENvdW50IGFuZCByb3dDb3VudAorICAgICAg
ICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyaWQiKTsKKyAgICAgICAgYXhOb2Rl
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJncmlkIik7
CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQUNv
bHVtbkNvdW50JykiLCAiMCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJp
YnV0ZVZhbHVlKCdBWEFSSUFSb3dDb3VudCcpIiwgIjAiKTsKKyAgICAgICAgbm9kZS5hY2Nlc3Np
YmxlTm9kZS5jb2xDb3VudCA9IDE2OworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnJvd0Nv
dW50ID0gMzA7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUo
J0FYQVJJQUNvbHVtbkNvdW50JykiLCAiMTYiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5u
dW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93Q291bnQnKSIsICIzMCIpOworICAgICAgICAK
KyAgICAgICAgLy8gY29sU3BhbiBhbmQgcm93U3BhbgorICAgICAgICBub2RlID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNlbGwiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjZWxsIik7CisgICAgICAgIHNob3VsZEJl
KCJheE5vZGUuY29sdW1uSW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7CisgICAgICAgIHNob3Vs
ZEJlKCJheE5vZGUucm93SW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7CisgICAgICAgIG5vZGUu
YWNjZXNzaWJsZU5vZGUuY29sU3BhbiA9IDI7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUu
cm93U3BhbiA9IDM7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuY29sdW1uSW5kZXhSYW5nZSgp
IiwgIid7MCwgMn0nIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUucm93SW5kZXhSYW5nZSgp
IiwgIid7MCwgM30nIik7CisgICAgICAgIAorICAgICAgICAvLyBjb2xJbmRleCBhbmQgcm93SW5k
ZXgKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklB
Q29sdW1uSW5kZXgnKSIsICItMSIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0
dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dJbmRleCcpIiwgIi0xIik7CisgICAgICAgIG5vZGUuYWNj
ZXNzaWJsZU5vZGUuY29sSW5kZXggPSAxOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnJv
d0luZGV4ID0gMjsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1
ZSgnQVhBUklBQ29sdW1uSW5kZXgnKSIsICIxIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUu
bnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0luZGV4JykiLCAiMiIpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIHRlc3RMZXZlbCgpIHsKKyAgICAgICAgZGVidWcoIlxuTGV2ZWwgc3VwcG9y
dCIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhlYWRpbmciKTsK
KyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1l
bnRCeUlkKCJoZWFkaW5nIik7CisgICAgICAgIC8vIFRoZSBpbXBsaWNpdCB2YWx1ZSBvZiBhcmlh
LWxldmVsIGlzIDIgZm9yIHRoZSBoZWFkaW5nIHJvbGUuCisgICAgICAgIHNob3VsZEJlKCJheE5v
ZGUuaW50VmFsdWUiLCAiMiIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmxldmVsID0g
NjsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5pbnRWYWx1ZSIsICI2IikKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiB0ZXN0TGlzdCgpIHsKKyAgICAgICAgZGVidWcoIlxuUG9zSW5TZXQgYW5kIFNl
dFNpemUgc3VwcG9ydCIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Imxpc3RpdGVtIik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFj
Y2Vzc2libGVFbGVtZW50QnlJZCgibGlzdGl0ZW0iKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxl
Tm9kZS5wb3NJblNldCA9IDk7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuc2V0U2l6ZSA9
IDEwOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFS
SUFQb3NJblNldCcpIiwgIjkiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRy
aWJ1dGVWYWx1ZSgnQVhBUklBU2V0U2l6ZScpIiwgIjEwIik7CisgICAgfQorPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327320</attachid>
            <date>2017-11-18 13:20:29 -0800</date>
            <delta_ts>2017-11-18 22:03:23 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>86038</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTAxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3OSBAQAorMjAxNy0xMS0xOCAgTmFuIFdh
bmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBBT006IEltcGxlbWVudCBudW1i
ZXIgdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzk0OTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBY2Nlc3NpYmlsaXR5IE9iamVjdCBNb2RlbAorICAgICAgICBFeHBsYWluZXI6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL2V4cGxhaW5lci5odG1sCisgICAgICAgIFNwZWM6
IGh0dHBzOi8vd2ljZy5naXRodWIuaW8vYW9tL3NwZWMvCisKKyAgICAgICAgSW1wbGVtZW50ZWQg
dGhlIG51bWJlciB0eXBlIHByb3BlcnRpZXMgZm9yIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGFs
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL0FPTS1udW1iZXItcHJvcGVydGll
cy5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6aXNOb2RlQXJpYVZpc2libGUpOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlBUklBR3JpZDo6aXNNdWx0aVNlbGVjdGFibGUgY29uc3QpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUFSSUFHcmlkQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleFJhbmdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OmF4Um93U3BhbldpdGhSb3dJ
bmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxs
Ojpjb2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlBUklBR3JpZENlbGw6OmFyaWFSb3dTcGFuV2l0aFJvd0luZGV4IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuaDoKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojppc0VuYWJsZWQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmlzTXVsdGlTZWxlY3Rh
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c1JlcXVpcmVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpoZWFkaW5nTGV2ZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU5vZGVPYmplY3Q6OnZhbHVlRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRm9yUmFuZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1pblZhbHVlRm9yUmFuZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNh
bExldmVsIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWVG
b3JQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
Ojp1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdDo6ZG91YmxlVmFsdWVGb3JQcm9wZXJ0eSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdXBwb3J0c1NldFNpemUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNQb3NJblNldCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzZXRTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc0luU2V0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJ
QVNldFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdDo6c3VwcG9ydHNBUklBUG9zSW5TZXQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVNldFNpemUgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6YXJpYVBvc0luU2V0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZGVmYXVs
dE9iamVjdEluY2x1c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
UmVuZGVyT2JqZWN0OjpsaXZlUmVnaW9uQXRvbWljIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlUYWJsZTo6YXhDb2x1bW5Db3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGU6OmF4Um93Q291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVRhYmxlOjphcmlhQ29sdW1uQ291bnQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlOjphcmlhUm93Q291bnQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmg6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OkFjY2Vzc2liaWxpdHlUYWJsZUNl
bGwpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6cm93SW5kZXhS
YW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpj
b2x1bW5JbmRleFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw6OmF4Q29sdW1uSW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dJbmRleCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheENvbHVtblNwYW4gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dTcGFuIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFDb2x1bW5JbmRleCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlh
Um93SW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbDo6YXJpYUNvbHVtblNwYW4gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXJpYVJvd1NwYW4gY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6c2V0QVhDb2xJbmRleEZyb21S
b3cpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6c2V0QVJJQUNv
bEluZGV4RnJvbVJvdyk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5VGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxl
Um93OjphZGRDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5VGFibGVS
b3c6OmF4Q29sdW1uSW5kZXggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVRhYmxlUm93OjpheFJvd0luZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlUYWJsZVJvdzo6YXJpYUNvbHVtbkluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXJpYVJvd0luZGV4IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5oOgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6YXJpYUF0dHJpYnV0ZU1hcCk6CisgICAgICAgIChXZWJDb3JlOjppc1Byb3BlcnR5VmFs
dWVJbnQpOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlVW5zaWduZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJsZU5vZGU6OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRPcHRpb25hbFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6b3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVCb29sVmFsdWVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjplZmZlY3RpdmVEb3VibGVW
YWx1ZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmF0b21p
YyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0QXRvbWljKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRBdXRvY29tcGxldGUpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmJ1c3kgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEJ1c3kpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJsZU5vZGU6OnNldENoZWNrZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OmNvbENvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRD
b2xDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6Y29sSW5kZXggY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldENvbEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpjb2xTcGFuIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRDb2xTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpzZXRDdXJyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpkaXNhYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9k
ZTo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmV4cGFu
ZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRFeHBhbmRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0SGFzUG9wVXApOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmhpZGRlbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0SGlkZGVuKToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2libGVOb2RlOjpzZXRJbnZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpzZXRLZXlTaG9ydGN1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6
OmxhYmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRMYWJl
bCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6bGV2ZWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldExldmVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpsaXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2libGVOb2RlOjpzZXRMaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpt
b2RhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0TW9kYWwp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6Om11bHRpbGluZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0TXVsdGlsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjptdWx0aXNlbGVjdGFibGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldE11bHRpc2VsZWN0YWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0T3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldFBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2libGVOb2RlOjpwb3NJblNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlTm9kZTo6c2V0UG9zSW5TZXQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5v
ZGU6OnNldFByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnJlYWRP
bmx5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRSZWFkT25s
eSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVsZXZhbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnJlcXVpcmVkIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRSZXF1aXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmxlTm9kZTo6c2V0Um9sZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxl
Tm9kZTo6c2V0Um9sZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpyb3dDb3VudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6
c2V0Um93Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnJvd0luZGV4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRSb3dJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6cm93U3BhbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0Um93U3Bhbik6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2VsZWN0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJsZU5vZGU6OnNldFNlbGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
bGVOb2RlOjpzZXRTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2Rl
OjpzZXRTZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpzZXRTb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjp2YWx1ZU1heCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNYXgpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnZhbHVlTWluIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU1pbik6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmxlTm9kZTo6dmFsdWVOb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJs
ZU5vZGU6OnNldFZhbHVlTm93KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpz
ZXRWYWx1ZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmJvb2xWYWx1
ZUZvclByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2Rl
OjpzZXRCb29sUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJsZU5vZGUuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmlk
bDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VGFibGUuY3BwOgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMpOgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvd3MpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwOgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFBvc2l0aW9uKToKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5jcHA6CisgICAgICAg
ICh3ZWJraXRBY2Nlc3NpYmxlR2V0QXR0cmlidXRlcyk6CisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAgICgtW1dl
YkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklBUm93Q291bnRdKToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUFS
SUFDb2x1bW5Db3VudF0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBhY2Nlc3NpYmlsaXR5QVJJQVJvd0luZGV4XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlBUklBQ29sdW1uSW5kZXhdKToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToK
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYWRkaXRpb25hbEFjY2Vz
c2liaWxpdHlBdHRyaWJ1dGVOYW1lc10pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6XSk6CisKIDIwMTctMTEtMTgg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgZmVUdXJi
dWxlbmNlIHdpdGggc3RpdGNoVGlsZXMgaXMgYnJva2VuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDIyNDk5OSkKKysr
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4ODIsNyArMjg4Miw3IEBAIGJvb2wgaXNOb2RlQXJpYVZpc2libGUoTm9kZSog
bm9kZSkKICAgICBib29sIGF4SGlkZGVuRmFsc2VQcmVzZW50ID0gZmFsc2U7CiAgICAgZm9yIChO
b2RlKiB0ZXN0Tm9kZSA9IG5vZGU7IHRlc3ROb2RlOyB0ZXN0Tm9kZSA9IHRlc3ROb2RlLT5wYXJl
bnROb2RlKCkpIHsKICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCp0ZXN0Tm9kZSkpIHsKLSAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gaGlkZGVuVmFsdWUgPSBBY2Nlc3NpYmxlTm9kZTo6
ZWZmZWN0aXZlQm9vbFZhbHVlRm9yRWxlbWVudChkb3duY2FzdDxFbGVtZW50PigqdGVzdE5vZGUp
LCBBWFByb3BlcnR5TmFtZTo6SGlkZGVuKTsKKyAgICAgICAgICAgIGF1dG8gaGlkZGVuVmFsdWUg
PSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlQm9vbFZhbHVlRm9yRWxlbWVudChkb3duY2FzdDxF
bGVtZW50PigqdGVzdE5vZGUpLCBBWFByb3BlcnR5TmFtZTo6SGlkZGVuKTsKICAgICAgICAgICAg
IGJvb2wgYXhIaWRkZW5GYWxzZSA9IGZhbHNlOwogICAgICAgICAgICAgaWYgKGhpZGRlblZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGhpZGRlblZhbHVlLnZhbHVlKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdy
aWQuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlBUklBR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcg
QEAgYm9vbCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWQ6OmFkZFRhYmxlQ2VsbAogCiBib29sIEFjY2Vz
c2liaWxpdHlBUklBR3JpZDo6aXNNdWx0aVNlbGVjdGFibGUoKSBjb25zdAogewotICAgIHN0ZDo6
b3B0aW9uYWw8Ym9vbD4gbXVsdGlTZWxlY3RhYmxlID0gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSk7CisgICAgYXV0byBtdWx0aVNlbGVjdGFibGUg
PSBib29sVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TXVsdGlzZWxlY3RhYmxlKTsK
ICAgICBpZiAobXVsdGlTZWxlY3RhYmxlICYmICFtdWx0aVNlbGVjdGFibGUudmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBUklBR3JpZENl
bGwuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlBUklBR3JpZENlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMiAr
OTEsMTIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjpyb3dJbmRleAogCiAgICAg
Ly8gQVJJQSAxLjEsIGFyaWEtcm93c3BhbiBhdHRyaWJ1dGUgaXMgaW50ZW5kZWQgZm9yIGNlbGxz
IGFuZCBncmlkY2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWluZWQgaW4gYSBuYXRpdmUgdGFibGUu
CiAgICAgLy8gU28gd2Ugc2hvdWxkIGNoZWNrIGZvciB0aGF0IGF0dHJpYnV0ZSBoZXJlLgotICAg
IHJvd1JhbmdlLnNlY29uZCA9IGFyaWFSb3dTcGFuV2l0aFJvd0luZGV4KHJvd1JhbmdlLmZpcnN0
KTsKKyAgICByb3dSYW5nZS5zZWNvbmQgPSBheFJvd1NwYW5XaXRoUm93SW5kZXgocm93UmFuZ2Uu
Zmlyc3QpOwogfQogCi11bnNpZ25lZCBBY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsOjphcmlhUm93
U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCByb3dJbmRleCkgY29uc3QKK3Vuc2lnbmVkIEFjY2Vz
c2liaWxpdHlBUklBR3JpZENlbGw6OmF4Um93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCByb3dJ
bmRleCkgY29uc3QKIHsKLSAgICBpbnQgcm93U3BhbiA9IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6
OmFyaWFSb3dTcGFuKCk7CisgICAgaW50IHJvd1NwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxs
OjpheFJvd1NwYW4oKTsKICAgICBpZiAocm93U3BhbiA9PSAtMSkgewogICAgICAgICBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiByYW5nZTsKICAgICAgICAgQWNjZXNzaWJpbGl0eVRhYmxl
Q2VsbDo6cm93SW5kZXhSYW5nZShyYW5nZSk7CkBAIC0xNTEsMTIgKzE1MSwxMiBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlBUklBR3JpZENlbGw6OmNvbHVtbkluCiAgICAgICAgICAgICBjb2x1bW5SYW5n
ZS5maXJzdCA9IGluZGV4V2l0aFNwYW47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBpbmRleFdpdGhTcGFuICs9IGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjaGls
ZCkgPyBzdGQ6Om1heChkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpLmFy
aWFDb2x1bW5TcGFuKCksIDEpIDogMTsKKyAgICAgICAgaW5kZXhXaXRoU3BhbiArPSBpczxBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsPigqY2hpbGQpID8gc3RkOjptYXgoZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlQ2VsbD4oKmNoaWxkKS5heENvbHVtblNwYW4oKSwgMSkgOiAxOwogICAgIH0KICAg
ICAKICAgICAvLyBBUklBIDEuMSwgYXJpYS1jb2xzcGFuIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBm
b3IgY2VsbHMgYW5kIGdyaWRjZWxscyB3aGljaCBhcmUgbm90IGNvbnRhaW5lZCBpbiBhIG5hdGl2
ZSB0YWJsZS4KICAgICAvLyBTbyB3ZSBzaG91bGQgY2hlY2sgZm9yIHRoYXQgYXR0cmlidXRlIGhl
cmUuCi0gICAgaW50IGNvbHVtblNwYW4gPSBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhQ29s
dW1uU3BhbigpOworICAgIGludCBjb2x1bW5TcGFuID0gQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6
YXhDb2x1bW5TcGFuKCk7CiAgICAgaWYgKGNvbHVtblNwYW4gPT0gLTEpIHsKICAgICAgICAgc3Rk
OjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gcmFuZ2U7CiAgICAgICAgIEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw6OmNvbHVtbkluZGV4UmFuZ2UocmFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QVJJQUdyaWRDZWxsLmgJ
KHJldmlzaW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUFSSUFHcmlkQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHBy
aXZhdGU6CiAKICAgICBBY2Nlc3NpYmlsaXR5VGFibGUqIHBhcmVudFRhYmxlKCkgY29uc3Qgb3Zl
cnJpZGU7CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50Um93R3JvdXAoKSBjb25zdDsK
LSAgICB1bnNpZ25lZCBhcmlhUm93U3BhbldpdGhSb3dJbmRleCh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CisgICAgdW5zaWduZWQgYXhSb3dTcGFuV2l0aFJvd0luZGV4KHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKICAgICBTdHJpbmcgcmVhZE9ubHlWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOwogfTsgCiAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyNSw3ICs2MjUsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojpp
c0VuYWJsZWQoCiB7CiAgICAgLy8gQVJJQSBzYXlzIHRoYXQgdGhlIGRpc2FibGVkIHN0YXR1cyBh
cHBsaWVzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQgYW5kIGFsbCBkZXNjZW5kYW50IGVsZW1lbnRz
LgogICAgIGZvciAoQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0ID0gY29uc3RfY2FzdDxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdCo+KHRoaXMpOyBvYmplY3Q7IG9iamVjdCA9IG9iamVjdC0+cGFy
ZW50T2JqZWN0KCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gZGlzYWJsZWQg
PSBvYmplY3QtPmJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEaXNhYmxlZCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gZGlzYWJsZWQgPSBvYmplY3QtPmJvb2xWYWx1ZUZvclByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpEaXNhYmxlZCkpIHsKICAgICAgICAgICAgIGlmIChkaXNhYmxl
ZC52YWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNzA0LDggKzcwNCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Omlz
SG92ZXJlZCgKIAogYm9vbCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbGVjdGFi
bGUoKSBjb25zdAogewotICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gbXVsdGlTZWxlY3RhYmxlID0g
Ym9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSk7Ci0g
ICAgaWYgKG11bHRpU2VsZWN0YWJsZSkKKyAgICBpZiAoYXV0byBtdWx0aVNlbGVjdGFibGUgPSBi
b29sVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TXVsdGlzZWxlY3RhYmxlKSkKICAg
ICAgICAgcmV0dXJuIG11bHRpU2VsZWN0YWJsZS52YWx1ZSgpOwogICAgIAogICAgIHJldHVybiBu
b2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykgJiYgZG93bmNhc3Q8SFRNTFNl
bGVjdEVsZW1lbnQ+KCpub2RlKCkpLm11bHRpcGxlKCk7CkBAIC03MTQsOCArNzEzLDcgQEAgYm9v
bCBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdDo6aXNNdWx0aVNlbAogYm9vbCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aXNSZXF1aXJlZCgpIGNvbnN0CiB7CiAgICAgLy8gRXhwbGljaXQgYXJpYS1y
ZXF1aXJlZCB2YWx1ZXMgc2hvdWxkIHRydW1wIG5hdGl2ZSByZXF1aXJlZCBhdHRyaWJ1dGVzLgot
ICAgIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gYXhSZXF1aXJlZCA9IGJvb2xWYWx1ZUZvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpSZXF1aXJlZCk7Ci0gICAgaWYgKGF4UmVxdWlyZWQpCisgICAgaWYg
KGF1dG8gYXhSZXF1aXJlZCA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpS
ZXF1aXJlZCkpCiAgICAgICAgIHJldHVybiBheFJlcXVpcmVkLnZhbHVlKCk7CiAKICAgICBOb2Rl
KiBuID0gdGhpcy0+bm9kZSgpOwpAQCAtNzYyLDkgKzc2MCw5IEBAIGludCBBY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdDo6aGVhZGluZ0xldmUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KGlzSGVhZGluZygpKSB7Ci0gICAgICAgIGludCBhcmlhTGV2ZWwgPSBnZXRBdHRyaWJ1dGUoYXJp
YV9sZXZlbEF0dHIpLnRvSW50KCk7Ci0gICAgICAgIGlmIChhcmlhTGV2ZWwgPiAwKQotICAgICAg
ICAgICAgcmV0dXJuIGFyaWFMZXZlbDsKKyAgICAgICAgaW50IGxldmVsID0gdW5zaWduZWRWYWx1
ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMZXZlbCk7CisgICAgICAgIGlmIChsZXZlbCA+
IDApCisgICAgICAgICAgICByZXR1cm4gbGV2ZWw7CiAgICAgfQogCiAgICAgaWYgKG5vZGUtPmhh
c1RhZ05hbWUoaDFUYWcpKQpAQCAtODE0LDkgKzgxMiw4IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0Ojp2YWx1ZUZvclIKIAogICAgIC8vIEluIEFSSUEgMS4xLCB0aGUgaW1wbGljaXQg
dmFsdWUgZm9yIGFyaWEtdmFsdWVub3cgb24gYSBzcGluIGJ1dHRvbiBpcyAwLgogICAgIC8vIEZv
ciBvdGhlciByb2xlcywgaXQgaXMgaGFsZiB3YXkgYmV0d2VlbiBhcmlhLXZhbHVlbWluIGFuZCBh
cmlhLXZhbHVlbWF4LgotICAgIGF1dG8mIHZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfdmFsdWVu
b3dBdHRyKTsKLSAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHZhbHVl
LnRvRmxvYXQoKTsKKyAgICBpZiAoaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTm93
KSkKKyAgICAgICAgcmV0dXJuIGRvdWJsZVZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OlZhbHVlTm93KTsKIAogICAgIHJldHVybiBpc1NwaW5CdXR0b24oKSA/IDAgOiAobWluVmFsdWVG
b3JSYW5nZSgpICsgbWF4VmFsdWVGb3JSYW5nZSgpKSAvIDI7CiB9CkBAIC04MzIsOSArODI5LDgg
QEAgZmxvYXQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6Om1heFZhbHVlRgogICAgIGlmICghaXNS
YW5nZUNvbnRyb2woKSkKICAgICAgICAgcmV0dXJuIDAuMGY7CiAKLSAgICBhdXRvJiB2YWx1ZSA9
IGdldEF0dHJpYnV0ZShhcmlhX3ZhbHVlbWF4QXR0cik7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZS50b0Zsb2F0KCk7CisgICAgaWYgKGhhc1Byb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCkpCisgICAgICAgIHJldHVybiBkb3VibGVWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCk7CiAKICAgICAvLyBJbiBBUklBIDEu
MSwgdGhlIGltcGxpY2l0IHZhbHVlIGZvciBhcmlhLXZhbHVlbWF4IG9uIGEgc3BpbiBidXR0b24K
ICAgICAvLyBpcyB0aGF0IHRoZXJlIGlzIG5vIG1heGltdW0gdmFsdWUuIEZvciBvdGhlciByb2xl
cywgaXQgaXMgMTAwLgpAQCAtODUyLDkgKzg0OCw4IEBAIGZsb2F0IEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjptaW5WYWx1ZUYKICAgICBpZiAoIWlzUmFuZ2VDb250cm9sKCkpCiAgICAgICAgIHJl
dHVybiAwLjBmOwogCi0gICAgYXV0byYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV92YWx1ZW1p
bkF0dHIpOwotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdmFsdWUu
dG9GbG9hdCgpOworICAgIGlmIChoYXNQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6VmFsdWVNaW4p
KQorICAgICAgICByZXR1cm4gZG91YmxlVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6
VmFsdWVNaW4pOwogCiAgICAgLy8gSW4gQVJJQSAxLjEsIHRoZSBpbXBsaWNpdCB2YWx1ZSBmb3Ig
YXJpYS12YWx1ZW1pbiBvbiBhIHNwaW4gYnV0dG9uCiAgICAgLy8gaXMgdGhhdCB0aGVyZSBpcyBu
byBtaW5pbXVtIHZhbHVlLiBGb3Igb3RoZXIgcm9sZXMsIGl0IGlzIDAuCkBAIC0xNjIyLDEwICsx
NjE3LDggQEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcgogICAgIE5v
ZGUqIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgRWxlbWVudCYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KCpub2RlKTsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMZXZlbCA9IGVsZW1lbnQuYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihhcmlhX2xldmVsQXR0cik7Ci0gICAgaWYgKCFh
cmlhTGV2ZWwuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gYXJpYUxldmVsLnRvSW50KCk7Cisg
ICAgaWYgKGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpMZXZlbCkpCisgICAgICAgIHJldHVy
biB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxldmVsKTsKICAgICAK
ICAgICAvLyBPbmx5IHRyZWUgaXRlbSB3aWxsIGNhbGN1bGF0ZSBpdHMgbGV2ZWwgdGhyb3VnaCB0
aGUgRE9NIGN1cnJlbnRseS4KICAgICBpZiAocm9sZVZhbHVlKCkgIT0gQWNjZXNzaWJpbGl0eVJv
bGU6OlRyZWVJdGVtKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTY2LDYgKzIxNjYsMjcgQEAgc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OgogICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKK2ludCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjppbnRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5
KSBjb25zdAoreworICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQor
ICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZUludFZhbHVlRm9yRWxlbWVu
dCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojp1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5h
bWUgcHJvcGVydHlLZXkpIGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlz
LT5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5z
aWduZWRWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRvdWJsZVZhbHVlRm9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlLZXkpIGNvbnN0Cit7CisgICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9k
ZTo6ZWZmZWN0aXZlRG91YmxlVmFsdWVGb3JFbGVtZW50KCplbGVtZW50LCBwcm9wZXJ0eUtleSk7
CisgICAgcmV0dXJuIDAuMDsKK30KKwogLy8gTGFja2luZyBjb25jcmV0ZSBldmlkZW5jZSBvZiBv
cmllbnRhdGlvbiwgaG9yaXpvbnRhbCBtZWFucyB3aWR0aCA+IGhlaWdodC4gdmVydGljYWwgaXMg
aGVpZ2h0ID4gd2lkdGg7CiBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb24gQWNjZXNzaWJpbGl0eU9i
amVjdDo6b3JpZW50YXRpb24oKSBjb25zdAogewpAQCAtMjY1MiwyNCArMjY3MywyNCBAQCBTdHJp
bmcgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzUG9wdXBWYWx1CiAgICAgcmV0dXJuICJmYWxzZSI7
CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklBU2V0U2l6ZSgpIGNv
bnN0Citib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OnN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShhcmlhX3NldHNpemVBdHRyKTsKKyAgICByZXR1cm4g
aGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlNldFNpemUpOwogfQogCi1ib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OnN1cHBvcnRzQVJJQVBvc0luU2V0KCkgY29uc3QKK2Jvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6c3VwcG9ydHNQb3NJblNldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0
dHJpYnV0ZShhcmlhX3Bvc2luc2V0QXR0cik7CisgICAgcmV0dXJuIGhhc1Byb3BlcnR5KEFYUHJv
cGVydHlOYW1lOjpQb3NJblNldCk7CiB9CiAgICAgCi1pbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6
YXJpYVNldFNpemUoKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNldFNpemUoKSBj
b25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXJpYV9zZXRzaXplQXR0cikudG9JbnQo
KTsKKyAgICByZXR1cm4gaW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6U2V0U2l6
ZSk7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhUG9zSW5TZXQoKSBjb25zdAor
aW50IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnBvc0luU2V0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKGFyaWFfcG9zaW5zZXRBdHRyKS50b0ludCgpOworICAgIHJldHVybiB1bnNp
Z25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlBvc0luU2V0KTsKIH0KICAgICAK
IGNvbnN0IEF0b21pY1N0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdDo6aWRlbnRpZmllckF0dHJp
YnV0ZSgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTcwOCwxMCArNzA4LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzTW9kYWxEZXNjZW5kYW50KE5v
ZGUqKSBjb25zdDsKICAgICBib29sIGlzTW9kYWxOb2RlKCkgY29uc3Q7CiAgICAgCi0gICAgYm9v
bCBzdXBwb3J0c0FSSUFTZXRTaXplKCkgY29uc3Q7Ci0gICAgYm9vbCBzdXBwb3J0c0FSSUFQb3NJ
blNldCgpIGNvbnN0OwotICAgIGludCBhcmlhU2V0U2l6ZSgpIGNvbnN0OwotICAgIGludCBhcmlh
UG9zSW5TZXQoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzU2V0U2l6ZSgpIGNvbnN0OworICAg
IGJvb2wgc3VwcG9ydHNQb3NJblNldCgpIGNvbnN0OworICAgIGludCBzZXRTaXplKCkgY29uc3Q7
CisgICAgaW50IHBvc0luU2V0KCkgY29uc3Q7CiAgICAgCiAgICAgLy8gQVJJQSBkcmFnIGFuZCBk
cm9wCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQVJJQURyb3BwaW5nKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KQEAgLTg5Niw2ICs4OTYsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgY29uc3QgU3RyaW5nIHN0cmluZ1ZhbHVl
Rm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIHN0ZDo6b3B0aW9uYWw8Ym9v
bD4gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGludCBp
bnRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICB1bnNpZ25lZCB1
bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lKSBjb25zdDsKIAogICAgIHZp
cnR1YWwgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdmlzaWJsZVBvc2l0aW9uUmFuZ2UoKSBjb25zdCB7
IHJldHVybiBWaXNpYmxlUG9zaXRpb25SYW5nZSgpOyB9CiAgICAgdmlydHVhbCBWaXNpYmxlUG9z
aXRpb25SYW5nZSB2aXNpYmxlUG9zaXRpb25SYW5nZUZvckxpbmUodW5zaWduZWQpIGNvbnN0IHsg
cmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MCw3ICsxMTQw
LDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaQogCiAgICAgaWYg
KG1fcmVuZGVyZXItPnN0eWxlKCkudmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpIHsKICAgICAgICAg
Ly8gYXJpYS1oaWRkZW4gaXMgbWVhbnQgdG8gb3ZlcnJpZGUgdmlzaWJpbGl0eSBhcyB0aGUgZGV0
ZXJtaW5hbnQgaW4gQVggaGllcmFyY2h5IGluY2x1c2lvbi4KLSAgICAgICAgaWYgKHN0ZDo6b3B0
aW9uYWw8Ym9vbD4gaGlkZGVuID0gYm9vbFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkhpZGRlbikpIHsKKyAgICAgICAgaWYgKGF1dG8gaGlkZGVuID0gYm9vbFZhbHVlRm9yUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbikpIHsKICAgICAgICAgICAgIGlmICghaGlkZGVuLnZh
bHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNp
b246OkRlZmF1bHRCZWhhdmlvcjsKICAgICAgICAgfQpAQCAtMzI3OSw3ICszMjc5LDcgQEAgY29u
c3QgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OgogCiBib29sIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OmxpdmVSZWdpb25BdG9taWMoKSBjb25zdAogewotICAgIGlmIChzdGQ6
Om9wdGlvbmFsPGJvb2w+IGF0b21pYyA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lOjpBdG9taWMpKQorICAgIGlmIChhdXRvIGF0b21pYyA9IGJvb2xWYWx1ZUZvclByb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpBdG9taWMpKQogICAgICAgICByZXR1cm4gYXRvbWljLnZhbHVlKCk7
CiAKICAgICAvLyBXQUktQVJJQSAiYWxlcnQiIGFuZCAic3RhdHVzIiByb2xlcyBoYXZlIGFuIGlt
cGxpY2l0IGFyaWEtYXRvbWljIHZhbHVlIG9mIHRydWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGUuY3BwCShyZXZpc2lvbiAy
MjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5VGFibGVDb2x1bW4uaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJD
b250YWluZXIuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cuaCIKKyNpbmNsdWRl
ICJBY2Nlc3NpYmxlTm9kZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVyYXRvci5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUNhcHRpb25FbGVtZW50LmgiCkBA
IC0xNTMsMTIgKzE1NCwxMiBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZTo6aXNEYXRhVGFibGUo
KSBjCiAgICAgCiAgICAgLy8gSWYgdGhlIGF1dGhvciBoYXMgdXNlZCBBUklBIHRvIHNwZWNpZnkg
YSB2YWxpZCBjb2x1bW4gb3Igcm93IGNvdW50LCBhc3N1bWUgdGhleQogICAgIC8vIHdhbnQgdXMg
dG8gdHJlYXQgdGhlIHRhYmxlIGFzIGEgZGF0YSB0YWJsZS4KLSAgICBpbnQgYXJpYUNvbHVtbkNv
dW50ID0gZ2V0QXR0cmlidXRlKGFyaWFfY29sY291bnRBdHRyKS50b0ludCgpOwotICAgIGlmIChh
cmlhQ29sdW1uQ291bnQgPT0gLTEgfHwgYXJpYUNvbHVtbkNvdW50ID4gMCkKKyAgICBpbnQgYXhD
b2x1bW5Db3VudCA9IGludFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbENvdW50
KTsKKyAgICBpZiAoYXhDb2x1bW5Db3VudCA9PSAtMSB8fCBheENvbHVtbkNvdW50ID4gMCkKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpbnQgYXJpYVJvd0NvdW50ID0gZ2V0QXR0cmlidXRl
KGFyaWFfcm93Y291bnRBdHRyKS50b0ludCgpOwotICAgIGlmIChhcmlhUm93Q291bnQgPT0gLTEg
fHwgYXJpYVJvd0NvdW50ID4gMCkKKyAgICBpbnQgYXhSb3dDb3VudCA9IGludFZhbHVlRm9yUHJv
cGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKKyAgICBpZiAoYXhSb3dDb3VudCA9PSAt
MSB8fCBheFJvd0NvdW50ID4gMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBSZW5kZXJU
YWJsZSYgdGFibGUgPSBkb3duY2FzdDxSZW5kZXJUYWJsZT4oKm1fcmVuZGVyZXIpOwpAQCAtMjM0
LDI5ICsyMzUsMjkgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VGFibGU6OmlzRGF0YVRhYmxlKCkgYwog
CiAgICAgICAgICAgICAvLyBJZiB0aGUgYXV0aG9yIGhhcyB1c2VkIEFSSUEgdG8gc3BlY2lmeSBh
IHZhbGlkIGNvbHVtbiBvciByb3cgaW5kZXgsIGFzc3VtZSB0aGV5IHdhbnQgdXMKICAgICAgICAg
ICAgIC8vIHRvIHRyZWF0IHRoZSB0YWJsZSBhcyBhIGRhdGEgdGFibGUuCi0gICAgICAgICAgICBp
bnQgYXJpYUNvbHVtbkluZGV4ID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJv
bml6YXRpb24oYXJpYV9jb2xpbmRleEF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJp
YUNvbHVtbkluZGV4ID49IDEpCisgICAgICAgICAgICBpbnQgYXhDb2x1bW5JbmRleCA9IEFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCk7CisgICAgICAgICAgICBpZiAoYXhDb2x1bW5JbmRl
eCA+PSAxKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAgICBpbnQg
YXJpYVJvd0luZGV4ID0gY2VsbEVsZW1lbnQtPmF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oYXJpYV9yb3dpbmRleEF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYVJvd0lu
ZGV4ID49IDEpCisgICAgICAgICAgICBpbnQgYXhSb3dJbmRleCA9IEFjY2Vzc2libGVOb2RlOjpl
ZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbEVsZW1lbnQsIEFYUHJvcGVydHlO
YW1lOjpSb3dJbmRleCk7CisgICAgICAgICAgICBpZiAoYXhSb3dJbmRleCA+PSAxKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgICAgICBpZiAoYXV0byBjZWxsUGFyZW50
RWxlbWVudCA9IGNlbGxFbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBhcmlhUm93SW5kZXggPSBjZWxsUGFyZW50RWxlbWVudC0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihhcmlhX3Jvd2luZGV4QXR0cikudG9JbnQoKTsKLSAgICAgICAgICAgICAgICBp
ZiAoYXJpYVJvd0luZGV4ID49IDEpCisgICAgICAgICAgICAgICAgYXhSb3dJbmRleCA9IEFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVVbnNpZ25lZFZhbHVlRm9yRWxlbWVudCgqY2VsbFBhcmVudEVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKGF4
Um93SW5kZXggPj0gMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIC8vIElmIHRoZSBhdXRob3IgaGFzIHVzZWQgQVJJQSB0byBz
cGVjaWZ5IGEgY29sdW1uIG9yIHJvdyBzcGFuLCB3ZSdyZSBzdXBwb3NlZCB0byBpZ25vcmUKICAg
ICAgICAgICAgIC8vIHRoZSB2YWx1ZSBmb3IgdGhlIHB1cnBvc2VzIG9mIGV4cG9zaW5nIHRoZSBz
cGFuLiBCdXQgYXNzdW1lIHRoZXkgd2FudCB1cyB0byB0cmVhdCB0aGUKICAgICAgICAgICAgIC8v
IHRhYmxlIGFzIGEgZGF0YSB0YWJsZS4KLSAgICAgICAgICAgIGludCBhcmlhQ29sdW1uU3BhbiA9
IGNlbGxFbGVtZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfY29sc3Bh
bkF0dHIpLnRvSW50KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYUNvbHVtblNwYW4gPj0gMSkKKyAg
ICAgICAgICAgIGludCBheENvbHVtblNwYW4gPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5z
aWduZWRWYWx1ZUZvckVsZW1lbnQoKmNlbGxFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sU3Bh
bik7CisgICAgICAgICAgICBpZiAoYXhDb2x1bW5TcGFuID49IDEpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICAgICAgICAgIGludCBhcmlhUm93U3BhbiA9IGNlbGxFbGVtZW50
LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFfcm93c3BhbkF0dHIpLnRvSW50
KCk7Ci0gICAgICAgICAgICBpZiAoYXJpYVJvd1NwYW4gPj0gMSkKKyAgICAgICAgICAgIGludCBh
eFJvd1NwYW4gPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1l
bnQoKmNlbGxFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Um93U3Bhbik7CisgICAgICAgICAgICBp
ZiAoYXhSb3dTcGFuID49IDEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiByZW5kZXJTdHlsZSA9IGNlbGwtPnN0eWxlKCk7CkBA
IC02OTgsMTEgKzY5OSw5IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5VGFibGU6OnRpdGxlKCkgY29u
c3QKICAgICByZXR1cm4gdGl0bGU7CiB9CiAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFD
b2x1bW5Db3VudCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlOjpheENvbHVtbkNvdW50
KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbENvdW50VmFsdWUgPSBnZXRB
dHRyaWJ1dGUoYXJpYV9jb2xjb3VudEF0dHIpOwotICAgIAotICAgIGludCBjb2xDb3VudEludCA9
IGNvbENvdW50VmFsdWUudG9JbnQoKTsKKyAgICBpbnQgY29sQ291bnRJbnQgPSBpbnRWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCk7CiAgICAgLy8gVGhlIEFSSUEgc3Bl
YyBzdGF0ZXMsICJBdXRob3JzIG11c3Qgc2V0IHRoZSB2YWx1ZSBvZiBhcmlhLWNvbGNvdW50IHRv
IGFuIGludGVnZXIgZXF1YWwgdG8gdGhlCiAgICAgLy8gbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhl
IGZ1bGwgdGFibGUuIElmIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBpcyB1bmtub3duLCBh
dXRob3JzIG11c3QKICAgICAvLyBzZXQgdGhlIHZhbHVlIG9mIGFyaWEtY29sY291bnQgdG8gLTEg
dG8gaW5kaWNhdGUgdGhhdCB0aGUgdmFsdWUgc2hvdWxkIG5vdCBiZSBjYWxjdWxhdGVkIGJ5CkBA
IC03MTMsMTEgKzcxMiw5IEBAIGludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmFyaWFDb2x1bW5Db3Vu
dCgKICAgICByZXR1cm4gMDsKIH0KIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZTo6YXJpYVJvd0Nv
dW50KCkgY29uc3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGU6OmF4Um93Q291bnQoKSBjb25zdAog
ewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcm93Q291bnRWYWx1ZSA9IGdldEF0dHJpYnV0ZShh
cmlhX3Jvd2NvdW50QXR0cik7Ci0gICAgCi0gICAgaW50IHJvd0NvdW50SW50ID0gcm93Q291bnRW
YWx1ZS50b0ludCgpOworICAgIGludCByb3dDb3VudEludCA9IGludFZhbHVlRm9yUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50KTsKICAgICAvLyBUaGUgQVJJQSBzcGVjIHN0YXRlcywg
IkF1dGhvcnMgbXVzdCBzZXQgdGhlIHZhbHVlIG9mIGFyaWEtcm93Y291bnQgdG8gYW4gaW50ZWdl
ciBlcXVhbCB0byB0aGUKICAgICAvLyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgZnVsbCB0YWJsZS4g
SWYgdGhlIHRvdGFsIG51bWJlciBvZiByb3dzIGlzIHVua25vd24sIGF1dGhvcnMgbXVzdCBzZXQK
ICAgICAvLyB0aGUgdmFsdWUgb2YgYXJpYS1yb3djb3VudCB0byAtMSB0byBpbmRpY2F0ZSB0aGF0
IHRoZSB2YWx1ZSBzaG91bGQgbm90IGJlIGNhbGN1bGF0ZWQgYnkgdGhlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlLmgJKHJldmlz
aW9uIDIyNDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDggKzc0LDggQEAgcHVibGljOgogICAgIC8v
IGlzRXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBpcyB3aGV0aGVyIGl0IGlzIGV4cG9z
ZWQgYXMgYW4gQWNjZXNzaWJpbGl0eVRhYmxlIHRvIHRoZSBwbGF0Zm9ybS4KICAgICBib29sIGlz
RXhwb3NhYmxlVGhyb3VnaEFjY2Vzc2liaWxpdHkoKSBjb25zdDsKICAgICAKLSAgICBpbnQgYXJp
YUNvbHVtbkNvdW50KCkgY29uc3Q7Ci0gICAgaW50IGFyaWFSb3dDb3VudCgpIGNvbnN0OworICAg
IGludCBheENvbHVtbkNvdW50KCkgY29uc3Q7CisgICAgaW50IGF4Um93Q291bnQoKSBjb25zdDsK
IAogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlUYWJsZShSZW5kZXJPYmpl
Y3QqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVDZWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVS
b3cuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmxlTm9kZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CkBAIC00NCw3ICs0NSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIEFjY2Vzc2li
aWxpdHlUYWJsZUNlbGw6OkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKICAgICA6IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QocmVuZGVyZXIpCi0gICAgLCBt
X2FyaWFDb2xJbmRleEZyb21Sb3coLTEpCisgICAgLCBtX2F4Q29sSW5kZXhGcm9tUm93KC0xKQog
ewogfQogCkBAIC0zMjAsNyArMzIxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpy
b3dJbmRleFJhbgogICAgIC8vIEFSSUEgMS4xJ3MgYXJpYS1yb3dzcGFuIGF0dHJpYnV0ZSBpcyBp
bnRlbmRlZCBmb3IgY2VsbHMgYW5kIGdyaWRjZWxscyB3aGljaCBhcmUgbm90IGNvbnRhaW5lZAog
ICAgIC8vIGluIGEgbmF0aXZlIHRhYmxlLiBCdXQgaWYgd2UgaGF2ZSBhIHZhbGlkIGF1dGhvci1w
cm92aWRlZCB2YWx1ZSBhbmQgZG8gbm90IGhhdmUgYW4gZXhwbGljaXQKICAgICAvLyBuYXRpdmUg
aG9zdCBsYW5ndWFnZSB2YWx1ZSBmb3IgdGhlIHJvd3NwYW4sIGV4cG9zZSB0aGUgQVJJQSB2YWx1
ZS4KLSAgICByb3dSYW5nZS5zZWNvbmQgPSBhcmlhUm93U3BhbigpOworICAgIHJvd1JhbmdlLnNl
Y29uZCA9IGF4Um93U3BhbigpOwogICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHJvd1JhbmdlLnNl
Y29uZCkgPT0gLTEpCiAgICAgICAgIHJvd1JhbmdlLnNlY29uZCA9IHJlbmRlckNlbGwucm93U3Bh
bigpOwogICAgIApAQCAtMzM5LDcgKzM0MCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bDo6Y29sdW1uSW5kZXgKICAgICAvLyBBUklBIDEuMSdzIGFyaWEtY29sc3BhbiBhdHRyaWJ1dGUg
aXMgaW50ZW5kZWQgZm9yIGNlbGxzIGFuZCBncmlkY2VsbHMgd2hpY2ggYXJlIG5vdCBjb250YWlu
ZWQKICAgICAvLyBpbiBhIG5hdGl2ZSB0YWJsZS4gQnV0IGlmIHdlIGhhdmUgYSB2YWxpZCBhdXRo
b3ItcHJvdmlkZWQgdmFsdWUgYW5kIGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0CiAgICAgLy8gbmF0
aXZlIGhvc3QgbGFuZ3VhZ2UgdmFsdWUgZm9yIHRoZSBjb2xzcGFuLCBleHBvc2UgdGhlIEFSSUEg
dmFsdWUuCi0gICAgY29sdW1uUmFuZ2Uuc2Vjb25kID0gYXJpYUNvbHVtblNwYW4oKTsKKyAgICBj
b2x1bW5SYW5nZS5zZWNvbmQgPSBheENvbHVtblNwYW4oKTsKICAgICBpZiAoc3RhdGljX2Nhc3Q8
aW50Pihjb2x1bW5SYW5nZS5zZWNvbmQpICE9IC0xKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4
Myw2NiArMzg0LDY2IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlUYWJsZUMK
ICAgICByZXR1cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShoZWFkZXJDZWxsKTsKIH0K
ICAgICAKLWludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjphcmlhQ29sdW1uSW5kZXgoKSBjb25z
dAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmF4Q29sdW1uSW5kZXgoKSBjb25zdAogewot
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29sSW5kZXhWYWx1ZSA9IGdldEF0dHJpYnV0ZShhcmlh
X2NvbGluZGV4QXR0cik7Ci0gICAgaWYgKGNvbEluZGV4VmFsdWUudG9JbnQoKSA+PSAxKQotICAg
ICAgICByZXR1cm4gY29sSW5kZXhWYWx1ZS50b0ludCgpOworICAgIHVuc2lnbmVkIGNvbEluZGV4
VmFsdWUgPSB1bnNpZ25lZFZhbHVlRm9yUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkNvbEluZGV4
KTsKKyAgICBpZiAoY29sSW5kZXhWYWx1ZSA+PSAxKQorICAgICAgICByZXR1cm4gY29sSW5kZXhW
YWx1ZTsKICAgICAKICAgICAvLyAiQVJJQSAxLjE6IElmIHRoZSBzZXQgb2YgY29sdW1ucyB3aGlj
aCBpcyBwcmVzZW50IGluIHRoZSBET00gaXMgY29udGlndW91cywgYW5kIGlmIHRoZXJlIGFyZSBu
byBjZWxscyB3aGljaCBzcGFuIG1vcmUgdGhhbiBvbmUgcm93CiAgICAgLy8gb3IgY29sdW1uIGlu
IHRoYXQgc2V0LCB0aGVuIGF1dGhvcnMgbWF5IHBsYWNlIGFyaWEtY29saW5kZXggb24gZWFjaCBy
b3csIHNldHRpbmcgdGhlIHZhbHVlIHRvIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY29sdW1uIG9m
IHRoZSBzZXQuIgogICAgIC8vIEhlcmUsIHdlIGxldCBpdHMgcGFyZW50IHJvdyB0byBzZXQgaXRz
IGluZGV4IGJlZm9yZWhhbmQsIHNvIHdlIGRvbid0IGhhdmUgdG8gZ28gdGhyb3VnaCB0aGUgc2li
bGluZ3MgdG8gY2FsY3VsYXRlIHRoZSBpbmRleC4KICAgICBBY2Nlc3NpYmlsaXR5VGFibGVSb3cq
IHBhcmVudFJvdyA9IHRoaXMtPnBhcmVudFJvdygpOwotICAgIGlmIChwYXJlbnRSb3cgJiYgbV9h
cmlhQ29sSW5kZXhGcm9tUm93ICE9IC0xKQotICAgICAgICByZXR1cm4gbV9hcmlhQ29sSW5kZXhG
cm9tUm93OworICAgIGlmIChwYXJlbnRSb3cgJiYgbV9heENvbEluZGV4RnJvbVJvdyAhPSAtMSkK
KyAgICAgICAgcmV0dXJuIG1fYXhDb2xJbmRleEZyb21Sb3c7CiAgICAgCiAgICAgcmV0dXJuIC0x
OwogfQogICAgIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFSb3dJbmRleCgpIGNv
bnN0CitpbnQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbDo6YXhSb3dJbmRleCgpIGNvbnN0CiB7CiAg
ICAgLy8gQVJJQSAxLjE6IEF1dGhvcnMgc2hvdWxkIHBsYWNlIGFyaWEtcm93aW5kZXggb24gZWFj
aCByb3cuIEF1dGhvcnMgbWF5IGFsc28gcGxhY2UKICAgICAvLyBhcmlhLXJvd2luZGV4IG9uIGFs
bCBvZiB0aGUgY2hpbGRyZW4gb3Igb3duZWQgZWxlbWVudHMgb2YgZWFjaCByb3cuCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiByb3dJbmRleFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93aW5k
ZXhBdHRyKTsKLSAgICBpZiAocm93SW5kZXhWYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJl
dHVybiByb3dJbmRleFZhbHVlLnRvSW50KCk7CisgICAgdW5zaWduZWQgcm93SW5kZXhWYWx1ZSA9
IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93SW5kZXgpOworICAg
IGlmIChyb3dJbmRleFZhbHVlID49IDEpCisgICAgICAgIHJldHVybiByb3dJbmRleFZhbHVlOwog
ICAgIAogICAgIGlmIChBY2Nlc3NpYmlsaXR5VGFibGVSb3cqIHBhcmVudFJvdyA9IHRoaXMtPnBh
cmVudFJvdygpKQotICAgICAgICByZXR1cm4gcGFyZW50Um93LT5hcmlhUm93SW5kZXgoKTsKKyAg
ICAgICAgcmV0dXJuIHBhcmVudFJvdy0+YXhSb3dJbmRleCgpOwogICAgIAogICAgIHJldHVybiAt
MTsKIH0KIAotaW50IEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw6OmFyaWFDb2x1bW5TcGFuKCkgY29u
c3QKK2ludCBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsOjpheENvbHVtblNwYW4oKSBjb25zdAogewog
ICAgIC8vIEFjY29yZGluZyB0byB0aGUgQVJJQSBzcGVjLCAiSWYgYXJpYS1jb2xwYW4gaXMgdXNl
ZCBvbiBhbiBlbGVtZW50IGZvciB3aGljaCB0aGUgaG9zdCBsYW5ndWFnZQogICAgIC8vIHByb3Zp
ZGVzIGFuIGVxdWl2YWxlbnQgYXR0cmlidXRlLCB1c2VyIGFnZW50cyBtdXN0IGlnbm9yZSB0aGUg
dmFsdWUgb2YgYXJpYS1jb2xzcGFuLiIKICAgICBpZiAoaGFzQXR0cmlidXRlKGNvbHNwYW5BdHRy
KSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2xTcGFu
VmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xzcGFuQXR0cik7CisgICAgdW5zaWduZWQgY29s
U3BhblZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xT
cGFuKTsKICAgICAvLyBBUklBIDEuMTogQXV0aG9ycyBtdXN0IHNldCB0aGUgdmFsdWUgb2YgYXJp
YS1jb2xzcGFuIHRvIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEuCi0gICAg
aWYgKGNvbFNwYW5WYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAgIHJldHVybiBjb2xTcGFuVmFs
dWUudG9JbnQoKTsKKyAgICBpZiAoY29sU3BhblZhbHVlID49IDEpCisgICAgICAgIHJldHVybiBj
b2xTcGFuVmFsdWU7CiAgICAgCiAgICAgcmV0dXJuIC0xOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0
eVRhYmxlQ2VsbDo6YXJpYVJvd1NwYW4oKSBjb25zdAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZUNl
bGw6OmF4Um93U3BhbigpIGNvbnN0CiB7CiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBBUklBIHNw
ZWMsICJJZiBhcmlhLXJvd3NwYW4gaXMgdXNlZCBvbiBhbiBlbGVtZW50IGZvciB3aGljaCB0aGUg
aG9zdCBsYW5ndWFnZQogICAgIC8vIHByb3ZpZGVzIGFuIGVxdWl2YWxlbnQgYXR0cmlidXRlLCB1
c2VyIGFnZW50cyBtdXN0IGlnbm9yZSB0aGUgdmFsdWUgb2YgYXJpYS1yb3dzcGFuLiIKICAgICBp
ZiAoaGFzQXR0cmlidXRlKHJvd3NwYW5BdHRyKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiByb3dTcGFuVmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9yb3dz
cGFuQXR0cik7CisgICAgdW5zaWduZWQgcm93U3BhblZhbHVlID0gdW5zaWduZWRWYWx1ZUZvclBy
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuKTsKICAgICAKICAgICAvLyBBUklBIDEuMTog
QXV0aG9ycyBtdXN0IHNldCB0aGUgdmFsdWUgb2YgYXJpYS1yb3dzcGFuIHRvIGFuIGludGVnZXIg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAuCiAgICAgLy8gU2V0dGluZyB0aGUgdmFsdWUgdG8g
MCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2VsbCBvciBncmlkY2VsbCBpcyB0byBzcGFuIGFsbCB0aGUg
cmVtYWluaW5nIHJvd3MgaW4gdGhlIHJvdyBncm91cC4KLSAgICBpZiAocm93U3BhblZhbHVlID09
ICIwIikKKyAgICBpZiAoaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlJvd1NwYW4pICYmICFy
b3dTcGFuVmFsdWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChyb3dTcGFuVmFsdWUudG9J
bnQoKSA+PSAxKQotICAgICAgICByZXR1cm4gcm93U3BhblZhbHVlLnRvSW50KCk7CisgICAgaWYg
KHJvd1NwYW5WYWx1ZSA+PSAxKQorICAgICAgICByZXR1cm4gcm93U3BhblZhbHVlOwogICAgIAog
ICAgIHJldHVybiAtMTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTEgKzUzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbHVtbkhl
YWRlcnMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJik7CiAgICAgdm9pZCByb3dIZWFkZXJz
KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYpOwogICAgIAotICAgIGludCBhcmlhQ29sdW1u
SW5kZXgoKSBjb25zdDsKLSAgICBpbnQgYXJpYVJvd0luZGV4KCkgY29uc3Q7Ci0gICAgaW50IGFy
aWFDb2x1bW5TcGFuKCkgY29uc3Q7Ci0gICAgaW50IGFyaWFSb3dTcGFuKCkgY29uc3Q7Ci0gICAg
dm9pZCBzZXRBUklBQ29sSW5kZXhGcm9tUm93KGludCBpbmRleCkgeyBtX2FyaWFDb2xJbmRleEZy
b21Sb3cgPSBpbmRleDsgfQorICAgIGludCBheENvbHVtbkluZGV4KCkgY29uc3Q7CisgICAgaW50
IGF4Um93SW5kZXgoKSBjb25zdDsKKyAgICBpbnQgYXhDb2x1bW5TcGFuKCkgY29uc3Q7CisgICAg
aW50IGF4Um93U3BhbigpIGNvbnN0OworICAgIHZvaWQgc2V0QVhDb2xJbmRleEZyb21Sb3coaW50
IGluZGV4KSB7IG1fYXhDb2xJbmRleEZyb21Sb3cgPSBpbmRleDsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbChSZW5kZXJPYmplY3QqKTsKQEAgLTY3
LDcgKzY3LDcgQEAgcHJvdGVjdGVkOgogICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFj
Y2Vzc2liaWxpdHlSb2xlKCkgZmluYWw7CiAKICAgICBpbnQgbV9yb3dJbmRleDsKLSAgICBpbnQg
bV9hcmlhQ29sSW5kZXhGcm9tUm93OworICAgIGludCBtX2F4Q29sSW5kZXhGcm9tUm93OwogCiBw
cml2YXRlOgogICAgIC8vIElmIGEgdGFibGUgY2VsbCBpcyBub3QgZXhwb3NlZCBhcyBhIHRhYmxl
IGNlbGwsIGEgVEggZWxlbWVudCBjYW4gc2VydmUgYXMgaXRzIHRpdGxlIFVJIGVsZW1lbnQuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVSb3cuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVRhYmxlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVRhYmxlQ2VsbC5oIgorI2lu
Y2x1ZGUgIkFjY2Vzc2libGVOb2RlLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAt
MTUzLDM0ICsxNTQsMzQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VGFibGVSb3c6OmFkZENoaWxkcmVu
KAogICAgIAogICAgIC8vICJBUklBIDEuMSwgSWYgdGhlIHNldCBvZiBjb2x1bW5zIHdoaWNoIGlz
IHByZXNlbnQgaW4gdGhlIERPTSBpcyBjb250aWd1b3VzLCBhbmQgaWYgdGhlcmUgYXJlIG5vIGNl
bGxzIHdoaWNoIHNwYW4gbW9yZSB0aGFuIG9uZSByb3cgb3IKICAgICAvLyBjb2x1bW4gaW4gdGhh
dCBzZXQsIHRoZW4gYXV0aG9ycyBtYXkgcGxhY2UgYXJpYS1jb2xpbmRleCBvbiBlYWNoIHJvdywg
c2V0dGluZyB0aGUgdmFsdWUgdG8gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb2x1bW4gb2YgdGhl
IHNldC4iCi0gICAgLy8gVXBkYXRlIGNoaWxkIGNlbGxzJyBhcmlhQ29sSW5kZXggaWYgdGhlcmUn
cyBhbiBhcmlhLWNvbGluZGV4IHZhbHVlIHNldCBmb3IgdGhlIHJvdy4gU28gdGhlIGNlbGwgZG9l
c24ndCBoYXZlIHRvIGdvIHRocm91Z2ggdGhlIHNpYmxpbmdzCisgICAgLy8gVXBkYXRlIGNoaWxk
IGNlbGxzJyBheENvbEluZGV4IGlmIHRoZXJlJ3MgYW4gYXJpYS1jb2xpbmRleCB2YWx1ZSBzZXQg
Zm9yIHRoZSByb3cuIFNvIHRoZSBjZWxsIGRvZXNuJ3QgaGF2ZSB0byBnbyB0aHJvdWdoIHRoZSBz
aWJsaW5ncwogICAgIC8vIHRvIGNhbGN1bGF0ZSB0aGUgaW5kZXguCi0gICAgaW50IGNvbEluZGV4
ID0gYXJpYUNvbHVtbkluZGV4KCk7CisgICAgaW50IGNvbEluZGV4ID0gYXhDb2x1bW5JbmRleCgp
OwogICAgIGlmIChjb2xJbmRleCA9PSAtMSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIHVu
c2lnbmVkIGluZGV4ID0gMDsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNlbGwgOiBjaGlsZHJlbigp
KSB7CiAgICAgICAgIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkpCi0gICAg
ICAgICAgICBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY2VsbCkuc2V0QVJJQUNv
bEluZGV4RnJvbVJvdyhjb2xJbmRleCArIGluZGV4KTsKKyAgICAgICAgICAgIGRvd25jYXN0PEFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpjZWxsKS5zZXRBWENvbEluZGV4RnJvbVJvdyhjb2xJbmRl
eCArIGluZGV4KTsKICAgICAgICAgaW5kZXgrKzsKICAgICB9CiB9CiAKLWludCBBY2Nlc3NpYmls
aXR5VGFibGVSb3c6OmFyaWFDb2x1bW5JbmRleCgpIGNvbnN0CitpbnQgQWNjZXNzaWJpbGl0eVRh
YmxlUm93OjpheENvbHVtbkluZGV4KCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNvbEluZGV4VmFsdWUgPSBnZXRBdHRyaWJ1dGUoYXJpYV9jb2xpbmRleEF0dHIpOwotICAgIGlm
IChjb2xJbmRleFZhbHVlLnRvSW50KCkgPj0gMSkKLSAgICAgICAgcmV0dXJuIGNvbEluZGV4VmFs
dWUudG9JbnQoKTsKKyAgICB1bnNpZ25lZCBjb2xJbmRleFZhbHVlID0gdW5zaWduZWRWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCk7CisgICAgaWYgKGNvbEluZGV4VmFs
dWUgPj0gMSkKKyAgICAgICAgcmV0dXJuIGNvbEluZGV4VmFsdWU7CiAgICAgCiAgICAgcmV0dXJu
IC0xOwogfQogCi1pbnQgQWNjZXNzaWJpbGl0eVRhYmxlUm93OjphcmlhUm93SW5kZXgoKSBjb25z
dAoraW50IEFjY2Vzc2liaWxpdHlUYWJsZVJvdzo6YXhSb3dJbmRleCgpIGNvbnN0CiB7Ci0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiByb3dJbmRleFZhbHVlID0gZ2V0QXR0cmlidXRlKGFyaWFfcm93
aW5kZXhBdHRyKTsKLSAgICBpZiAocm93SW5kZXhWYWx1ZS50b0ludCgpID49IDEpCi0gICAgICAg
IHJldHVybiByb3dJbmRleFZhbHVlLnRvSW50KCk7CisgICAgdW5zaWduZWQgcm93SW5kZXhWYWx1
ZSA9IHVuc2lnbmVkVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6Um93SW5kZXgpOwor
ICAgIGlmIChyb3dJbmRleFZhbHVlID49IDEpCisgICAgICAgIHJldHVybiByb3dJbmRleFZhbHVl
OwogICAgIAogICAgIHJldHVybiAtMTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cuaAkocmV2aXNpb24gMjI0OTk5
KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVSb3cu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBhZGRDaGlsZHJlbigpIG92ZXJyaWRlOwogICAgIAotICAgIGludCBhcmlhQ29sdW1uSW5kZXgo
KSBjb25zdDsKLSAgICBpbnQgYXJpYVJvd0luZGV4KCkgY29uc3Q7CisgICAgaW50IGF4Q29sdW1u
SW5kZXgoKSBjb25zdDsKKyAgICBpbnQgYXhSb3dJbmRleCgpIGNvbnN0OwogICAgIAogcHJvdGVj
dGVkOgogICAgIGV4cGxpY2l0IEFjY2Vzc2liaWxpdHlUYWJsZVJvdyhSZW5kZXJPYmplY3QqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUu
Y3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2libGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOSBAQCBzdGF0aWMg
QVJJQUF0dHJpYnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAgICAgICAgICAgICB7IEFYUHJvcGVy
dHlOYW1lOjpBdXRvY29tcGxldGUsIGFyaWFfYXV0b2NvbXBsZXRlQXR0ciB9LAogICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6QnVzeSwgYXJpYV9idXN5QXR0ciB9LAogICAgICAgICAgICAg
eyBBWFByb3BlcnR5TmFtZTo6Q2hlY2tlZCwgYXJpYV9jaGVja2VkQXR0ciB9LAorICAgICAgICAg
ICAgeyBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQsIGFyaWFfY29sY291bnRBdHRyIH0sCisgICAg
ICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDb2xJbmRleCwgYXJpYV9jb2xpbmRleEF0dHIgfSwK
KyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkNvbFNwYW4sIGFyaWFfY29sc3BhbkF0dHIg
fSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkN1cnJlbnQsIGFyaWFfY3VycmVudEF0
dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkRpc2FibGVkLCBhcmlhX2Rpc2Fi
bGVkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6RXhwYW5kZWQsIGFyaWFf
ZXhwYW5kZWRBdHRyIH0sCkBAIC01NywyMCArNjAsMjkgQEAgc3RhdGljIEFSSUFBdHRyaWJ1dGVN
YXAmIGFyaWFBdHRyaWJ1dGVNYQogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6SW52YWxp
ZCwgYXJpYV9pbnZhbGlkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6S2V5
U2hvcnRjdXRzLCBhcmlhX2tleXNob3J0Y3V0c0F0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9w
ZXJ0eU5hbWU6OkxhYmVsLCBhcmlhX2xhYmVsQXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3Bl
cnR5TmFtZTo6TGV2ZWwsIGFyaWFfbGV2ZWxBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVy
dHlOYW1lOjpMaXZlLCBhcmlhX2xpdmVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlO
YW1lOjpNb2RhbCwgYXJpYV9tb2RhbEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5h
bWU6Ok11bHRpbGluZSwgYXJpYV9tdWx0aWxpbmVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJv
cGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUsIGFyaWFfbXVsdGlzZWxlY3RhYmxlQXR0ciB9LAog
ICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6T3JpZW50YXRpb24sIGFyaWFfb3JpZW50YXRp
b25BdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlciwgYXJp
YV9wbGFjZWhvbGRlckF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlBvc0lu
U2V0LCBhcmlhX3Bvc2luc2V0QXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6
UHJlc3NlZCwgYXJpYV9wcmVzc2VkQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFt
ZTo6UmVhZE9ubHksIGFyaWFfcmVhZG9ubHlBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVy
dHlOYW1lOjpSZWxldmFudCwgYXJpYV9yZWxldmFudEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQ
cm9wZXJ0eU5hbWU6OlJlcXVpcmVkLCBhcmlhX3JlcXVpcmVkQXR0ciB9LAogICAgICAgICAgICAg
eyBBWFByb3BlcnR5TmFtZTo6Um9sZSwgcm9sZUF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9w
ZXJ0eU5hbWU6OlJvbGVEZXNjcmlwdGlvbiwgYXJpYV9yb2xlZGVzY3JpcHRpb25BdHRyIH0sCisg
ICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCwgYXJpYV9yb3djb3VudEF0dHIg
fSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlJvd0luZGV4LCBhcmlhX3Jvd2luZGV4
QXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6Um93U3BhbiwgYXJpYV9yb3dz
cGFuQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6U2VsZWN0ZWQsIGFyaWFf
c2VsZWN0ZWRBdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpTZXRTaXplLCBh
cmlhX3NldHNpemVBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpTb3J0LCBh
cmlhX3NvcnRBdHRyIH0sCisgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1heCwg
YXJpYV92YWx1ZW1heEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OlZhbHVl
TWluLCBhcmlhX3ZhbHVlbWluQXR0ciB9LAorICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6
VmFsdWVOb3csIGFyaWFfdmFsdWVub3dBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlO
YW1lOjpWYWx1ZVRleHQsIGFyaWFfdmFsdWV0ZXh0QXR0ciB9CiAgICAgICAgIH07CiAgICAgICAg
IEFSSUFBdHRyaWJ1dGVNYXAgbWFwOwpAQCAtMTI2LDYgKzEzOCw0NSBAQCBzdGF0aWMgYm9vbCBp
c1Byb3BlcnR5VmFsdWVCb29sZWFuKEFYUHJvCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc1By
b3BlcnR5VmFsdWVJbnQoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHN3aXRj
aCAocHJvcGVydHlOYW1lKSB7CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQ6Cisg
ICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Um93Q291bnQ6CisgICAgY2FzZSBBWFByb3BlcnR5TmFt
ZTo6U2V0U2l6ZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworc3RhdGljIGJvb2wgaXNQcm9wZXJ0eVZhbHVlVW5z
aWduZWQoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIHN3aXRjaCAocHJvcGVy
dHlOYW1lKSB7CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6Q29sSW5kZXg6CisgICAgY2FzZSBB
WFByb3BlcnR5TmFtZTo6Q29sU3BhbjoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpMZXZlbDoK
KyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpQb3NJblNldDoKKyAgICBjYXNlIEFYUHJvcGVydHlO
YW1lOjpSb3dJbmRleDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVGbG9hdChBWFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0eU5hbWUpIHsKKyAgICBjYXNlIEFY
UHJvcGVydHlOYW1lOjpWYWx1ZU1heDoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1p
bjoKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdzoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogYm9v
bCBBY2Nlc3NpYmxlTm9kZTo6aGFzUHJvcGVydHkoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGlmIChhdXRvKiBhY2Nlc3NpYmxlTm9kZSA9IGVs
ZW1lbnQuZXhpc3RpbmdBY2Nlc3NpYmxlTm9kZSgpKSB7CkBAIC0xNDksNiArMjAwLDI2IEBAIGNv
bnN0IFByb3BlcnR5VmFsdWVWYXJpYW50IEFjY2Vzc2libGVOb2QKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhbHVlLCBib29sIHNob3VsZFJl
bW92ZSkKK3sKKyAgICBpZiAoc2hvdWxkUmVtb3ZlKSB7CisgICAgICAgIG1fcHJvcGVydHlNYXAu
cmVtb3ZlKHByb3BlcnR5TmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wcm9w
ZXJ0eU1hcC5zZXQocHJvcGVydHlOYW1lLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+Cit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRPcHRpb25hbFByb3BlcnR5KEFYUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgc3RkOjpvcHRpb25hbDxUPiBvcHRpb25hbCkKK3sKKyAgICBzZXRQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIG9wdGlvbmFsLnZhbHVlKCksICFvcHRpb25hbC5oYXNfdmFs
dWUoKSk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFN0cmluZ1Byb3BlcnR5KEFYUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBzZXRQ
cm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlLCB2YWx1ZS5pc0VtcHR5KCkpOworfQorCiBjb25z
dCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9yRWxlbWVudChF
bGVtZW50JiBlbGVtZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7CiAgICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSA9IHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVy
dHlOYW1lKTsKQEAgLTE2OSwxOCArMjQwLDIwIEBAIGNvbnN0IFN0cmluZyBBY2Nlc3NpYmxlTm9k
ZTo6c3RyaW5nVmFsdWUKICAgICByZXR1cm4gbnVsbEF0b20oKTsKIH0KIAotdm9pZCBBY2Nlc3Np
YmxlTm9kZTo6c2V0U3RyaW5nUHJvcGVydHkoY29uc3QgU3RyaW5nJiB2YWx1ZSwgQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0ZDo6b3B0aW9uYWw8
VD4gQWNjZXNzaWJsZU5vZGU6Om9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVt
ZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgaWYgKHZhbHVlLmlzRW1w
dHkoKSkgewotICAgICAgICBtX3Byb3BlcnR5TWFwLnJlbW92ZShwcm9wZXJ0eU5hbWUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcHJvcGVydHlNYXAuc2V0KHByb3BlcnR5TmFtZSwg
dmFsdWUpOworICAgIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50JiYgdmFyaWFudCA9IEFjY2Vz
c2libGVOb2RlOjp2YWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjpudWxscHRyX3Q+KHZhcmlhbnQpKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFQ+KHZhcmlhbnQpKQorICAgICAgICByZXR1cm4gV1RGOjpnZXQ8VD4odmFyaWFudCk7CisgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxl
Tm9kZTo6ZWZmZWN0aXZlQm9vbFZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBBWFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgc3RkOjpvcHRpb25hbDxib29sPiB2YWx1
ZSA9IGJvb2xWYWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgYXV0
byB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihlbGVtZW50LCBwcm9wZXJ0
eU5hbWUpOwogICAgIGlmICh2YWx1ZSkKICAgICAgICAgcmV0dXJuICp2YWx1ZTsKIApAQCAtMTk1
LDIzICsyNjgsNDIgQEAgc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6ZWZmZQog
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiB9CiAKLXN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNz
aWJsZU5vZGU6OmJvb2xWYWx1ZUZvclByb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKK2ludCBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlSW50VmFs
dWVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKIHsKLSAgICBjb25zdCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhcmlhbnQgPSBBY2Nlc3Np
YmxlTm9kZTo6dmFsdWVGb3JQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOwotICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6bnVsbHB0cl90Pih2YXJpYW50KSkKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxi
b29sPih2YXJpYW50KSkKLSAgICAgICAgcmV0dXJuIFdURjo6Z2V0PGJvb2w+KHZhcmlhbnQpOwot
ICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgYXV0byB2YWx1ZSA9IG9wdGlvbmFsVmFsdWVG
b3JQcm9wZXJ0eTxpbnQ+KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CisgICAgaWYgKHZhbHVlKQor
ICAgICAgICByZXR1cm4gKnZhbHVlOworCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250
YWlucyhwcm9wZXJ0eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZUludChwcm9wZXJ0eU5hbWUpKQor
ICAgICAgICByZXR1cm4gZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFy
aWFBdHRyaWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1lKSkudG9JbnQoKTsKKworICAgIHJldHVy
biAwOwogfQogCi12b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRCb29sUHJvcGVydHkoc3RkOjpvcHRp
b25hbDxib29sPiB2YWx1ZSwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQordW5zaWduZWQg
QWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQm
IGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICBpZiAoIXZhbHVl
KSB7Ci0gICAgICAgIG1fcHJvcGVydHlNYXAucmVtb3ZlKHByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIHZhbHVlID0gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PHVuc2ln
bmVkPihlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcmV0
dXJuICp2YWx1ZTsKKworICAgIGlmIChhcmlhQXR0cmlidXRlTWFwKCkuY29udGFpbnMocHJvcGVy
dHlOYW1lKSAmJiBpc1Byb3BlcnR5VmFsdWVVbnNpZ25lZChwcm9wZXJ0eU5hbWUpKSB7CisgICAg
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSAgZWxlbWVudC5hdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKGFyaWFBdHRyaWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1lKSk7CisgICAgICAg
IHJldHVybiB2YWx1ZS50b1VJbnQoKTsKICAgICB9Ci0gICAgbV9wcm9wZXJ0eU1hcC5zZXQocHJv
cGVydHlOYW1lLCAqdmFsdWUpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBBY2Nlc3Np
YmxlTm9kZTo6ZWZmZWN0aXZlRG91YmxlVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBhdXRvIHZhbHVlID0gb3B0aW9u
YWxWYWx1ZUZvclByb3BlcnR5PGRvdWJsZT4oZWxlbWVudCwgcHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAodmFsdWUpCisgICAgICAgIHJldHVybiAqdmFsdWU7CisKKyAgICBpZiAoYXJpYUF0dHJpYnV0
ZU1hcCgpLmNvbnRhaW5zKHByb3BlcnR5TmFtZSkgJiYgaXNQcm9wZXJ0eVZhbHVlRmxvYXQocHJv
cGVydHlOYW1lKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihhcmlhQXR0cmlidXRlTWFwKCkuZ2V0KHByb3BlcnR5TmFtZSkpLnRvRmxvYXQo
KTsKKworICAgIHJldHVybiAwLjA7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6Om5vdGlmeUF0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkKQEAgLTIy
MiwxMiArMzE0LDEyIEBAIHZvaWQgQWNjZXNzaWJsZU5vZGU6Om5vdGlmeUF0dHJpYnV0ZUNoYW4K
IAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6YXRvbWljKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVy
dHlOYW1lOjpBdG9taWMpOworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9v
bD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpBdG9taWMpOwogfQogCiB2b2lkIEFj
Y2Vzc2libGVOb2RlOjpzZXRBdG9taWMoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAg
ICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpBdG9taWMpOworICAgIHNl
dE9wdGlvbmFsUHJvcGVydHk8Ym9vbD4oQVhQcm9wZXJ0eU5hbWU6OkF0b21pYywgdmFsdWUpOwog
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9hdG9taWNBdHRyKTsKIH0KIApAQCAtMjM4
LDE4ICszMzAsMTggQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjphdXRvY29tcGxldGUoKSBjbwog
CiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRBdXRvY29tcGxldGUoY29uc3QgU3RyaW5nJiBhdXRv
Y29tcGxldGUpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkoYXV0b2NvbXBsZXRlLCBBWFByb3Bl
cnR5TmFtZTo6QXV0b2NvbXBsZXRlKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZTo6QXV0b2NvbXBsZXRlLCBhdXRvY29tcGxldGUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV9hdXRvY29tcGxldGVBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBB
Y2Nlc3NpYmxlTm9kZTo6YnVzeSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclBy
b3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6QnVzeSk7CisgICAgcmV0dXJu
IG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWU6OkJ1c3kpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRCdXN5KHN0ZDo6b3B0
aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZhbHVlLCBBWFByb3Bl
cnR5TmFtZTo6QnVzeSk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3BlcnR5
TmFtZTo6QnVzeSwgdmFsdWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9idXN5
QXR0cik7CiB9CiAKQEAgLTI2MCwxMCArMzUyLDQzIEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6
Y2hlY2tlZCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldENoZWNrZWQoY29uc3Qg
U3RyaW5nJiBjaGVja2VkKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KGNoZWNrZWQsIEFYUHJv
cGVydHlOYW1lOjpDaGVja2VkKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFt
ZTo6Q2hlY2tlZCwgY2hlY2tlZCk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2No
ZWNrZWRBdHRyKTsKIH0KIAorc3RkOjpvcHRpb25hbDxpbnQ+IEFjY2Vzc2libGVOb2RlOjpjb2xD
b3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxpbnQ+
KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQpOworfQorCit2b2lkIEFj
Y2Vzc2libGVOb2RlOjpzZXRDb2xDb3VudChzdGQ6Om9wdGlvbmFsPGludD4gdmFsdWUpCit7Cisg
ICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxpbnQ+KEFYUHJvcGVydHlOYW1lOjpDb2xDb3VudCwgdmFs
dWUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jb2xjb3VudEF0dHIpOworfQor
CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6Y29sSW5kZXgoKSBjb25z
dAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3du
ZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sQ291bnQpOworfQorCit2b2lkIEFjY2Vzc2li
bGVOb2RlOjpzZXRDb2xJbmRleChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sKKyAg
ICBzZXRPcHRpb25hbFByb3BlcnR5PHVuc2lnbmVkPihBWFByb3BlcnR5TmFtZTo6Q29sSW5kZXgs
IHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY29saW5kZXhBdHRyKTsK
K30KKworc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJsZU5vZGU6OmNvbFNwYW4oKSBj
b25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1f
b3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6Q29sU3Bhbik7Cit9CisKK3ZvaWQgQWNjZXNz
aWJsZU5vZGU6OnNldENvbFNwYW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gdmFsdWUpCit7Cisg
ICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTx1bnNpZ25lZD4oQVhQcm9wZXJ0eU5hbWU6OkNvbFNwYW4s
IHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfY29sc3BhbkF0dHIpOwor
fQorCiBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmN1cnJlbnQoKSBjb25zdAogewogICAgIHJldHVy
biBzdHJpbmdWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
Q3VycmVudCk7CkBAIC0yNzEsMjkgKzM5NiwyOSBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OmN1
cnJlbnQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRDdXJyZW50KGNvbnN0IFN0
cmluZyYgY3VycmVudCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShjdXJyZW50LCBBWFByb3Bl
cnR5TmFtZTo6Q3VycmVudCk7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6
OkN1cnJlbnQsIGN1cnJlbnQpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jdXJy
ZW50QXR0cik7CiB9CiAKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OmRpc2Fi
bGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVs
ZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpEaXNhYmxlZCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFs
dWVGb3JQcm9wZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkRpc2Fi
bGVkKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RGlzYWJsZWQoc3RkOjpvcHRpb25h
bDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlO
YW1lOjpEaXNhYmxlZCk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3BlcnR5
TmFtZTo6RGlzYWJsZWQsIHZhbHVlKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFf
ZGlzYWJsZWRBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6
ZXhwYW5kZWQoKSBjb25zdAogewotICAgIHJldHVybiBib29sVmFsdWVGb3JQcm9wZXJ0eShtX293
bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVkKTsKKyAgICByZXR1cm4gb3B0aW9u
YWxWYWx1ZUZvclByb3BlcnR5PGJvb2w+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6
RXhwYW5kZWQpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRFeHBhbmRlZChzdGQ6Om9w
dGlvbmFsPGJvb2w+IHZhbHVlKQogewotICAgIHNldEJvb2xQcm9wZXJ0eSh2YWx1ZSwgQVhQcm9w
ZXJ0eU5hbWU6OkV4cGFuZGVkKTsKKyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJv
cGVydHlOYW1lOjpFeHBhbmRlZCwgdmFsdWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQo
YXJpYV9leHBhbmRlZEF0dHIpOwogfQogCkBAIC0zMDQsMTggKzQyOSwxOCBAQCBTdHJpbmcgQWNj
ZXNzaWJsZU5vZGU6Omhhc1BvcFVwKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0
SGFzUG9wVXAoY29uc3QgU3RyaW5nJiBoYXNQb3BVcCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0
eShoYXNQb3BVcCwgQVhQcm9wZXJ0eU5hbWU6Okhhc1BvcFVwKTsKKyAgICBzZXRTdHJpbmdQcm9w
ZXJ0eShBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXAsIGhhc1BvcFVwKTsKICAgICBub3RpZnlBdHRy
aWJ1dGVDaGFuZ2VkKGFyaWFfaGFzcG9wdXBBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29s
PiBBY2Nlc3NpYmxlTm9kZTo6aGlkZGVuKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVl
Rm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpIaWRkZW4pOworICAg
IHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpIaWRkZW4pOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRIaWRk
ZW4oc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFs
dWUsIEFYUHJvcGVydHlOYW1lOjpIaWRkZW4pOworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8Ym9v
bD4oQVhQcm9wZXJ0eU5hbWU6OkhpZGRlbiwgdmFsdWUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNo
YW5nZWQoYXJpYV9oaWRkZW5BdHRyKTsKIH0KIApAQCAtMzI2LDcgKzQ1MSw3IEBAIFN0cmluZyBB
Y2Nlc3NpYmxlTm9kZTo6aW52YWxpZCgpIGNvbnN0CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNl
dEludmFsaWQoY29uc3QgU3RyaW5nJiBpbnZhbGlkKQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5
KGludmFsaWQsIEFYUHJvcGVydHlOYW1lOjpJbnZhbGlkKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0
eShBWFByb3BlcnR5TmFtZTo6SW52YWxpZCwgaW52YWxpZCk7CiAgICAgbm90aWZ5QXR0cmlidXRl
Q2hhbmdlZChhcmlhX2ludmFsaWRBdHRyKTsKIH0KIApAQCAtMzM3LDYyICs0NjIsNzMgQEAgU3Ry
aW5nIEFjY2Vzc2libGVOb2RlOjprZXlTaG9ydGN1dHMoKSBjbwogCiB2b2lkIEFjY2Vzc2libGVO
b2RlOjpzZXRLZXlTaG9ydGN1dHMoY29uc3QgU3RyaW5nJiBrZXlTaG9ydGN1dHMpCiB7Ci0gICAg
c2V0U3RyaW5nUHJvcGVydHkoa2V5U2hvcnRjdXRzLCBBWFByb3BlcnR5TmFtZTo6S2V5U2hvcnRj
dXRzKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6S2V5U2hvcnRjdXRz
LCBrZXlTaG9ydGN1dHMpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9rZXlzaG9y
dGN1dHNBdHRyKTsKIH0KIAotU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpsaXZlKCkgY29uc3QKK1N0
cmluZyBBY2Nlc3NpYmxlTm9kZTo6bGFiZWwoKSBjb25zdAogewotICAgIHJldHVybiBzdHJpbmdW
YWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TGl2ZSk7Cisg
ICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVy
dHlOYW1lOjpMYWJlbCk7CiB9CiAKLXZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldExpdmUoY29uc3Qg
U3RyaW5nJiBsaXZlKQordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGFiZWwoY29uc3QgU3RyaW5n
JiBsYWJlbCkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShsaXZlLCBBWFByb3BlcnR5TmFtZTo6
TGl2ZSk7Ci0gICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2xpdmVBdHRyKTsKKyAgICBz
ZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6TGFiZWwsIGxhYmVsKTsKKyAgICBub3Rp
ZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbGFiZWxBdHRyKTsKIH0KIAotU3RyaW5nIEFjY2Vzc2li
bGVOb2RlOjpsYWJlbCgpIGNvbnN0CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxl
Tm9kZTo6bGV2ZWwoKSBjb25zdAogewotICAgIHJldHVybiBzdHJpbmdWYWx1ZUZvclByb3BlcnR5
KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6TGFiZWwpOworICAgIHJldHVybiBvcHRp
b25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5
TmFtZTo6TGV2ZWwpOwogfQogCi12b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRMYWJlbChjb25zdCBT
dHJpbmcmIGxhYmVsKQordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGV2ZWwoc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gdmFsdWUpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkobGFiZWwsIEFYUHJv
cGVydHlOYW1lOjpMYWJlbCk7Ci0gICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2xhYmVs
QXR0cik7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTx1bnNpZ25lZD4oQVhQcm9wZXJ0eU5hbWU6
OkxldmVsLCB2YWx1ZSk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX2xldmVsQXR0
cik7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmxlTm9kZTo6bGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpMaXZlKTsKK30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0TGl2ZShjb25zdCBTdHJpbmcm
IGxpdmUpCit7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkxpdmUsIGxp
dmUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9saXZlQXR0cik7CiB9CiAKIHN0
ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6Om1vZGFsKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpNb2RhbCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTxib29sPihtX293
bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6Ok1vZGFsKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmxl
Tm9kZTo6c2V0TW9kYWwoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29s
UHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpNb2RhbCk7CisgICAgc2V0T3B0aW9uYWxQ
cm9wZXJ0eTxib29sPihBWFByb3BlcnR5TmFtZTo6TW9kYWwsIHZhbHVlKTsKICAgICBub3RpZnlB
dHRyaWJ1dGVDaGFuZ2VkKGFyaWFfbW9kYWxBdHRyKTsKIH0KIAogc3RkOjpvcHRpb25hbDxib29s
PiBBY2Nlc3NpYmxlTm9kZTo6bXVsdGlsaW5lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYm9vbFZh
bHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpNdWx0aWxpbmUp
OworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1l
bnQsIEFYUHJvcGVydHlOYW1lOjpNdWx0aWxpbmUpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2Rl
OjpzZXRNdWx0aWxpbmUoc3RkOjpvcHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29s
UHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpNdWx0aWxpbmUpOworICAgIHNldE9wdGlv
bmFsUHJvcGVydHk8Ym9vbD4oQVhQcm9wZXJ0eU5hbWU6Ok11bHRpbGluZSwgdmFsdWUpOwogICAg
IG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9tdWx0aWxpbmVBdHRyKTsKIH0KIAogc3RkOjpv
cHRpb25hbDxib29sPiBBY2Nlc3NpYmxlTm9kZTo6bXVsdGlzZWxlY3RhYmxlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFYUHJvcGVy
dHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJv
cGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpNdWx0aXNlbGVjdGFi
bGUpOwogfQogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRNdWx0aXNlbGVjdGFibGUoc3RkOjpv
cHRpb25hbDxib29sPiB2YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJv
cGVydHlOYW1lOjpNdWx0aXNlbGVjdGFibGUpOworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8Ym9v
bD4oQVhQcm9wZXJ0eU5hbWU6Ok11bHRpc2VsZWN0YWJsZSwgdmFsdWUpOwogICAgIG5vdGlmeUF0
dHJpYnV0ZUNoYW5nZWQoYXJpYV9tdWx0aXNlbGVjdGFibGVBdHRyKTsKIH0KIApAQCAtNDAzLDcg
KzUzOSw3IEBAIFN0cmluZyBBY2Nlc3NpYmxlTm9kZTo6b3JpZW50YXRpb24oKSBjb24KIAogdm9p
ZCBBY2Nlc3NpYmxlTm9kZTo6c2V0T3JpZW50YXRpb24oY29uc3QgU3RyaW5nJiBvcmllbnRhdGlv
bikKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0eShvcmllbnRhdGlvbiwgQVhQcm9wZXJ0eU5hbWU6
Ok9yaWVudGF0aW9uKTsKKyAgICBzZXRTdHJpbmdQcm9wZXJ0eShBWFByb3BlcnR5TmFtZTo6T3Jp
ZW50YXRpb24sIG9yaWVudGF0aW9uKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFf
b3JpZW50YXRpb25BdHRyKTsKIH0KIApAQCAtNDE0LDEwICs1NTAsMjEgQEAgU3RyaW5nIEFjY2Vz
c2libGVOb2RlOjpwbGFjZWhvbGRlcigpIGNvbgogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRQ
bGFjZWhvbGRlcihjb25zdCBTdHJpbmcmIHBsYWNlaG9sZGVyKQogewotICAgIHNldFN0cmluZ1By
b3BlcnR5KHBsYWNlaG9sZGVyLCBBWFByb3BlcnR5TmFtZTo6UGxhY2Vob2xkZXIpOworICAgIHNl
dFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpQbGFjZWhvbGRlciwgcGxhY2Vob2xkZXIp
OwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9wbGFjZWhvbGRlckF0dHIpOwogfQog
CitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6cG9zSW5TZXQoKSBjb25z
dAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8dW5zaWduZWQ+KG1fb3du
ZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQpOworfQorCit2b2lkIEFjY2Vzc2li
bGVOb2RlOjpzZXRQb3NJblNldChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sKKyAg
ICBzZXRPcHRpb25hbFByb3BlcnR5PHVuc2lnbmVkPihBWFByb3BlcnR5TmFtZTo6UG9zSW5TZXQs
IHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcG9zaW5zZXRBdHRyKTsK
K30KKwogU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpwcmVzc2VkKCkgY29uc3QKIHsKICAgICByZXR1
cm4gc3RyaW5nVmFsdWVGb3JQcm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6
OlByZXNzZWQpOwpAQCAtNDI1LDE4ICs1NzIsMTggQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpw
cmVzc2VkKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0UHJlc3NlZChjb25zdCBT
dHJpbmcmIHByZXNzZWQpCiB7Ci0gICAgc2V0U3RyaW5nUHJvcGVydHkocHJlc3NlZCwgQVhQcm9w
ZXJ0eU5hbWU6OlByZXNzZWQpOworICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1l
OjpQcmVzc2VkLCBwcmVzc2VkKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfcHJl
c3NlZEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjpyZWFk
T25seSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZvclByb3BlcnR5KG1fb3duZXJF
bGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UmVhZE9ubHkpOworICAgIHJldHVybiBvcHRpb25hbFZh
bHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSZWFk
T25seSk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJlYWRPbmx5KHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5KHZhbHVlLCBBWFByb3BlcnR5
TmFtZTo6UmVhZE9ubHkpOworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8Ym9vbD4oQVhQcm9wZXJ0
eU5hbWU6OlJlYWRPbmx5LCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlh
X3JlYWRvbmx5QXR0cik7CiB9CiAKQEAgLTQ0NywxOCArNTk0LDE4IEBAIFN0cmluZyBBY2Nlc3Np
YmxlTm9kZTo6cmVsZXZhbnQoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRSZWxl
dmFudChjb25zdCBTdHJpbmcmIHJlbGV2YW50KQogewotICAgIHNldFN0cmluZ1Byb3BlcnR5KHJl
bGV2YW50LCBBWFByb3BlcnR5TmFtZTo6UmVsZXZhbnQpOworICAgIHNldFN0cmluZ1Byb3BlcnR5
KEFYUHJvcGVydHlOYW1lOjpSZWxldmFudCwgcmVsZXZhbnQpOwogICAgIG5vdGlmeUF0dHJpYnV0
ZUNoYW5nZWQoYXJpYV9yZWxldmFudEF0dHIpOwogfQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFj
Y2Vzc2libGVOb2RlOjpyZXF1aXJlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJvb2xWYWx1ZUZv
clByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6UmVxdWlyZWQpOworICAg
IHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpSZXF1aXJlZCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJl
cXVpcmVkKHN0ZDo6b3B0aW9uYWw8Ym9vbD4gdmFsdWUpCiB7Ci0gICAgc2V0Qm9vbFByb3BlcnR5
KHZhbHVlLCBBWFByb3BlcnR5TmFtZTo6UmVxdWlyZWQpOworICAgIHNldE9wdGlvbmFsUHJvcGVy
dHk8Ym9vbD4oQVhQcm9wZXJ0eU5hbWU6OlJlcXVpcmVkLCB2YWx1ZSk7CiAgICAgbm90aWZ5QXR0
cmlidXRlQ2hhbmdlZChhcmlhX3JlcXVpcmVkQXR0cik7CiB9CiAKQEAgLTQ2OSw3ICs2MTYsNyBA
QCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnJvbGUoKSBjb25zdAogCiB2b2lkIEFjY2Vzc2libGVO
b2RlOjpzZXRSb2xlKGNvbnN0IFN0cmluZyYgcm9sZSkKIHsKLSAgICBzZXRTdHJpbmdQcm9wZXJ0
eShyb2xlLCBBWFByb3BlcnR5TmFtZTo6Um9sZSk7CisgICAgc2V0U3RyaW5nUHJvcGVydHkoQVhQ
cm9wZXJ0eU5hbWU6OlJvbGUsIHJvbGUpOwogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQocm9s
ZUF0dHIpOwogfQogCkBAIC00ODAsMjEgKzYyNyw2NSBAQCBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6
OnJvbGVEZXNjcmlwdGlvbigpCiAKIHZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFJvbGVEZXNjcmlw
dGlvbihjb25zdCBTdHJpbmcmIHJvbGVEZXNjcmlwdGlvbikKIHsKLSAgICBzZXRTdHJpbmdQcm9w
ZXJ0eShyb2xlRGVzY3JpcHRpb24sIEFYUHJvcGVydHlOYW1lOjpSb2xlRGVzY3JpcHRpb24pOwor
ICAgIHNldFN0cmluZ1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpSb2xlRGVzY3JpcHRpb24sIHJv
bGVEZXNjcmlwdGlvbik7CiAgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3JvbGVkZXNj
cmlwdGlvbkF0dHIpOwogfQogCitzdGQ6Om9wdGlvbmFsPGludD4gQWNjZXNzaWJsZU5vZGU6OnJv
d0NvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGlu
dD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCk7Cit9CisKK3ZvaWQg
QWNjZXNzaWJsZU5vZGU6OnNldFJvd0NvdW50KHN0ZDo6b3B0aW9uYWw8aW50PiB2YWx1ZSkKK3sK
KyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGludD4oQVhQcm9wZXJ0eU5hbWU6OlJvd0NvdW50LCB2
YWx1ZSk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3Jvd2NvdW50QXR0cik7Cit9
CisKK3N0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IEFjY2Vzc2libGVOb2RlOjpyb3dJbmRleCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4obV9v
d25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dDb3VudCk7Cit9CisKK3ZvaWQgQWNjZXNz
aWJsZU5vZGU6OnNldFJvd0luZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHZhbHVlKQorewor
ICAgIHNldE9wdGlvbmFsUHJvcGVydHk8dW5zaWduZWQ+KEFYUHJvcGVydHlOYW1lOjpSb3dJbmRl
eCwgdmFsdWUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yb3dpbmRleEF0dHIp
OworfQorCitzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmxlTm9kZTo6cm93U3Bhbigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0eTx1bnNpZ25lZD4o
bV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpSb3dTcGFuKTsKK30KKwordm9pZCBBY2Nl
c3NpYmxlTm9kZTo6c2V0Um93U3BhbihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiB2YWx1ZSkKK3sK
KyAgICBzZXRPcHRpb25hbFByb3BlcnR5PHVuc2lnbmVkPihBWFByb3BlcnR5TmFtZTo6Um93U3Bh
biwgdmFsdWUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9yb3dzcGFuQXR0cik7
Cit9CisKIHN0ZDo6b3B0aW9uYWw8Ym9vbD4gQWNjZXNzaWJsZU5vZGU6OnNlbGVjdGVkKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYm9vbFZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpTZWxlY3RlZCk7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9w
ZXJ0eTxib29sPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlNlbGVjdGVkKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0U2VsZWN0ZWQoc3RkOjpvcHRpb25hbDxib29sPiB2
YWx1ZSkKIHsKLSAgICBzZXRCb29sUHJvcGVydHkodmFsdWUsIEFYUHJvcGVydHlOYW1lOjpTZWxl
Y3RlZCk7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxib29sPihBWFByb3BlcnR5TmFtZTo6U2Vs
ZWN0ZWQsIHZhbHVlKTsKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfc2VsZWN0ZWRB
dHRyKTsKIH0KIAorc3RkOjpvcHRpb25hbDxpbnQ+IEFjY2Vzc2libGVOb2RlOjpzZXRTaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZvclByb3BlcnR5PGludD4obV9vd25l
ckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpTZXRTaXplKTsKK30KKwordm9pZCBBY2Nlc3NpYmxl
Tm9kZTo6c2V0U2V0U2l6ZShzdGQ6Om9wdGlvbmFsPGludD4gdmFsdWUpCit7CisgICAgc2V0T3B0
aW9uYWxQcm9wZXJ0eTxpbnQ+KEFYUHJvcGVydHlOYW1lOjpTZXRTaXplLCB2YWx1ZSk7CisgICAg
bm90aWZ5QXR0cmlidXRlQ2hhbmdlZChhcmlhX3NldHNpemVBdHRyKTsKK30KKwogU3RyaW5nIEFj
Y2Vzc2libGVOb2RlOjpzb3J0KCkgY29uc3QKIHsKICAgICByZXR1cm4gc3RyaW5nVmFsdWVGb3JQ
cm9wZXJ0eShtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlNvcnQpOwpAQCAtNTAyLDEw
ICs2OTMsNDMgQEAgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpzb3J0KCkgY29uc3QKIAogdm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0U29ydChjb25zdCBTdHJpbmcmIHNvcnQpCiB7Ci0gICAgc2V0U3Ry
aW5nUHJvcGVydHkoc29ydCwgQVhQcm9wZXJ0eU5hbWU6OlNvcnQpOworICAgIHNldFN0cmluZ1By
b3BlcnR5KEFYUHJvcGVydHlOYW1lOjpTb3J0LCBzb3J0KTsKICAgICBub3RpZnlBdHRyaWJ1dGVD
aGFuZ2VkKGFyaWFfc29ydEF0dHIpOwogfQogCitzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gQWNjZXNz
aWJsZU5vZGU6OnZhbHVlTWF4KCkgY29uc3QKK3sKKyAgICByZXR1cm4gb3B0aW9uYWxWYWx1ZUZv
clByb3BlcnR5PGRvdWJsZT4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1lOjpWYWx1ZU1h
eCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldFZhbHVlTWF4KHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPiB2YWx1ZSkKK3sKKyAgICBzZXRPcHRpb25hbFByb3BlcnR5PGRvdWJsZT4oQVhQcm9w
ZXJ0eU5hbWU6OlZhbHVlTWF4LCB2YWx1ZSk7CisgICAgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChh
cmlhX3ZhbHVlbWF4QXR0cik7Cit9CisKK3N0ZDo6b3B0aW9uYWw8ZG91YmxlPiBBY2Nlc3NpYmxl
Tm9kZTo6dmFsdWVNaW4oKSBjb25zdAoreworICAgIHJldHVybiBvcHRpb25hbFZhbHVlRm9yUHJv
cGVydHk8ZG91YmxlPihtX293bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlTWluKTsK
K30KKwordm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0VmFsdWVNaW4oc3RkOjpvcHRpb25hbDxkb3Vi
bGU+IHZhbHVlKQoreworICAgIHNldE9wdGlvbmFsUHJvcGVydHk8ZG91YmxlPihBWFByb3BlcnR5
TmFtZTo6VmFsdWVNaW4sIHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFf
dmFsdWVtaW5BdHRyKTsKK30KKworc3RkOjpvcHRpb25hbDxkb3VibGU+IEFjY2Vzc2libGVOb2Rl
Ojp2YWx1ZU5vdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG9wdGlvbmFsVmFsdWVGb3JQcm9wZXJ0
eTxkb3VibGU+KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6VmFsdWVOb3cpOworfQor
Cit2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRWYWx1ZU5vdyhzdGQ6Om9wdGlvbmFsPGRvdWJsZT4g
dmFsdWUpCit7CisgICAgc2V0T3B0aW9uYWxQcm9wZXJ0eTxkb3VibGU+KEFYUHJvcGVydHlOYW1l
OjpWYWx1ZU5vdywgdmFsdWUpOworICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV92YWx1
ZW5vd0F0dHIpOworfQorCiBTdHJpbmcgQWNjZXNzaWJsZU5vZGU6OnZhbHVlVGV4dCgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkobV9vd25lckVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lOjpWYWx1ZVRleHQpOwpAQCAtNTEzLDcgKzczNyw3IEBAIFN0cmluZyBBY2Nl
c3NpYmxlTm9kZTo6dmFsdWVUZXh0KCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0
VmFsdWVUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWVUZXh0KQogewotICAgIHNldFN0cmluZ1Byb3Bl
cnR5KHZhbHVlVGV4dCwgQVhQcm9wZXJ0eU5hbWU6OlZhbHVlVGV4dCk7CisgICAgc2V0U3RyaW5n
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OlZhbHVlVGV4dCwgdmFsdWVUZXh0KTsKICAgICBub3Rp
ZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfdmFsdWV0ZXh0QXR0cik7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmgJKHJldmlzaW9uIDIy
NDk5OSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3RyaW5nLCBib29sLCBpbnQ+IFByb3Bl
cnR5VmFsdWVWYXJpYW50OwordHlwZWRlZiBWYXJpYW50PHN0ZDo6bnVsbHB0cl90LCBTdHJpbmcs
IGJvb2wsIGludCwgdW5zaWduZWQsIGRvdWJsZT4gUHJvcGVydHlWYWx1ZVZhcmlhbnQ7CiAKIGVu
dW0gY2xhc3MgQVhQcm9wZXJ0eU5hbWUgewogICAgIE5vbmUsCkBAIC00NCw2ICs0NCw5IEBAIGVu
dW0gY2xhc3MgQVhQcm9wZXJ0eU5hbWUgewogICAgIEF1dG9jb21wbGV0ZSwKICAgICBCdXN5LAog
ICAgIENoZWNrZWQsCisgICAgQ29sQ291bnQsCisgICAgQ29sSW5kZXgsCisgICAgQ29sU3BhbiwK
ICAgICBDdXJyZW50LAogICAgIERpc2FibGVkLAogICAgIEV4cGFuZGVkLApAQCAtNTIsMjAgKzU1
LDI5IEBAIGVudW0gY2xhc3MgQVhQcm9wZXJ0eU5hbWUgewogICAgIEludmFsaWQsCiAgICAgS2V5
U2hvcnRjdXRzLAogICAgIExhYmVsLAorICAgIExldmVsLAogICAgIExpdmUsCiAgICAgTW9kYWws
CiAgICAgTXVsdGlsaW5lLAogICAgIE11bHRpc2VsZWN0YWJsZSwKICAgICBPcmllbnRhdGlvbiwK
ICAgICBQbGFjZWhvbGRlciwKKyAgICBQb3NJblNldCwKICAgICBQcmVzc2VkLAogICAgIFJlYWRP
bmx5LAogICAgIFJlbGV2YW50LAogICAgIFJlcXVpcmVkLAogICAgIFJvbGUsCiAgICAgUm9sZURl
c2NyaXB0aW9uLAorICAgIFJvd0NvdW50LAorICAgIFJvd0luZGV4LAorICAgIFJvd1NwYW4sCiAg
ICAgU2VsZWN0ZWQsCisgICAgU2V0U2l6ZSwKICAgICBTb3J0LAorICAgIFZhbHVlTWF4LAorICAg
IFZhbHVlTWluLAorICAgIFZhbHVlTm93LAogICAgIFZhbHVlVGV4dAogfTsKIApAQCAtOTUsNiAr
MTA3LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyBlZmZlY3RpdmVTdHJp
bmdWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMg
c3RkOjpvcHRpb25hbDxib29sPiBlZmZlY3RpdmVCb29sVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQm
LCBBWFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIGludCBlZmZlY3RpdmVJbnRWYWx1ZUZvckVs
ZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgZWZm
ZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsK
KyAgICBzdGF0aWMgZG91YmxlIGVmZmVjdGl2ZURvdWJsZVZhbHVlRm9yRWxlbWVudChFbGVtZW50
JiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIHN0YXRpYyBib29sIGhhc1Byb3BlcnR5KEVsZW1lbnQm
LCBBWFByb3BlcnR5TmFtZSk7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGF0b21pYygpIGNv
bnN0OwpAQCAtMTA5LDYgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGNoZWNrZWQoKSBj
b25zdDsKICAgICB2b2lkIHNldENoZWNrZWQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBzdGQ6Om9w
dGlvbmFsPGludD4gY29sQ291bnQoKSBjb25zdDsKKyAgICB2b2lkIHNldENvbENvdW50KHN0ZDo6
b3B0aW9uYWw8aW50Pik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBjb2xJbmRleCgp
IGNvbnN0OworICAgIHZvaWQgc2V0Q29sSW5kZXgoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOwor
CisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gY29sU3BhbigpIGNvbnN0OworICAgIHZvaWQg
c2V0Q29sU3BhbihzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik7CisKICAgICBTdHJpbmcgY3VycmVu
dCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q3VycmVudChjb25zdCBTdHJpbmcmKTsKIApAQCAtMTMw
LDEyICsxNTQsMTUgQEAgcHVibGljOgogICAgIFN0cmluZyBrZXlTaG9ydGN1dHMoKSBjb25zdDsK
ICAgICB2b2lkIHNldEtleVNob3J0Y3V0cyhjb25zdCBTdHJpbmcmKTsKIAotICAgIFN0cmluZyBs
aXZlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRMaXZlKGNvbnN0IFN0cmluZyYpOwotCiAgICAgU3Ry
aW5nIGxhYmVsKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRMYWJlbChjb25zdCBTdHJpbmcmKTsKIAor
ICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGxldmVsKCkgY29uc3Q7CisgICAgdm9pZCBzZXRM
ZXZlbChzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPik7CisKKyAgICBTdHJpbmcgbGl2ZSgpIGNvbnN0
OworICAgIHZvaWQgc2V0TGl2ZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHN0ZDo6b3B0aW9uYWw8
Ym9vbD4gbW9kYWwoKSBjb25zdDsKICAgICB2b2lkIHNldE1vZGFsKHN0ZDo6b3B0aW9uYWw8Ym9v
bD4pOwogCkBAIC0xNTEsNiArMTc4LDkgQEAgcHVibGljOgogICAgIFN0cmluZyBwbGFjZWhvbGRl
cigpIGNvbnN0OwogICAgIHZvaWQgc2V0UGxhY2Vob2xkZXIoY29uc3QgU3RyaW5nJik7CiAKKyAg
ICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwb3NJblNldCgpIGNvbnN0OworICAgIHZvaWQgc2V0
UG9zSW5TZXQoc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworICAgIAogICAgIFN0cmluZyBwcmVz
c2VkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRQcmVzc2VkKGNvbnN0IFN0cmluZyYpOwogCkBAIC0x
NjksMjEgKzE5OSw0NCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJvbGVEZXNjcmlwdGlvbigpIGNv
bnN0OwogICAgIHZvaWQgc2V0Um9sZURlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYpOwogCisgICAg
c3RkOjpvcHRpb25hbDxpbnQ+IHJvd0NvdW50KCkgY29uc3Q7CisgICAgdm9pZCBzZXRSb3dDb3Vu
dChzdGQ6Om9wdGlvbmFsPGludD4pOworCisgICAgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gcm93
SW5kZXgoKSBjb25zdDsKKyAgICB2b2lkIHNldFJvd0luZGV4KHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+KTsKKworICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHJvd1NwYW4oKSBjb25zdDsKKyAg
ICB2b2lkIHNldFJvd1NwYW4oc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4pOworCiAgICAgc3RkOjpv
cHRpb25hbDxib29sPiBzZWxlY3RlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2VsZWN0ZWQoc3Rk
OjpvcHRpb25hbDxib29sPik7CiAKKyAgICBzdGQ6Om9wdGlvbmFsPGludD4gc2V0U2l6ZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0U2V0U2l6ZShzdGQ6Om9wdGlvbmFsPGludD4pOworCiAgICAgU3Ry
aW5nIHNvcnQoKSBjb25zdDsKICAgICB2b2lkIHNldFNvcnQoY29uc3QgU3RyaW5nJik7CiAKKyAg
ICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVNYXgoKSBjb25zdDsKKyAgICB2b2lkIHNldFZh
bHVlTWF4KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGRvdWJs
ZT4gdmFsdWVNaW4oKSBjb25zdDsKKyAgICB2b2lkIHNldFZhbHVlTWluKHN0ZDo6b3B0aW9uYWw8
ZG91YmxlPik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGRvdWJsZT4gdmFsdWVOb3coKSBjb25zdDsK
KyAgICB2b2lkIHNldFZhbHVlTm93KHN0ZDo6b3B0aW9uYWw8ZG91YmxlPik7CisKICAgICBTdHJp
bmcgdmFsdWVUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRWYWx1ZVRleHQoY29uc3QgU3RyaW5n
Jik7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IFByb3BlcnR5VmFsdWVWYXJpYW50IHZh
bHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgY29u
c3QgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1l
KTsKLSAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxib29sPiBib29sVmFsdWVGb3JQcm9wZXJ0eShF
bGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoY29u
c3QgU3RyaW5nJiwgQVhQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgc2V0Qm9vbFByb3BlcnR5KHN0
ZDo6b3B0aW9uYWw8Ym9vbD4sIEFYUHJvcGVydHlOYW1lKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxUPiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkoRWxl
bWVudCYsIEFYUHJvcGVydHlOYW1lKTsKKyAgICAKKyAgICB2b2lkIHNldFByb3BlcnR5KEFYUHJv
cGVydHlOYW1lLCBQcm9wZXJ0eVZhbHVlVmFyaWFudCYmLCBib29sKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHNldE9wdGlvbmFsUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIHN0ZDo6
b3B0aW9uYWw8VD4pOworICAgIHZvaWQgc2V0U3RyaW5nUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUs
IGNvbnN0IFN0cmluZyYpOwogICAgIAogICAgIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hhbmdlZChj
b25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCShyZXZpc2lvbiAyMjQ5OTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsOSBAQAogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGF1dG9j
b21wbGV0ZTsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gYnVzeTsKICAgICBhdHRyaWJ1dGUgRE9N
U3RyaW5nPyBjaGVja2VkOworICAgIGF0dHJpYnV0ZSBsb25nPyBjb2xDb3VudDsKKyAgICBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZz8gY29sSW5kZXg7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxv
bmc/IGNvbFNwYW47CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gY3VycmVudDsKICAgICBhdHRy
aWJ1dGUgYm9vbGVhbj8gZGlzYWJsZWQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGV4cGFuZGVk
OwpAQCAtMzksMTkgKzQyLDI4IEBACiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gaW52YWxpZDsK
ICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBrZXlTaG9ydGN1dHM7CiAgICAgYXR0cmlidXRlIERP
TVN0cmluZz8gbGFiZWw7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGxldmVsOwogICAg
IGF0dHJpYnV0ZSBET01TdHJpbmc/IGxpdmU7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IG1vZGFs
OwogICAgIGF0dHJpYnV0ZSBib29sZWFuPyBtdWx0aWxpbmU7CiAgICAgYXR0cmlidXRlIGJvb2xl
YW4/IG11bHRpc2VsZWN0YWJsZTsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBvcmllbnRhdGlv
bjsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBwbGFjZWhvbGRlcjsKKyAgICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZz8gcG9zSW5TZXQ7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcHJlc3Nl
ZDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gcmVhZE9ubHk7CiAgICAgYXR0cmlidXRlIERPTVN0
cmluZz8gcmVsZXZhbnQ7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHJlcXVpcmVkOwogICAgIGF0
dHJpYnV0ZSBET01TdHJpbmc/IHJvbGU7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gcm9sZURl
c2NyaXB0aW9uOworICAgIGF0dHJpYnV0ZSBsb25nPyByb3dDb3VudDsKKyAgICBhdHRyaWJ1dGUg
dW5zaWduZWQgbG9uZz8gcm93SW5kZXg7CisgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IHJv
d1NwYW47CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IHNlbGVjdGVkOworICAgIGF0dHJpYnV0ZSBs
b25nPyBzZXRTaXplOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IHNvcnQ7CisgICAgYXR0cmli
dXRlIGRvdWJsZT8gdmFsdWVNYXg7CisgICAgYXR0cmlidXRlIGRvdWJsZT8gdmFsdWVNaW47Cisg
ICAgYXR0cmlidXRlIGRvdWJsZT8gdmFsdWVOb3c7CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8g
dmFsdWVUZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNw
cAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUy
LDcgKzE1Miw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5Db2wKICAg
ICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBpZiAoaW50IGNvbHVtbkNvdW50ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlPigqYWNjVGFibGUpLmFyaWFDb2x1bW5Db3VudCgpKQorICAgIGlmIChpbnQgY29sdW1uQ291
bnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuYXhDb2x1bW5Db3Vu
dCgpKQogICAgICAgICByZXR1cm4gY29sdW1uQ291bnQ7CiAKICAgICByZXR1cm4gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmNvbHVtbkNvdW50KCk7CkBAIC0xNjcsNyAr
MTY3LDcgQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TlJvdwogICAgIGlm
ICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIGlmIChpbnQgcm93Q291bnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCph
Y2NUYWJsZSkuYXJpYVJvd0NvdW50KCkpCisgICAgaWYgKGludCByb3dDb3VudCA9IGRvd25jYXN0
PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKS5heFJvd0NvdW50KCkpCiAgICAgICAgIHJl
dHVybiByb3dDb3VudDsKIAogICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+
KCphY2NUYWJsZSkucm93Q291bnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIwLDcgKzEyMCw3IEBAIGdib29sZWFuIHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUNlbGxHZXRQb3MKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjb2x1
bW5Sb3dSYW5nZTsKICAgICBpZiAocm93KSB7CiAgICAgICAgIC8vIGFyaWEtcm93aW5kZXggaXMg
MS1iYXNlZC4KLSAgICAgICAgaW50IHJvd0luZGV4ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRh
YmxlQ2VsbD4oKmF4T2JqZWN0KS5hcmlhUm93SW5kZXgoKSAtIDE7CisgICAgICAgIGludCByb3dJ
bmRleCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCpheE9iamVjdCkuYXhSb3dJ
bmRleCgpIC0gMTsKICAgICAgICAgaWYgKHJvd0luZGV4IDw9IC0xKSB7CiAgICAgICAgICAgICBk
b3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLnJvd0luZGV4UmFuZ2Uo
Y29sdW1uUm93UmFuZ2UpOwogICAgICAgICAgICAgcm93SW5kZXggPSBjb2x1bW5Sb3dSYW5nZS5m
aXJzdDsKQEAgLTEyOSw3ICsxMjksNyBAQCBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVD
ZWxsR2V0UG9zCiAgICAgfQogICAgIGlmIChjb2x1bW4pIHsKICAgICAgICAgLy8gYXJpYS1jb2xp
bmRleCBpcyAxLWJhc2VkLgotICAgICAgICBpbnQgY29sdW1uSW5kZXggPSBkb3duY2FzdDxBY2Nl
c3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmFyaWFDb2x1bW5JbmRleCgpIC0gMTsKKyAg
ICAgICAgaW50IGNvbHVtbkluZGV4ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4o
KmF4T2JqZWN0KS5heENvbHVtbkluZGV4KCkgLSAxOwogICAgICAgICBpZiAoY29sdW1uSW5kZXgg
PD0gLTEpIHsKICAgICAgICAgICAgIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KCph
eE9iamVjdCkuY29sdW1uSW5kZXhSYW5nZShjb2x1bW5Sb3dSYW5nZSk7CiAgICAgICAgICAgICBj
b2x1bW5JbmRleCA9IGNvbHVtblJvd1JhbmdlLmZpcnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVX
cmFwcGVyQXRrLmNwcAkocmV2aXNpb24gMjI0OTk5KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVdyYXBwZXJBdGsuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NjQsMzMgKzQ2NCwzMyBAQCBzdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRBY2Nl
c3NpYmxlCiAKICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCkgJiYg
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCkuaXNFeHBvc2FibGVUaHJv
dWdoQWNjZXNzaWJpbGl0eSgpKSB7CiAgICAgICAgIGF1dG8mIHRhYmxlID0gZG93bmNhc3Q8QWNj
ZXNzaWJpbGl0eVRhYmxlPigqY29yZU9iamVjdCk7Ci0gICAgICAgIGludCByb3dDb3VudCA9IHRh
YmxlLmFyaWFSb3dDb3VudCgpOworICAgICAgICBpbnQgcm93Q291bnQgPSB0YWJsZS5heFJvd0Nv
dW50KCk7CiAgICAgICAgIGlmIChyb3dDb3VudCkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9
IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2NvdW50IiwgU3RyaW5nOjpu
dW1iZXIocm93Q291bnQpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGludCBjb2x1bW5Db3Vu
dCA9IHRhYmxlLmFyaWFDb2x1bW5Db3VudCgpOworICAgICAgICBpbnQgY29sdW1uQ291bnQgPSB0
YWJsZS5heENvbHVtbkNvdW50KCk7CiAgICAgICAgIGlmIChjb2x1bW5Db3VudCkKICAgICAgICAg
ICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgImNv
bGNvdW50IiwgU3RyaW5nOjpudW1iZXIoY29sdW1uQ291bnQpLnV0ZjgoKS5kYXRhKCkpOwogICAg
IH0gZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY29yZU9iamVjdCkpIHsKICAg
ICAgICAgYXV0byYgcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlUm93PigqY29yZU9i
amVjdCk7Ci0gICAgICAgIGludCByb3dJbmRleCA9IHJvdy5hcmlhUm93SW5kZXgoKTsKKyAgICAg
ICAgaW50IHJvd0luZGV4ID0gcm93LmF4Um93SW5kZXgoKTsKICAgICAgICAgaWYgKHJvd0luZGV4
ICE9IC0xKQogICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
YXR0cmlidXRlU2V0LCAicm93aW5kZXgiLCBTdHJpbmc6Om51bWJlcihyb3dJbmRleCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgfSBlbHNlIGlmIChpczxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY29y
ZU9iamVjdCkpIHsKICAgICAgICAgYXV0byYgY2VsbCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw+KCpjb3JlT2JqZWN0KTsKLSAgICAgICAgaW50IHJvd0luZGV4ID0gY2VsbC5hcmlh
Um93SW5kZXgoKTsKKyAgICAgICAgaW50IHJvd0luZGV4ID0gY2VsbC5heFJvd0luZGV4KCk7CiAg
ICAgICAgIGlmIChyb3dJbmRleCAhPSAtMSkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2luZGV4IiwgU3RyaW5nOjpudW1i
ZXIocm93SW5kZXgpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGludCBjb2x1bW5JbmRleCA9
IGNlbGwuYXJpYUNvbHVtbkluZGV4KCk7CisgICAgICAgIGludCBjb2x1bW5JbmRleCA9IGNlbGwu
YXhDb2x1bW5JbmRleCgpOwogICAgICAgICBpZiAoY29sdW1uSW5kZXggIT0gLTEpCiAgICAgICAg
ICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJj
b2xpbmRleCIsIFN0cmluZzo6bnVtYmVyKGNvbHVtbkluZGV4KS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgICAgICBpbnQgcm93U3BhbiA9IGNlbGwuYXJpYVJvd1NwYW4oKTsKKyAgICAgICAgaW50IHJv
d1NwYW4gPSBjZWxsLmF4Um93U3BhbigpOwogICAgICAgICBpZiAocm93U3BhbiAhPSAtMSkKICAg
ICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNl
dCwgInJvd3NwYW4iLCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKS51dGY4KCkuZGF0YSgpKTsKIAot
ICAgICAgICBpbnQgY29sdW1uU3BhbiA9IGNlbGwuYXJpYUNvbHVtblNwYW4oKTsKKyAgICAgICAg
aW50IGNvbHVtblNwYW4gPSBjZWxsLmF4Q29sdW1uU3BhbigpOwogICAgICAgICBpZiAoY29sdW1u
U3BhbiAhPSAtMSkKICAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRl
U2V0KGF0dHJpYnV0ZVNldCwgImNvbHNwYW4iLCBTdHJpbmc6Om51bWJlcihjb2x1bW5TcGFuKS51
dGY4KCkuZGF0YSgpKTsKICAgICB9CkBAIC01MjcsMTEgKzUyNywxMSBAQCBzdGF0aWMgQXRrQXR0
cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
Y29yZU9iamVjdC0+c3VwcG9ydHNBUklBUG9zSW5TZXQoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAicG9zaW5zZXQiLCBTdHJpbmc6
Om51bWJlcihjb3JlT2JqZWN0LT5hcmlhUG9zSW5TZXQoKSkudXRmOCgpLmRhdGEoKSk7CisgICAg
aWYgKGNvcmVPYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKKyAgICAgICAgYXR0cmlidXRlU2V0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAicG9zaW5zZXQiLCBTdHJpbmc6
Om51bWJlcihjb3JlT2JqZWN0LT5wb3NJblNldCgpKS51dGY4KCkuZGF0YSgpKTsKIAotICAgIGlm
IChjb3JlT2JqZWN0LT5zdXBwb3J0c0FSSUFTZXRTaXplKCkpCi0gICAgICAgIGF0dHJpYnV0ZVNl
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInNldHNpemUiLCBTdHJpbmc6
Om51bWJlcihjb3JlT2JqZWN0LT5hcmlhU2V0U2l6ZSgpKS51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAoY29yZU9iamVjdC0+c3VwcG9ydHNTZXRTaXplKCkpCisgICAgICAgIGF0dHJpYnV0ZVNldCA9
IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInNldHNpemUiLCBTdHJpbmc6Om51
bWJlcihjb3JlT2JqZWN0LT5zZXRTaXplKCkpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgU3RyaW5n
IGlzUmVhZE9ubHkgPSBjb3JlT2JqZWN0LT5yZWFkT25seVZhbHVlKCk7CiAgICAgaWYgKCFpc1Jl
YWRPbmx5LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
SU9TLm1tCShyZXZpc2lvbiAyMjQ5OTkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMTI3NCw3ICsxMjc0LDcgQEAgLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QVJJQVJvd0Nv
dW50CiAgICAgaWYgKCF0YWJsZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgTlNJbnRl
Z2VyIHJvd0NvdW50ID0gdGFibGUtPmFyaWFSb3dDb3VudCgpOworICAgIE5TSW50ZWdlciByb3dD
b3VudCA9IHRhYmxlLT5heFJvd0NvdW50KCk7CiAgICAgcmV0dXJuIHJvd0NvdW50ID4gMCA/IHJv
d0NvdW50IDogMDsKIH0KIApAQCAtMTI4Niw3ICsxMjg2LDcgQEAgLSAoTlNVSW50ZWdlcilhY2Nl
c3NpYmlsaXR5QVJJQUNvbHVtbkNvdQogICAgIGlmICghdGFibGUpCiAgICAgICAgIHJldHVybiAw
OwogICAgIAotICAgIE5TSW50ZWdlciBjb2xDb3VudCA9IHRhYmxlLT5hcmlhQ29sdW1uQ291bnQo
KTsKKyAgICBOU0ludGVnZXIgY29sQ291bnQgPSB0YWJsZS0+YXhDb2x1bW5Db3VudCgpOwogICAg
IHJldHVybiBjb2xDb3VudCA+IDAgPyBjb2xDb3VudCA6IDA7CiB9CiAKQEAgLTEyOTgsNyArMTI5
OCw3IEBAIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFSSUFSb3dJbmRleAogICAgIGlmICgh
dGFibGVDZWxsKQogICAgICAgICByZXR1cm4gTlNOb3RGb3VuZDsKICAgICAKLSAgICBOU0ludGVn
ZXIgcm93SW5kZXggPSB0YWJsZUNlbGwtPmFyaWFSb3dJbmRleCgpOworICAgIE5TSW50ZWdlciBy
b3dJbmRleCA9IHRhYmxlQ2VsbC0+YXhSb3dJbmRleCgpOwogICAgIHJldHVybiByb3dJbmRleCA+
IDAgPyByb3dJbmRleCA6IE5TTm90Rm91bmQ7CiB9CiAKQEAgLTEzMTAsNyArMTMxMCw3IEBAIC0g
KE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmQKICAgICBpZiAoIXRhYmxlQ2Vs
bCkKICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiAgICAgCi0gICAgTlNJbnRlZ2VyIGNvbHVt
bkluZGV4ID0gdGFibGVDZWxsLT5hcmlhQ29sdW1uSW5kZXgoKTsKKyAgICBOU0ludGVnZXIgY29s
dW1uSW5kZXggPSB0YWJsZUNlbGwtPmF4Q29sdW1uSW5kZXgoKTsKICAgICByZXR1cm4gY29sdW1u
SW5kZXggPiAwID8gY29sdW1uSW5kZXggOiBOU05vdEZvdW5kOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2aXNpb24gMjI0OTk5KQorKysgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbXBvcnQgIkFjY2Vz
c2liaWxpdHlUYWJsZUNlbGwuaCIKICNpbXBvcnQgIkFjY2Vzc2liaWxpdHlUYWJsZUNvbHVtbi5o
IgogI2ltcG9ydCAiQWNjZXNzaWJpbGl0eVRhYmxlUm93LmgiCisjaW1wb3J0ICJBY2Nlc3NpYmxl
Tm9kZS5oIgogI2ltcG9ydCAiQ2hyb21lLmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNp
bXBvcnQgIkNvbG9yTWFjLmgiCkBAIC0xMTkyLDkgKzExOTMsOSBAQCAtIChOU0FycmF5KilhZGRp
dGlvbmFsQWNjZXNzaWJpbGl0eUF0dHJpCiAgICAgICAgIFthZGRpdGlvbmFsIGFkZE9iamVjdDpO
U0FjY2Vzc2liaWxpdHlBUklBUmVsZXZhbnRBdHRyaWJ1dGVdOwogICAgIH0KICAgICAKLSAgICBp
ZiAobV9vYmplY3QtPnN1cHBvcnRzQVJJQVNldFNpemUoKSkKKyAgICBpZiAobV9vYmplY3QtPnN1
cHBvcnRzU2V0U2l6ZSgpKQogICAgICAgICBbYWRkaXRpb25hbCBhZGRPYmplY3Q6TlNBY2Nlc3Np
YmlsaXR5QVJJQVNldFNpemVBdHRyaWJ1dGVdOwotICAgIGlmIChtX29iamVjdC0+c3VwcG9ydHNB
UklBUG9zSW5TZXQoKSkKKyAgICBpZiAobV9vYmplY3QtPnN1cHBvcnRzUG9zSW5TZXQoKSkKICAg
ICAgICAgW2FkZGl0aW9uYWwgYWRkT2JqZWN0Ok5TQWNjZXNzaWJpbGl0eUFSSUFQb3NJblNldEF0
dHJpYnV0ZV07CiAgICAgCiAgICAgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb24gc29ydERpcmVj
dGlvbiA9IG1fb2JqZWN0LT5zb3J0RGlyZWN0aW9uKCk7CkBAIC0yNjY4LDE0ICsyNjY5LDE0IEBA
IC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAKICAgICBpZiAo
W2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNaW5WYWx1ZUF0
dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0b3Ig
c2hvdWxkIHJldHVybiAwLgotICAgICAgICBpZiAobV9vYmplY3QtPmFyaWFSb2xlQXR0cmlidXRl
KCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFtX29iamVjdC0+
aGFzQXR0cmlidXRlKGFyaWFfdmFsdWVub3dBdHRyKSkKKyAgICAgICAgaWYgKG1fb2JqZWN0LT5h
cmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGljYXRv
ciAmJiAhbV9vYmplY3QtPmhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykpCiAg
ICAgICAgICAgICByZXR1cm4gQDA7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0
aEZsb2F0Om1fb2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCldOwogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOiBOU0FjY2Vzc2liaWxpdHlNYXhWYWx1
ZUF0dHJpYnV0ZV0pIHsKICAgICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwcm9ncmVzcyBpbmRpY2F0
b3Igc2hvdWxkIHJldHVybiAwLgotICAgICAgICBpZiAobV9vYmplY3QtPmFyaWFSb2xlQXR0cmli
dXRlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByb2dyZXNzSW5kaWNhdG9yICYmICFtX29iamVj
dC0+aGFzQXR0cmlidXRlKGFyaWFfdmFsdWVub3dBdHRyKSkKKyAgICAgICAgaWYgKG1fb2JqZWN0
LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpQcm9ncmVzc0luZGlj
YXRvciAmJiAhbV9vYmplY3QtPmhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpWYWx1ZU5vdykp
CiAgICAgICAgICAgICByZXR1cm4gQDA7CiAgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVy
V2l0aEZsb2F0Om1fb2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCldOwogICAgIH0KQEAgLTI4MTIs
MTAgKzI4MTMsMTAgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgog
ICAgICAgICAgICAgcmV0dXJuIEAodGFibGUucm93Q291bnQoKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFD
b2x1bW5Db3VudEF0dHJpYnV0ZV0pCi0gICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5hcmlhQ29s
dW1uQ291bnQoKSk7CisgICAgICAgICAgICByZXR1cm4gQCh0YWJsZS5heENvbHVtbkNvdW50KCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpO
U0FjY2Vzc2liaWxpdHlBUklBUm93Q291bnRBdHRyaWJ1dGVdKQotICAgICAgICAgICAgcmV0dXJu
IEAodGFibGUuYXJpYVJvd0NvdW50KCkpOworICAgICAgICAgICAgcmV0dXJuIEAodGFibGUuYXhS
b3dDb3VudCgpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJsZUNv
bHVtbj4oKm1fb2JqZWN0KSkgewpAQCAtMjg1OSwxMCArMjg2MCwxMCBAQCAtIChpZClhY2Nlc3Np
YmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICByZXR1cm4gY29udmVydFRv
TlNBcnJheShyb3dIZWFkZXJzKTsKICAgICAgICAgfQogICAgICAgICBpZiAoW2F0dHJpYnV0ZU5h
bWUgaXNFcXVhbFRvU3RyaW5nOk5TQWNjZXNzaWJpbGl0eUFSSUFDb2x1bW5JbmRleEF0dHJpYnV0
ZV0pCi0gICAgICAgICAgICByZXR1cm4gQChjZWxsLmFyaWFDb2x1bW5JbmRleCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiBAKGNlbGwuYXhDb2x1bW5JbmRleCgpKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVJv
d0luZGV4QXR0cmlidXRlXSkKLSAgICAgICAgICAgIHJldHVybiBAKGNlbGwuYXJpYVJvd0luZGV4
KCkpOworICAgICAgICAgICAgcmV0dXJuIEAoY2VsbC5heFJvd0luZGV4KCkpOwogICAgIH0KICAg
ICAKICAgICBpZiAobV9vYmplY3QtPmlzVHJlZSgpKSB7CkBAIC0zMDU3LDkgKzMwNTgsOSBAQCAt
IChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAgIAogICAg
IGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6TlNBY2Nlc3NpYmlsaXR5QVJJQVBv
c0luU2V0QXR0cmlidXRlXSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoSW50
Om1fb2JqZWN0LT5hcmlhUG9zSW5TZXQoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVt
YmVyV2l0aEludDptX29iamVjdC0+cG9zSW5TZXQoKV07CiAgICAgaWYgKFthdHRyaWJ1dGVOYW1l
IGlzRXF1YWxUb1N0cmluZzpOU0FjY2Vzc2liaWxpdHlBUklBU2V0U2l6ZUF0dHJpYnV0ZV0pCi0g
ICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+YXJpYVNldFNp
emUoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEludDptX29iamVjdC0+
c2V0U2l6ZSgpXTsKICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5n
Ok5TQWNjZXNzaWJpbGl0eUdyYWJiZWRBdHRyaWJ1dGVdKQogICAgICAgICByZXR1cm4gW05TTnVt
YmVyIG51bWJlcldpdGhCb29sOm1fb2JqZWN0LT5pc0FSSUFHcmFiYmVkKCldOwpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjI0OTk5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMTEtMTggIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNv
bT4KKworICAgICAgICBBWDogQU9NOiBJbXBsZW1lbnQgbnVtYmVyIHR5cGUgcHJvcGVydGllcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NDk3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbDogQWRk
ZWQuCisKIDIwMTctMTEtMTcgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAK
ICAgICAgICAgTWFyayBzdmcvaW4taHRtbC9ieS1yZWZlcmVuY2UuaHRtbCBhcyBmbGFreSBvbiBp
T1MuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3Bl
cnRpZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL0FPTS1udW1iZXItcHJvcGVydGllcy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLW51bWJlci1wcm9wZXJ0aWVzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACitGaXJzdCBOYW1lCitU
aGlzIHRlc3RzIG51bWJlciB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRp
ZXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1Rlc3QgQU9NIG51bWJlciBw
cm9wZXJ0aWVzIGNhbiBiZSBjbGVhcmVkLgorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFY
VmFsdWU6IDUiCitQQVNTIG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVOb3cgaXMgbnVsbAorUEFT
UyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IDYiCitQQVNTIG5vZGUuYWNjZXNzaWJs
ZU5vZGUudmFsdWVOb3cgaXMgbnVsbAorUEFTUyBheE5vZGUuc3RyaW5nVmFsdWUgaXMgIkFYVmFs
dWU6IDUiCisKK1ZhbHVlTWF4LCBWYWx1ZU1pbiBhbmQgVmFsdWVOb3cgc3VwcG9ydAorUEFTUyBh
eE5vZGUubWF4VmFsdWUgaXMgMTAwCitQQVNTIGF4Tm9kZS5pbnRWYWx1ZSBpcyA1CitQQVNTIGF4
Tm9kZS5taW5WYWx1ZSBpcyAwCitQQVNTIGF4Tm9kZS5tYXhWYWx1ZSBpcyAyMAorUEFTUyBheE5v
ZGUuaW50VmFsdWUgaXMgMTUKK1BBU1MgYXhOb2RlLm1pblZhbHVlIGlzIDEwCisKK1RhYmxlIHJl
bGF0ZWQgcHJvcGVydGllcyBzdXBwb3J0CitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1
ZSgnQVhBUklBQ29sdW1uQ291bnQnKSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVW
YWx1ZSgnQVhBUklBUm93Q291bnQnKSBpcyAwCitQQVNTIGF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVW
YWx1ZSgnQVhBUklBQ29sdW1uQ291bnQnKSBpcyAxNgorUEFTUyBheE5vZGUubnVtYmVyQXR0cmli
dXRlVmFsdWUoJ0FYQVJJQVJvd0NvdW50JykgaXMgMzAKK1BBU1MgYXhOb2RlLmNvbHVtbkluZGV4
UmFuZ2UoKSBpcyAnezAsIDF9JworUEFTUyBheE5vZGUucm93SW5kZXhSYW5nZSgpIGlzICd7MCwg
MX0nCitQQVNTIGF4Tm9kZS5jb2x1bW5JbmRleFJhbmdlKCkgaXMgJ3swLCAyfScKK1BBU1MgYXhO
b2RlLnJvd0luZGV4UmFuZ2UoKSBpcyAnezAsIDN9JworUEFTUyBheE5vZGUubnVtYmVyQXR0cmli
dXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkluZGV4JykgaXMgLTEKK1BBU1MgYXhOb2RlLm51bWJlckF0
dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dJbmRleCcpIGlzIC0xCitQQVNTIGF4Tm9kZS5udW1iZXJB
dHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29sdW1uSW5kZXgnKSBpcyAxCitQQVNTIGF4Tm9kZS5udW1i
ZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93SW5kZXgnKSBpcyAyCisKK0xldmVsIHN1cHBvcnQK
K1BBU1MgYXhOb2RlLmludFZhbHVlIGlzIDIKK1BBU1MgYXhOb2RlLmludFZhbHVlIGlzIDYKKwor
UG9zSW5TZXQgYW5kIFNldFNpemUgc3VwcG9ydAorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRl
VmFsdWUoJ0FYQVJJQVBvc0luU2V0JykgaXMgOQorUEFTUyBheE5vZGUubnVtYmVyQXR0cmlidXRl
VmFsdWUoJ0FYQVJJQVNldFNpemUnKSBpcyAxMAorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXByb3BlcnRpZXMuaHRtbAkobm9u
ZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tbnVtYmVyLXBy
b3BlcnRpZXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBF
IEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2FjY2Vz
c2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IHJv
bGU9InNsaWRlciIgaWQ9InNsaWRlciIgYXJpYS12YWx1ZW5vdz0iNSI+PC9kaXY+CisKKzxkaXYg
aWQ9ImdyaWQiIHJvbGU9ImdyaWQiPgorICA8ZGl2IHJvbGU9InJvd2dyb3VwIj4KKyAgICA8ZGl2
IHJvbGU9InJvdyI+CisgICAgICA8c3BhbiBpZD0iY2VsbCIgcm9sZT0iY29sdW1uaGVhZGVyIj5G
aXJzdCBOYW1lPC9zcGFuPgorICAgIDwvZGl2PgorICA8L2Rpdj4KKzwvZGl2PgorCis8aCByb2xl
PSJoZWFkaW5nIiBpZD0iaGVhZGluZyI+Cis8ZGl2IHJvbGU9Imxpc3QiPgorPGRpdiByb2xlPSJs
aXN0aXRlbSIgaWQ9Imxpc3RpdGVtIj48L2Rpdj4KKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorICAgIGRlc2Ny
aXB0aW9uKCJUaGlzIHRlc3RzIG51bWJlciB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVs
IHByb3BlcnRpZXMuIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikg
eworICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAgdmFyIGF4Tm9kZTsKKworICAgICAgICB0ZXN0
Q2xlYXJOdW1iZXJQcm9wZXJ0eSgpOworICAgICAgICB0ZXN0UmFuZ2VQcm9wZXJ0aWVzKCk7Cisg
ICAgICAgIHRlc3RUYWJsZVByb3BlcnRpZXMoKTsKKyAgICAgICAgdGVzdExldmVsKCk7CisgICAg
ICAgIHRlc3RMaXN0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdENsZWFyTnVtYmVyUHJv
cGVydHkoKSB7CisgICAgICAgIGRlYnVnKCJcblRlc3QgQU9NIG51bWJlciBwcm9wZXJ0aWVzIGNh
biBiZSBjbGVhcmVkLiIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InNsaWRlciIpOworICAgICAgICBheE5vZGUgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nl
c3NpYmxlRWxlbWVudEJ5SWQoInNsaWRlciIpOworICAgICAgICAvLyBOdW1iZXIgdmFsdWUgc2hv
dWxkIGJlIG51bGwgaWYgbm90IHNldC4KKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJh
eE5vZGUuc3RyaW5nVmFsdWUiLCAiQVhWYWx1ZTogNSIpOworICAgICAgICBzaG91bGRCZU51bGwo
Im5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVOb3ciKTsKKyAgICAgICAgLy8gU2V0IHRoZSBBT00g
cHJvcGVydHkKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS52YWx1ZU5vdyA9IDY7CisgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiYXhOb2RlLnN0cmluZ1ZhbHVlIiwgIkFYVmFsdWU6
IDYiKTsKKyAgICAgICAgLy8gQ2xlYXIgdGhlIEFPTSBwcm9wZXJ0eQorICAgICAgICBub2RlLmFj
Y2Vzc2libGVOb2RlLnZhbHVlTm93ID0gbnVsbDsKKyAgICAgICAgc2hvdWxkQmVOdWxsKCJub2Rl
LmFjY2Vzc2libGVOb2RlLnZhbHVlTm93Iik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiYXhOb2RlLnN0cmluZ1ZhbHVlIiwgIkFYVmFsdWU6IDUiKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiB0ZXN0UmFuZ2VQcm9wZXJ0aWVzKCkgeworICAgICAgICBkZWJ1ZygiXG5WYWx1ZU1heCwg
VmFsdWVNaW4gYW5kIFZhbHVlTm93IHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJzbGlkZXIiKTsKKyAgICAgICAgc2hv
dWxkQmUoImF4Tm9kZS5tYXhWYWx1ZSIsICIxMDAiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9k
ZS5pbnRWYWx1ZSIsICI1Iik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubWluVmFsdWUiLCAi
MCIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLnZhbHVlTWF4ID0gMjA7CisgICAgICAg
IG5vZGUuYWNjZXNzaWJsZU5vZGUudmFsdWVOb3cgPSAxNTsKKyAgICAgICAgbm9kZS5hY2Nlc3Np
YmxlTm9kZS52YWx1ZU1pbiA9IDEwOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm1heFZhbHVl
IiwgIjIwIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuaW50VmFsdWUiLCAiMTUiKTsKKyAg
ICAgICAgc2hvdWxkQmUoImF4Tm9kZS5taW5WYWx1ZSIsICIxMCIpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHRlc3RUYWJsZVByb3BlcnRpZXMoKSB7CisgICAgICAgIGRlYnVnKCJcblRhYmxlIHJl
bGF0ZWQgcHJvcGVydGllcyBzdXBwb3J0Iik7CisgICAgICAgIC8vIGNvbENvdW50IGFuZCByb3dD
b3VudAorICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdyaWQiKTsKKyAg
ICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJncmlkIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFs
dWUoJ0FYQVJJQUNvbHVtbkNvdW50JykiLCAiMCIpOworICAgICAgICBzaG91bGRCZSgiYXhOb2Rl
Lm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dDb3VudCcpIiwgIjAiKTsKKyAgICAgICAg
bm9kZS5hY2Nlc3NpYmxlTm9kZS5jb2xDb3VudCA9IDE2OworICAgICAgICBub2RlLmFjY2Vzc2li
bGVOb2RlLnJvd0NvdW50ID0gMzA7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUubnVtYmVyQXR0
cmlidXRlVmFsdWUoJ0FYQVJJQUNvbHVtbkNvdW50JykiLCAiMTYiKTsKKyAgICAgICAgc2hvdWxk
QmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBUm93Q291bnQnKSIsICIzMCIp
OworICAgICAgICAKKyAgICAgICAgLy8gY29sU3BhbiBhbmQgcm93U3BhbgorICAgICAgICBub2Rl
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNlbGwiKTsKKyAgICAgICAgYXhOb2RlID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJjZWxsIik7CisgICAg
ICAgIHNob3VsZEJlKCJheE5vZGUuY29sdW1uSW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7Cisg
ICAgICAgIHNob3VsZEJlKCJheE5vZGUucm93SW5kZXhSYW5nZSgpIiwgIid7MCwgMX0nIik7Cisg
ICAgICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuY29sU3BhbiA9IDI7CisgICAgICAgIG5vZGUuYWNj
ZXNzaWJsZU5vZGUucm93U3BhbiA9IDM7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUuY29sdW1u
SW5kZXhSYW5nZSgpIiwgIid7MCwgMn0nIik7CisgICAgICAgIHNob3VsZEJlKCJheE5vZGUucm93
SW5kZXhSYW5nZSgpIiwgIid7MCwgM30nIik7CisgICAgICAgIAorICAgICAgICAvLyBjb2xJbmRl
eCBhbmQgcm93SW5kZXgKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJBdHRyaWJ1dGVW
YWx1ZSgnQVhBUklBQ29sdW1uSW5kZXgnKSIsICItMSIpOworICAgICAgICBzaG91bGRCZSgiYXhO
b2RlLm51bWJlckF0dHJpYnV0ZVZhbHVlKCdBWEFSSUFSb3dJbmRleCcpIiwgIi0xIik7CisgICAg
ICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuY29sSW5kZXggPSAxOworICAgICAgICBub2RlLmFjY2Vz
c2libGVOb2RlLnJvd0luZGV4ID0gMjsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5udW1iZXJB
dHRyaWJ1dGVWYWx1ZSgnQVhBUklBQ29sdW1uSW5kZXgnKSIsICIxIik7CisgICAgICAgIHNob3Vs
ZEJlKCJheE5vZGUubnVtYmVyQXR0cmlidXRlVmFsdWUoJ0FYQVJJQVJvd0luZGV4JykiLCAiMiIp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RMZXZlbCgpIHsKKyAgICAgICAgZGVidWcoIlxu
TGV2ZWwgc3VwcG9ydCIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImhlYWRpbmciKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJoZWFkaW5nIik7CisgICAgICAgIC8vIFRoZSBpbXBsaWNpdCB2
YWx1ZSBvZiBhcmlhLWxldmVsIGlzIDIgZm9yIHRoZSBoZWFkaW5nIHJvbGUuCisgICAgICAgIHNo
b3VsZEJlKCJheE5vZGUuaW50VmFsdWUiLCAiMiIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVO
b2RlLmxldmVsID0gNjsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9kZS5pbnRWYWx1ZSIsICI2IikK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0TGlzdCgpIHsKKyAgICAgICAgZGVidWcoIlxuUG9z
SW5TZXQgYW5kIFNldFNpemUgc3VwcG9ydCIpOworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImxpc3RpdGVtIik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibGlzdGl0ZW0iKTsKKyAgICAgICAgbm9k
ZS5hY2Nlc3NpYmxlTm9kZS5wb3NJblNldCA9IDk7CisgICAgICAgIG5vZGUuYWNjZXNzaWJsZU5v
ZGUuc2V0U2l6ZSA9IDEwOworICAgICAgICBzaG91bGRCZSgiYXhOb2RlLm51bWJlckF0dHJpYnV0
ZVZhbHVlKCdBWEFSSUFQb3NJblNldCcpIiwgIjkiKTsKKyAgICAgICAgc2hvdWxkQmUoImF4Tm9k
ZS5udW1iZXJBdHRyaWJ1dGVWYWx1ZSgnQVhBUklBU2V0U2l6ZScpIiwgIjEwIik7CisgICAgfQor
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="346558"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>