<?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>52131</bug_id>
          
          <creation_ts>2011-01-09 09:49:55 -0800</creation_ts>
          <short_desc>Move MathML renderer to rendering/mathml</short_desc>
          <delta_ts>2011-01-09 11:14:25 -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>MathML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>331445</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 09:49:55 -0800</bug_when>
    <thetext>Move MathML renderer to rendering/mathml</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331446</commentid>
    <comment_count>1</comment_count>
      <attachid>78352</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 09:55:24 -0800</bug_when>
    <thetext>Created attachment 78352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331451</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 10:43:40 -0800</bug_when>
    <thetext>The patch can be applied to trunk, the Mac-EWS bot is just not in sync with trunk. Run into that problem multiple times now. It builds on my Mac locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331455</commentid>
    <comment_count>3</comment_count>
      <attachid>78352</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2011-01-09 11:00:02 -0800</bug_when>
    <thetext>Comment on attachment 78352
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331457</commentid>
    <comment_count>4</comment_count>
      <attachid>78352</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 11:14:15 -0800</bug_when>
    <thetext>Comment on attachment 78352
Patch

Clearing flags on attachment: 78352

Committed r75353: &lt;http://trac.webkit.org/changeset/75353&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>331458</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2011-01-09 11:14:25 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78352</attachid>
            <date>2011-01-09 09:55:24 -0800</date>
            <delta_ts>2011-01-09 11:14:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52131-20110109185519.patch</filename>
            <type>text/plain</type>
            <size>262715</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1MzUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDEtMDkgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBNb3ZlIE1hdGhNTCByZW5kZXJlciB0byByZW5kZXJpbmcvbWF0aG1s
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjEzMQor
CisgICAgICAgIE1vdmUgYWxsIHJlbmRlcmVyIG9mIE1hdGhNTCB0byBXZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwKKworICAgICAgICBObyBjaGFuZ2Ugb2YgZnVuY3Rpb25hbGl0eSwgbm8gbmV3IHRl
c3RzIGFkZGVkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJv
OgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBtYXRobWwvUmVuZGVy
TWF0aE1MQmxvY2suY3BwOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxC
bG9jay5oOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOiBSZW1vdmVkLgorICAgICAg
ICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBtYXRo
bWwvUmVuZGVyTWF0aE1MTWF0aC5oOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhN
TE9wZXJhdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFJvb3Qu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRoTUxSb290Lmg6IFJlbW92
ZWQuCisgICAgICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHA6IFJlbW92ZWQuCisgICAg
ICAgICogbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGht
bC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBtYXRobWwv
UmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5k
ZXJNYXRoTUxTdWJTdXAuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIG1hdGhtbC9SZW5kZXJNYXRo
TUxTdWJTdXAuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJP
dmVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBtYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVy
Lmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbDogQWRkZWQuCisgICAgICAg
ICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAuCisgICAgICAgICogcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRmVuY2VkLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxGZW5jZWQuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEZyYWN0aW9uLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRl
ck1hdGhNTEZyYWN0aW9uLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTEZyYWN0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJN
YXRoTUxGcmFjdGlvbi5oLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
TWF0aC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxN
YXRoLmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguaDog
Q29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguaC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcC4KKyAg
ICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oLgorICAgICAg
ICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcC4KKyAgICAgICAgKiByZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxSb3cuY3BwLgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MUm93Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxS
b3cuaC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3Qu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdC5jcHAuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVS
b290Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmguCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAu
Y3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3Vw
LmNwcC4KKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmguCisg
ICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcC4K
KyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmguCisK
IDIwMTEtMDEtMDggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CShyZXZpc2lvbiA3NTM1MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSw3IEBAIFNFVChXZWJDb3JlX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyIgog
ICAgICIke1dFQkNPUkVfRElSfS9wbHVnaW5zIgogICAgICIke1dFQkNPUkVfRElSfS9yZW5kZXJp
bmciCisgICAgIiR7V0VCQ09SRV9ESVJ9L3JlbmRlcmluZy9tYXRobWwiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L3JlbmRlcmluZy9zdHlsZSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcmVuZGVyaW5nL3N2
ZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vc3RvcmFnZSIKQEAgLTE2ODgsMTYgKzE2ODksMTYgQEAg
SUYgKEVOQUJMRV9NQVRITUwpCiAgICAgICAgIG1hdGhtbC9NYXRoTUxJbmxpbmVDb250YWluZXJF
bGVtZW50LmNwcAogICAgICAgICBtYXRobWwvTWF0aE1MTWF0aEVsZW1lbnQuY3BwCiAgICAgICAg
IG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5jcHAKLSAgICAgICAgbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmNwcAotICAgICAgICBtYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAotICAgICAg
ICBtYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCi0gICAgICAgIG1hdGhtbC9SZW5kZXJN
YXRoTUxNYXRoLmNwcAotICAgICAgICBtYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCi0g
ICAgICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAotICAgICAgICBtYXRobWwvUmVuZGVy
TWF0aE1MUm93LmNwcAotICAgICAgICBtYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAK
LSAgICAgICAgbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAKLSAgICAgICAgbWF0aG1sL1Jl
bmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKKyAgICAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxCbG9jay5jcHAKKyAgICAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWQuY3BwCisgICAgICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3Bw
CisgICAgICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKKyAgICAgICAg
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAKKyAgICAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAorICAgICAgICByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvdy5jcHAKKyAgICAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxTcXVhcmVSb290LmNwcAorICAgICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1
YlN1cC5jcHAKKyAgICAgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIu
Y3BwCiAgICAgKQogRU5ESUYgKCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHJldmlzaW9u
IDc1MzUxKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0JKHdvcmtpbmcgY29weSkK
QEAgLTU3LDYgKzU3LDcgQEAgd2ViY29yZV9jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcGx1Z2lucyBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGx1Z2lu
cy93aW4gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZyBcCisJLUkkKHNy
Y2RpcikvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbCBcCiAJLUkkKHNyY2RpcikvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlIFwK
QEAgLTIxMjYsMjYgKzIxMjcsNiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL21hdGhtbC9NYXRoTUxNYXRoRWxlbWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9tYXRobWwv
TWF0aE1MVGV4dEVsZW1lbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9tYXRobWwvTWF0aE1MVGV4
dEVsZW1lbnQuaCBcCi0JU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNw
cCBcCi0JU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmggXAotCVNvdXJj
ZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwIFwKLQlTb3VyY2UvV2ViQ29y
ZS9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmggXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJN
YXRoTUxGcmFjdGlvbi5oIFwKLQlTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MTWF0
aC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmggXAotCVNv
dXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oIFwKLQlTb3VyY2UvV2ViQ29yZS9t
YXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5k
ZXJNYXRoTUxSb290LmggXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cu
Y3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmggXAotCVNvdXJj
ZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBcCi0JU291cmNlL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCBcCi0JU291cmNlL1dlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxTdWJTdXAuaCBcCi0JU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRl
ck92ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25DZW50
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNlbnRl
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbkNvbnRlbnRz
LmggXApAQCAtMjg2MCw2ICsyODQxLDI2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2hhZG93RWxlbWVudC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVmVy
dGljYWxQb3NpdGlvbkNhY2hlLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MQmxvY2suY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEJsb2NrLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRmVuY2VkLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGZW5jZWQuaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAgXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmggXAorCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBcCiAJU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0JvcmRlckRhdGEuaCBcCiAJU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL0JvcmRlclZhbHVlLmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9Db2xsYXBzZWRCb3JkZXJWYWx1ZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDc1MzUxKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTkyLDI2ICsyMTkyLDYgQEAKICAgICAgICAgICAgICdtYXRobWwvTWF0aE1MTWF0
aEVsZW1lbnQuaCcsCiAgICAgICAgICAgICAnbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmNwcCcs
CiAgICAgICAgICAgICAnbWF0aG1sL01hdGhNTFRleHRFbGVtZW50LmgnLAotICAgICAgICAgICAg
J21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAnLAotICAgICAgICAgICAgJ21hdGhtbC9SZW5k
ZXJNYXRoTUxCbG9jay5oJywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
LmNwcCcsCi0gICAgICAgICAgICAnbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oJywKLSAgICAg
ICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwJywKLSAgICAgICAgICAgICdt
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCcsCi0gICAgICAgICAgICAnbWF0aG1sL1JlbmRl
ck1hdGhNTE1hdGguY3BwJywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5o
JywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwJywKLSAgICAg
ICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCcsCi0gICAgICAgICAgICAnbWF0
aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwJywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0
aE1MUm9vdC5oJywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcCcsCi0g
ICAgICAgICAgICAnbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oJywKLSAgICAgICAgICAgICdtYXRo
bWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAnLAotICAgICAgICAgICAgJ21hdGhtbC9SZW5k
ZXJNYXRoTUxTcXVhcmVSb290LmgnLAotICAgICAgICAgICAgJ21hdGhtbC9SZW5kZXJNYXRoTUxT
dWJTdXAuY3BwJywKLSAgICAgICAgICAgICdtYXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmgnLAot
ICAgICAgICAgICAgJ21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwJywKLSAgICAgICAg
ICAgICdtYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgnLAogICAgICAgICAgICAgJ25vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcCcsCiAgICAgICAgICAgICAnbm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb24uaCcsCiAgICAgICAgICAgICAnbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25D
ZW50ZXIuY3BwJywKQEAgLTM1OTcsNiArMzU3NywyNiBAQAogICAgICAgICAgICAgJ3BsdWdpbnMv
UGx1Z2luVmlld05vbmUuY3BwJywKICAgICAgICAgICAgICdwbHVnaW5zL25wYXBpLmNwcCcsCiAg
ICAgICAgICAgICAncGx1Z2lucy9ucGZ1bmN0aW9ucy5oJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZyYWN0aW9uLmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9tYXRobWwv
UmVuZGVyTWF0aE1MTWF0aC5jcHAnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MTWF0aC5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmNwcCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxPcGVyYXRvci5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1h
dGhNTFJvb3QuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFJvb3QuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cu
Y3BwJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3Bw
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3Qu
aCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3Bw
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oJywK
KyAgICAgICAgICAgICdyZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgn
LAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJEYXRhLmgnLAogICAgICAgICAg
ICAgJ3JlbmRlcmluZy9zdHlsZS9Cb3JkZXJWYWx1ZS5oJywKICAgICAgICAgICAgICdyZW5kZXJp
bmcvc3R5bGUvQ29sbGFwc2VkQm9yZGVyVmFsdWUuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2
aXNpb24gNzUzNTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMjYyLDYgKzI2Miw3IEBAIFdFQkNPUkVfSU5DTFVERVBBVEggPSBcCiAgICAgJCRQV0Qv
cGxhdGZvcm0vdGV4dC90cmFuc2NvZGVyIFwKICAgICAkJFBXRC9wbHVnaW5zIFwKICAgICAkJFBX
RC9yZW5kZXJpbmcgXAorICAgICQkUFdEL3JlbmRlcmluZy9tYXRobWwgXAogICAgICQkUFdEL3Jl
bmRlcmluZy9zdHlsZSBcCiAgICAgJCRQV0QvcmVuZGVyaW5nL3N2ZyBcCiAgICAgJCRQV0Qvc3Rv
cmFnZSBcCkBAIC0yMDAwLDE2ICsyMDAxLDYgQEAgSEVBREVSUyArPSBcCiAgICAgbWF0aG1sL01h
dGhNTElubGluZUNvbnRhaW5lckVsZW1lbnQuaCBcCiAgICAgbWF0aG1sL01hdGhNTE1hdGhFbGVt
ZW50LmggXAogICAgIG1hdGhtbC9NYXRoTUxUZXh0RWxlbWVudC5oIFwKLSAgICBtYXRobWwvUmVu
ZGVyTWF0aE1MQmxvY2suaCBcCi0gICAgbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oIFwKLSAg
ICBtYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCBcCi0gICAgbWF0aG1sL1JlbmRlck1hdGhN
TE1hdGguaCBcCi0gICAgbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmggXAotICAgIG1hdGht
bC9SZW5kZXJNYXRoTUxSb290LmggXAotICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaCBcCi0g
ICAgbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCBcCi0gICAgbWF0aG1sL1JlbmRlck1h
dGhNTFN1YlN1cC5oIFwKLSAgICBtYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggXAogICAg
IG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmggXAogICAgIG5vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uQ2VudGVyLmggXAogICAgIG5vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUHJlc2VudGVy
LmggXApAQCAtMjI0OCw2ICsyMjM5LDE2IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmggXAogICAgIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggXAogICAgIHJl
bmRlcmluZy9MYXlvdXRTdGF0ZS5oIFwKKyAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEJsb2NrLmggXAorICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmggXAor
ICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCBcCisgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmggXAorICAgIHJlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MT3BlcmF0b3IuaCBcCisgICAgcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxS
b290LmggXAorICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmggXAorICAgIHJl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIFwKKyAgICByZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oIFwKKyAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFVuZGVyT3Zlci5oIFwKICAgICByZW5kZXJpbmcvTWVkaWFDb250cm9sRWxlbWVudHMu
aCBcCiAgICAgcmVuZGVyaW5nL1BhaW50SW5mby5oIFwKICAgICByZW5kZXJpbmcvUGFpbnRQaGFz
ZS5oIFwKQEAgLTMzNDUsMTYgKzMzNDYsMTYgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX01B
VEhNTD0xKSB7CiAgICAgICAgIG1hdGhtbC9NYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNw
cCBcCiAgICAgICAgIG1hdGhtbC9NYXRoTUxNYXRoRWxlbWVudC5jcHAgXAogICAgICAgICBtYXRo
bWwvTWF0aE1MVGV4dEVsZW1lbnQuY3BwIFwKLSAgICAgICAgbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcCBcCi0gICAgICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwIFwKLSAgICAg
ICAgbWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcCBcCi0gICAgICAgIG1hdGhtbC9SZW5k
ZXJNYXRoTUxNYXRoLmNwcCBcCi0gICAgICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5j
cHAgXAotICAgICAgICBtYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAgXAotICAgICAgICBtYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcCBcCi0gICAgICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxTcXVh
cmVSb290LmNwcCBcCi0gICAgICAgIG1hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwIFwKLSAg
ICAgICAgbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAKKyAgICAgICAgcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAgXAorICAgICAgICByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZlbmNlZC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZyYWN0aW9uLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0
aE1MTWF0aC5jcHAgXAorICAgICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcCBcCisgICAgICAgIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAg
XAorICAgICAgICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAgXAorICAgICAg
ICByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIFwKKyAgICAgICAg
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwIFwKKyAgICAgICAgcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCiB9CiAKIGNvbnRhaW5zKERFRklO
RVMsIEVOQUJMRV9XTUw9MSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4NDEyLDYgKzM4
NDEyLDkwIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbHRlcgorCQkJICAgIE5hbWU9Im1h
dGhtbCIKKwkJCSAgICA+CisJCQkgICAgPEZpbGUKKwkJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxy
ZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTEJsb2NrLmNwcCIKKwkJCQkgICAgPgorCQkJICAg
IDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmlu
Z1xtYXRobWxcUmVuZGVyTWF0aE1MQmxvY2suaCIKKwkJCQkgICAgPgorCQkJICAgIDwvRmlsZT4K
KwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxc
UmVuZGVyTWF0aE1MRmVuY2VkLmNwcCIKKwkJCQkgICAgPgorCQkJICAgIDwvRmlsZT4KKwkJCSAg
ICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxcUmVuZGVy
TWF0aE1MRmVuY2VkLmgiCisJCQkJICAgID4KKwkJCSAgICA8L0ZpbGU+CisJCQkgICAgPEZpbGUK
KwkJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTEZy
YWN0aW9uLmNwcCIKKwkJCQkgICAgPgorCQkJICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJ
CSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MRnJhY3Rp
b24uaCIKKwkJCQkgICAgPgorCQkJICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MTWF0aC5jcHAiCisJ
CQkJICAgID4KKwkJCSAgICA8L0ZpbGU+CisJCQkgICAgPEZpbGUKKwkJCQkgICAgUmVsYXRpdmVQ
YXRoPSIuLlxyZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTE1hdGguaCIKKwkJCQkgICAgPgor
CQkJICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwIgorCQkJCSAgICA+CisJCQkg
ICAgPC9GaWxlPgorCQkJICAgIDxGaWxlCisJCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVy
aW5nXG1hdGhtbFxSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgorCQkJCSAgICA+CisJCQkgICAgPC9G
aWxlPgorCQkJICAgIDxGaWxlCisJCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXG1h
dGhtbFxSZW5kZXJNYXRoTUxSb290LmNwcCIKKwkJCQkgICAgPgorCQkJICAgIDwvRmlsZT4KKwkJ
CSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxcUmVu
ZGVyTWF0aE1MUm9vdC5oIgorCQkJCSAgICA+CisJCQkgICAgPC9GaWxlPgorCQkJICAgIDxGaWxl
CisJCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXG1hdGhtbFxSZW5kZXJNYXRoTUxS
b3cuY3BwIgorCQkJCSAgICA+CisJCQkgICAgPC9GaWxlPgorCQkJICAgIDxGaWxlCisJCQkJICAg
IFJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXG1hdGhtbFxSZW5kZXJNYXRoTUxSb3cuaCIKKwkJ
CQkgICAgPgorCQkJICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBh
dGg9Ii4uXHJlbmRlcmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAiCisJCQkJ
ICAgID4KKwkJCSAgICA8L0ZpbGU+CisJCQkgICAgPEZpbGUKKwkJCQkgICAgUmVsYXRpdmVQYXRo
PSIuLlxyZW5kZXJpbmdcbWF0aG1sXFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCIKKwkJCQkgICAg
PgorCQkJICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4u
XHJlbmRlcmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MU3ViU3VwLmNwcCIKKwkJCQkgICAgPgorCQkJ
ICAgIDwvRmlsZT4KKwkJCSAgICA8RmlsZQorCQkJCSAgICBSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRl
cmluZ1xtYXRobWxcUmVuZGVyTWF0aE1MU3ViU3VwLmgiCisJCQkJICAgID4KKwkJCSAgICA8L0Zp
bGU+CisJCQkgICAgPEZpbGUKKwkJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcbWF0
aG1sXFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAiCisJCQkJICAgID4KKwkJCSAgICA8L0ZpbGU+
CisJCQkgICAgPEZpbGUKKwkJCQkgICAgUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcbWF0aG1s
XFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oIgorCQkJCSAgICA+CisJCQkgICAgPC9GaWxlPgorCQkJ
PC9GaWx0ZXI+CisJCQk8RmlsdGVyCiAJCQkJTmFtZT0ic3R5bGUiCiAJCQkJPgogCQkJCTxGaWxl
CkBAIC02NjAwNSw4NiArNjYwODksNiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cbWF0aG1sXE1h
dGhNTFRleHRFbGVtZW50LmgiCiAJCQkJPgogCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXG1hdGhtbFxSZW5kZXJNYXRoTUxCbG9jay5jcHAiCi0JCQkJPgotCQkJPC9G
aWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXG1hdGhtbFxSZW5kZXJNYXRoTUxC
bG9jay5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxtYXRobWxcUmVuZGVyTWF0aE1MRmVuY2VkLmNwcCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbWF0aG1sXFJlbmRlck1hdGhNTEZlbmNlZC5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxtYXRobWxc
UmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCIKLQkJCQk+
Ci0JCQk8L0ZpbGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbWF0aG1sXFJlbmRl
ck1hdGhNTE1hdGguY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRp
dmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MTWF0aC5oIgotCQkJCT4KLQkJCTwvRmlsZT4K
LQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MT3BlcmF0
b3IuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIu
LlxtYXRobWxcUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKLQkJCQk+Ci0JCQk8L0ZpbGU+Ci0JCQk8
RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbWF0aG1sXFJlbmRlck1hdGhNTFJvb3QuY3BwIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxtYXRobWxc
UmVuZGVyTWF0aE1MUm9vdC5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVs
YXRpdmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MUm93LmNwcCIKLQkJCQk+Ci0JCQk8L0Zp
bGU+Ci0JCQk8RmlsZQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cbWF0aG1sXFJlbmRlck1hdGhNTFJv
dy5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxt
YXRobWxcUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJ
PEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXG1hdGhtbFxSZW5kZXJNYXRoTUxTcXVhcmVSb290
LmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXG1h
dGhtbFxSZW5kZXJNYXRoTUxTdWJTdXAuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxl
Ci0JCQkJUmVsYXRpdmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MU3ViU3VwLmgiCi0JCQkJ
PgotCQkJPC9GaWxlPgotCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXG1hdGhtbFxSZW5k
ZXJNYXRoTUxVbmRlck92ZXIuY3BwIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCi0JCQkJ
UmVsYXRpdmVQYXRoPSIuLlxtYXRobWxcUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgiCi0JCQkJPgot
CQkJPC9GaWxlPgogCQk8L0ZpbHRlcj4KIAkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cY29u
ZmlnLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NTM1MSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjY2LDggKzI2Niw2
IEBACiAJCTBGNTgwRDAwMEYxMkRFOUIwMDUxRDY4OSAvKiBSZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1ODBDRkMw
RjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2luZy5jcHAgKi87IH07CiAJCTBGNUI3
QTU0MTBGNjVEN0EwMDM3NjMwMiAvKiBSZW5kZXJFbWJlZGRlZE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCN0E1MjEwRjY1RDdBMDAz
NzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwICovOyB9OwogCQkwRjVCN0E1NTEwRjY1
RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUI3QTUzMTBGNjVEN0EwMDM3NjMwMiAvKiBS
ZW5kZXJFbWJlZGRlZE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGNjlCOUM5MTIwRkUxRDYwMDBFMUZDNyAvKiBSZW5kZXJNYXRoTUxG
ZW5jZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2OUI5QzcxMjBGRTFENjAwMEUxRkM3IC8qIFJlbmRlck1hdGhNTEZlbmNlZC5jcHAgKi87IH07
Ci0JCTBGNjlCOUNBMTIwRkUxRDYwMDBFMUZDNyAvKiBSZW5kZXJNYXRoTUxGZW5jZWQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjlCOUM4MTIwRkUx
RDYwMDBFMUZDNyAvKiBSZW5kZXJNYXRoTUxGZW5jZWQuaCAqLzsgfTsKIAkJMEY2RUNENDUwRjI1
MkYzNzAwQkRFMjcxIC8qIENTU1Byb3BlcnR5TG9uZ2hhbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkVDRDQzMEYyNTJGMzcwMEJERTI3MSAvKiBD
U1NQcm9wZXJ0eUxvbmdoYW5kLmggKi87IH07CiAJCTBGNkVDRDQ2MEYyNTJGMzcwMEJERTI3MSAv
KiBDU1NQcm9wZXJ0eUxvbmdoYW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNkVDRDQ0MEYyNTJGMzcwMEJERTI3MSAvKiBDU1NQcm9wZXJ0eUxv
bmdoYW5kLmNwcCAqLzsgfTsKIAkJMEZDRjMzMjQwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRjMz
MjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovOyB9OwpAQCAtMjgxLDEwICsyNzks
NiBAQAogCQkwRkQzMDhENjExN0QxNjg1MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzMDhENDExN0QxNjg0
MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmggKi87IH07CiAJCTBGRDcyMzgyMEVDOEJEOTMwMENB
NURENyAvKiBGbG9hdFF1YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDcyMzgwMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQ3MjM4MzBFQzhC
RDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDcyMzgxMEVDOEJEOTMwMENBNURENyAvKiBGbG9hdFF1YWQu
Y3BwICovOyB9OwotCQkwRkYyODU5MDExODY0MDUyMDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MUm9v
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYy
ODEzMjExODIxQ0I2MDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MUm9vdC5jcHAgKi87IH07Ci0JCTBG
RjI4NTkxMTE4NjQwNTMwMDdCN0NENiAvKiBSZW5kZXJNYXRoTUxSb290LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYyODEzMzExODIxQ0I2MDA3QjdD
RDYgLyogUmVuZGVyTWF0aE1MUm9vdC5oICovOyB9OwotCQkwRkYyODU5MjExODY0MDU0MDA3QjdD
RDYgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYyODEzNDExODIxQ0I2MDA3QjdDRDYgLyogUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdC5jcHAgKi87IH07Ci0JCTBGRjI4NTkzMTE4NjQwNTUwMDdCN0NENiAv
KiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkYyODEzNTExODIxQ0I2MDA3QjdDRDYgLyogUmVuZGVyTWF0aE1M
U3F1YXJlUm9vdC5oICovOyB9OwogCQkwRkY1MDI1QjEwMkJBOTAxMDA2NkYzOUEgLyogRE9NU3R5
bGVNZWRpYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGNTAyNTkxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWEuaCAqLzsgfTsKIAkJMEZG
NTAyNUMxMDJCQTkwMTAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWEubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY1MDI1QTEwMkJBOTAxMDA2NkYzOUEg
LyogRE9NU3R5bGVNZWRpYS5tbSAqLzsgfTsKIAkJMEZGNTAyNjMxMDJCQTkyQzAwNjZGMzlBIC8q
IERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGNTAyNjIxMDJCQTkyQjAwNjZGMzlBIC8qIERPTVN0eWxlTWVkaWFJ
bnRlcm5hbC5oICovOyB9OwpAQCAtMTAwMCw2ICs5OTQsMjYgQEAKIAkJNDM2NzA4RkExMkQ5Q0E0
QjAwMDQ0MjM0IC8qIFNWR1Jlc291cmNlc0N5Y2xlU29sdmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhCQjEyRDlDQTRCMDAwNDQyMzQgLyog
U1ZHUmVzb3VyY2VzQ3ljbGVTb2x2ZXIuaCAqLzsgfTsKIAkJNDM2NzA4RkIxMkQ5Q0E0QjAwMDQ0
MjM0IC8qIFNWR1NoYWRvd1RyZWVFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzY3MDhCQzEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHU2hh
ZG93VHJlZUVsZW1lbnRzLmNwcCAqLzsgfTsKIAkJNDM2NzA4RkMxMkQ5Q0E0QjAwMDQ0MjM0IC8q
IFNWR1NoYWRvd1RyZWVFbGVtZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM2NzA4QkQxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFNWR1NoYWRvd1RyZWVF
bGVtZW50cy5oICovOyB9OworCQk0MzkwNDZENzEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2QzMxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEJsb2NrLmNwcCAqLzsg
fTsKKwkJNDM5MDQ2RDgxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEJsb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZDNDEyREEy
NUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MQmxvY2suaCAqLzsgfTsKKwkJNDM5MDQ2RDkxMkRB
MjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZlbmNlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZDNTEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MRmVuY2VkLmNwcCAqLzsgfTsKKwkJNDM5MDQ2REExMkRBMjVFODAwQUY4MEEy
IC8qIFJlbmRlck1hdGhNTEZlbmNlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDM5MDQ2QzYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZl
bmNlZC5oICovOyB9OworCQk0MzkwNDZEQjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1M
RnJhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDM5MDQ2QzcxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9uLmNwcCAq
LzsgfTsKKwkJNDM5MDQ2REMxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZD
ODEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCAqLzsgfTsKKwkJNDM5
MDQ2REQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE1hdGguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2QzkxMkRBMjVFODAwQUY4
MEEyIC8qIFJlbmRlck1hdGhNTE1hdGguY3BwICovOyB9OworCQk0MzkwNDZERTEyREEyNUU4MDBB
RjgwQTIgLyogUmVuZGVyTWF0aE1MTWF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2Q0ExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TE1hdGguaCAqLzsgfTsKKwkJNDM5MDQ2REYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TE9wZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQzOTA0NkNCMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
Ki87IH07CisJCTQzOTA0NkUwMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxPcGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2
Q0MxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggKi87IH07CisJCTQz
OTA0NkUxMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb290LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkNEMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxSb290LmNwcCAqLzsgfTsKKwkJNDM5MDQ2RTIxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkNFMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRo
TUxSb290LmggKi87IH07CisJCTQzOTA0NkUzMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRo
TUxSb3cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDM5MDQ2Q0YxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvdy5jcHAgKi87IH07CisJ
CTQzOTA0NkU0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb3cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQwMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxSb3cuaCAqLzsgfTsKKwkJNDM5MDQ2RTUxMkRBMjVFODAwQUY4
MEEyIC8qIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFNxdWFyZVJvb3QuY3BwICovOyB9OworCQk0MzkwNDZFNjEyREEyNUU4MDBBRjgwQTIg
LyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2RDIxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFNxdWFyZVJvb3QuaCAqLzsgfTsKKwkJNDM5MDQ2RTcxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFN1YlN1cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0MzkwNDZEMzEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3ViU3VwLmNw
cCAqLzsgfTsKKwkJNDM5MDQ2RTgxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFN1YlN1
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDM5MDQ2
RDQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFN1YlN1cC5oICovOyB9OworCQk0Mzkw
NDZFOTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzOTA0NkQ1MTJEQTI1RTgw
MEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICovOyB9OworCQk0MzkwNDZFQTEy
REEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIg
LyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi87IH07CiAJCTQzQzA5MkJCMTJEOUU0RUUwMEE5
ODlDMyAvKiBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQzQzA5MkI5MTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5k
ZXJTVkdGb3JlaWduT2JqZWN0LmNwcCAqLzsgfTsKIAkJNDNDMDkyQkMxMkQ5RTRFRTAwQTk4OUMz
IC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQzQzA5MkJBMTJEOUU0RUUwMEE5ODlDMyAvKiBSZW5kZXJTVkdG
b3JlaWduT2JqZWN0LmggKi87IH07CiAJCTQ0MTUyOTJFMEUxQUU4QTAwMEM0QTJEMCAvKiBIVE1M
UGx1Z0luSW1hZ2VFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0NDE1MjkyQzBFMUFFOEEwMDBDNEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxl
bWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC01NjU3LDIwICs1NjcxLDggQEAKIAkJRjk4RkZGNDQxMUEyNjc2MjAwRjU0OEU4IC8qIENTU09N
VXRpbHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Rjk4RkZGNDIxMUEyNjc2MjAwRjU0OEU4IC8qIENTU09NVXRpbHMuY3BwICovOyB9OwogCQlGOThG
RkY0NTExQTI2NzYyMDBGNTQ4RTggLyogQ1NTT01VdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjk4RkZGNDMxMUEyNjc2MjAwRjU0OEU4IC8qIENT
U09NVXRpbHMuaCAqLzsgfTsKIAkJRjlGMEVEN0EwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjlGMEVENzcwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudC5oICovOyB9OwotCQlGQTBCMUY4NjExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVy
TWF0aE1MTWF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQTBCMUY4MjExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0aE1MTWF0aC5jcHAgKi87
IH07Ci0JCUZBMEIxRjg3MTExMjVDRUUwMDdGOTgzOSAvKiBSZW5kZXJNYXRoTUxNYXRoLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQTBCMUY4MzExMTI1
Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0aE1MTWF0aC5oICovOyB9OwotCQlGQTBCMUY4ODExMTI1
Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0aE1MUm93LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBMEIxRjg0MTExMjVDRUUwMDdGOTgzOSAvKiBSZW5k
ZXJNYXRoTUxSb3cuY3BwICovOyB9OwotCQlGQTBCMUY4OTExMTI1Q0VFMDA3Rjk4MzkgLyogUmVu
ZGVyTWF0aE1MUm93LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQTBCMUY4NTExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0aE1MUm93LmggKi87IH07
Ci0JCUZBNUZBRTQyMTExMjZBNUQwMEQzNzUwRiAvKiBSZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQTVGQUU0MDEx
MTI2QTVEMDBEMzc1MEYgLyogUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwICovOyB9OwotCQlGQTVG
QUU0MzExMTI2QTVEMDBEMzc1MEYgLyogUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBNUZBRTQxMTExMjZBNUQwMEQz
NzUwRiAvKiBSZW5kZXJNYXRoTUxPcGVyYXRvci5oICovOyB9OwogCQlGQTY1NEE2QjExMDhBQkVE
MDAyNjE1RTAgLyogTWF0aE1MVGV4dEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNjkxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhN
TFRleHRFbGVtZW50LmNwcCAqLzsgfTsKIAkJRkE2NTRBNkMxMTA4QUJFRDAwMjYxNUUwIC8qIE1h
dGhNTFRleHRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBGQTY1NEE2QTExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVGV4dEVsZW1lbnQuaCAq
LzsgfTsKLQkJRkE2NTRBNkYxMTA4QUJGRjAwMjYxNUUwIC8qIFJlbmRlck1hdGhNTEJsb2NrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBNjU0QTZE
MTEwOEFCRkYwMDI2MTVFMCAvKiBSZW5kZXJNYXRoTUxCbG9jay5jcHAgKi87IH07Ci0JCUZBNjU0
QTcwMTEwOEFCRkYwMDI2MTVFMCAvKiBSZW5kZXJNYXRoTUxCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkE2NTRBNkUxMTA4QUJGRjAwMjYxNUUw
IC8qIFJlbmRlck1hdGhNTEJsb2NrLmggKi87IH07Ci0JCUZBN0VGQjA1MTEyMEQyNTQwMENGNzlD
NyAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkE3RUZCMDMxMTIwRDI1NDAwQ0Y3OUM3IC8qIFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5jcHAgKi87IH07Ci0JCUZBN0VGQjA2MTEyMEQyNTQwMENGNzlDNyAvKiBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEZBN0VGQjA0MTEyMEQyNTQwMENGNzlDNyAvKiBSZW5kZXJNYXRoTUxVbmRl
ck92ZXIuaCAqLzsgfTsKLQkJRkFBMTA1NzAxMTRDMkRGNzAwOTQwQTAxIC8qIFJlbmRlck1hdGhN
TEZyYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEZBQTEwNTZFMTE0QzJERjcwMDk0MEEwMSAvKiBSZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAg
Ki87IH07Ci0JCUZBQTEwNTcxMTE0QzJERjcwMDk0MEEwMSAvKiBSZW5kZXJNYXRoTUxGcmFjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFBMTA1
NkYxMTRDMkRGNzAwOTQwQTAxIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9uLmggKi87IH07CiAJCUZB
QkU3MkY0MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZBQkU3MkVEMTA1OUMxRUIwMEQ5OTlE
RCAvKiBNYXRoTUxFbGVtZW50LmNwcCAqLzsgfTsKIAkJRkFCRTcyRjUxMDU5QzFFQjAwRDk5OURE
IC8qIE1hdGhNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZBQkU3MkVFMTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxFbGVtZW50LmggKi87
IH07CiAJCUZBQkU3MkY2MTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEZBQkU3MkVGMTA1OUMxRUIwMEQ5OTlERCAvKiBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50
LmNwcCAqLzsgfTsKQEAgLTU2NzksOCArNTY4MSw2IEBACiAJCUZBQkU3MkY5MTA1OUMxRUIwMEQ5
OTlERCAvKiBNYXRoTUxNYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRjIxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTE1hdGhF
bGVtZW50LmggKi87IH07CiAJCUZBQkU3MkZEMTA1OUMyMTEwMEQ5OTlERCAvKiBNYXRoTUxFbGVt
ZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGQUJFNzJGQjEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuY3Bw
ICovOyB9OwogCQlGQUJFNzJGRTEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkFCRTcyRkMxMDU5
QzIxMTAwRDk5OUREIC8qIE1hdGhNTE5hbWVzLmNwcCAqLzsgfTsKLQkJRkFDMTJDQzQxMTIwREE2
OTAwREFDQzM2IC8qIFJlbmRlck1hdGhNTFN1YlN1cC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUMxMkNDMjExMjBEQTY5MDBEQUNDMzYgLyogUmVu
ZGVyTWF0aE1MU3ViU3VwLmNwcCAqLzsgfTsKLQkJRkFDMTJDQzUxMTIwREE2OTAwREFDQzM2IC8q
IFJlbmRlck1hdGhNTFN1YlN1cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkFDMTJDQzMxMTIwREE2OTAwREFDQzM2IC8qIFJlbmRlck1hdGhNTFN1YlN1
cC5oICovOyB9OwogCQlGQkMyMjBERjEyMzdGQkVCMDBCQ0Y3ODggLyogR3JhcGhpY3NDb250ZXh0
M0RPcGVuR0wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkJDMjIwREUxMjM3RkJFQjAwQkNGNzg4IC8qIEdyYXBoaWNzQ29udGV4dDNET3BlbkdMLmNw
cCAqLzsgfTsKIAkJRkQyREJGMTIxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkQy
REJGMEUxMkIwNDhBMzAwRUQ5OEM2IC8qIEFjY2VsZXJhdGUuZnJhbWV3b3JrICovOyB9OwogCQlG
RDJEQkYxMzEyQjA0OEEzMDBFRDk4QzYgLyogQXVkaW9Ub29sYm94LmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZEMkRCRjBGMTJCMDQ4
QTMwMEVEOThDNiAvKiBBdWRpb1Rvb2xib3guZnJhbWV3b3JrICovOyB9OwpAQCAtNjUzOCw4ICs2
NTM4LDYgQEAKIAkJMEY1ODBDRkMwRjEyREU5QjAwNTFENjg5IC8qIFJlbmRlckxheWVyQmFja2lu
Zy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJMYXllckJh
Y2tpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVCN0E1MjEwRjY1RDdB
MDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRW1iZWRkZWRPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjVCN0E1MzEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRW1iZWRk
ZWRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2OUI5QzcxMjBGRTFE
NjAwMEUxRkM3IC8qIFJlbmRlck1hdGhNTEZlbmNlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxGZW5jZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkwRjY5QjlDODEyMEZFMUQ2MDAwRTFGQzcgLyogUmVuZGVyTWF0aE1MRmVu
Y2VkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTEZlbmNl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZFQ0Q0MzBGMjUyRjM3MDBCREUy
NzEgLyogQ1NTUHJvcGVydHlMb25naGFuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NQcm9wZXJ0eUxvbmdoYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNkVDRDQ0MEYyNTJGMzcwMEJERTI3MSAvKiBDU1NQcm9wZXJ0eUxvbmdoYW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5TG9uZ2hhbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUg
LyogQ29sb3JDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb2xv
ckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NTMsMTAgKzY1NTEsNiBA
QAogCQkwRkQzMDhENDExN0QxNjg0MDBBNzkxRjcgLyogUmVuZGVySUZyYW1lLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcklGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQ3MjM4MDBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsb2F0UXVhZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQ3MjM4MTBFQzhCRDkzMDBDQTVERDcgLyogRmxvYXRRdWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb2F0UXVhZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRjI4MTMyMTE4MjFDQjYwMDdCN0NENiAvKiBS
ZW5kZXJNYXRoTUxSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1hdGhNTFJvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkYy
ODEzMzExODIxQ0I2MDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MUm9vdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxSb290Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTBGRjI4MTM0MTE4MjFDQjYwMDdCN0NENiAvKiBSZW5kZXJNYXRoTUxTcXVh
cmVSb290LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1h
dGhNTFNxdWFyZVJvb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkYyODEz
NTExODIxQ0I2MDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxTcXVhcmVSb290Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjUwMjU5MTAyQkE5MDEwMDY2RjM5QSAvKiBET01TdHls
ZU1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNTAyNUExMDJCQTkwMTAwNjZGMzlB
IC8qIERPTVN0eWxlTWVkaWEubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBET01TdHlsZU1lZGlhLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY1
MDI2MjEwMkJBOTJCMDA2NkYzOUEgLyogRE9NU3R5bGVNZWRpYUludGVybmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVN0eWxlTWVkaWFJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzMyOSw2ICs3MzIzLDI2IEBACiAJCTQzNjcwOEJCMTJE
OUNBNEIwMDA0NDIzNCAvKiBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdSZXNvdXJjZXNDeWNsZVNvbHZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0MzY3MDhCQzEyRDlDQTRCMDAwNDQyMzQgLyogU1ZHU2hhZG93
VHJlZUVsZW1lbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1NoYWRvd1RyZWVFbGVtZW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQz
NjcwOEJEMTJEOUNBNEIwMDA0NDIzNCAvKiBTVkdTaGFkb3dUcmVlRWxlbWVudHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHU2hhZG93VHJlZUVsZW1lbnRzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkMzMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5k
ZXJNYXRoTUxCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZW5kZXJNYXRoTUxCbG9jay5jcHA7IHBhdGggPSBtYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZDNDEyREEyNUU4MDBBRjgwQTIg
LyogUmVuZGVyTWF0aE1MQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
UmVuZGVyTWF0aE1MQmxvY2suaDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZDNTEyREEyNUU4MDBBRjgwQTIgLyog
UmVuZGVyTWF0aE1MRmVuY2VkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IFJlbmRlck1hdGhNTEZlbmNlZC5jcHA7IHBhdGggPSBtYXRobWwvUmVuZGVyTWF0aE1MRmVu
Y2VkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2QzYxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTEZlbmNlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBSZW5kZXJNYXRoTUxGZW5jZWQuaDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxG
ZW5jZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2QzcxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFJlbmRlck1hdGhNTEZyYWN0aW9uLmNwcDsgcGF0aCA9IG1hdGhtbC9S
ZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQz
OTA0NkM4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxGcmFjdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW5kZXJNYXRoTUxGcmFjdGlvbi5oOyBwYXRoID0g
bWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTQzOTA0NkM5MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxNYXRoLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlbmRlck1hdGhNTE1hdGguY3BwOyBw
YXRoID0gbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0MzkwNDZDQTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MTWF0aC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBSZW5kZXJNYXRoTUxNYXRoLmg7IHBhdGgg
PSBtYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0MzkwNDZDQjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVuZGVyTWF0aE1MT3BlcmF0b3Iu
Y3BwOyBwYXRoID0gbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2Q0MxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TE9wZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlck1hdGhN
TE9wZXJhdG9yLmg7IHBhdGggPSBtYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2Q0QxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRl
ck1hdGhNTFJvb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVu
ZGVyTWF0aE1MUm9vdC5jcHA7IHBhdGggPSBtYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkNFMTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxSb290LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRl
ck1hdGhNTFJvb3QuaDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxSb290Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQzOTA0NkNGMTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxSb3cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVuZGVy
TWF0aE1MUm93LmNwcDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxSb3cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZEMDEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVy
TWF0aE1MUm93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlck1hdGhN
TFJvdy5oOyBwYXRoID0gbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0MzkwNDZEMTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJN
YXRoTUxTcXVhcmVSb290LmNwcDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDIxMkRBMjVFODAwQUY4
MEEyIC8qIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oOyBwYXRoID0gbWF0aG1sL1JlbmRlck1h
dGhNTFNxdWFyZVJvb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDM5MDQ2RDMx
MkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFN1YlN1cC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZW5kZXJNYXRoTUxTdWJTdXAuY3BwOyBwYXRoID0gbWF0
aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQzOTA0NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUmVuZGVyTWF0aE1MU3ViU3VwLmg7IHBhdGggPSBt
YXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQzOTA0NkQ1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUmVuZGVyTWF0aE1MVW5kZXJPdmVy
LmNwcDsgcGF0aCA9IG1hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MVW5kZXJPdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFJlbmRlck1h
dGhNTFVuZGVyT3Zlci5oOyBwYXRoID0gbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0M0MwOTJCOTEyRDlFNEVFMDBBOTg5QzMgLyog
UmVuZGVyU1ZHRm9yZWlnbk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJTVkdGb3JlaWduT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDNDMDkyQkExMkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmpl
Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHRm9yZWlnbk9i
amVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDE1MjkyQzBFMUFFOEEwMDBD
NEEyRDAgLyogSFRNTFBsdWdJbkltYWdlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjAxMSwyMiArMTIwMjUsMTAgQEAKIAkJRjk4RkZGNDMxMUEyNjc2MjAwRjU0
OEU4IC8qIENTU09NVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NT
T01VdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGOUYwRUQ3NzBEQjUwQ0Ey
MDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjlGMEVENzgwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZBMEIxRjgyMTExMjVDRUUwMDdGOTgzOSAvKiBSZW5kZXJNYXRoTUxNYXRoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTE1hdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQTBCMUY4MzExMTI1Q0VFMDA3Rjk4MzkgLyogUmVu
ZGVyTWF0aE1MTWF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJN
YXRoTUxNYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZBMEIxRjg0MTExMjVD
RUUwMDdGOTgzOSAvKiBSZW5kZXJNYXRoTUxSb3cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyTWF0aE1MUm93LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJRkEwQjFGODUxMTEyNUNFRTAwN0Y5ODM5IC8qIFJlbmRlck1hdGhNTFJvdy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJNYXRoTUxSb3cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkE1RkFFNDAxMTEyNkE1RDAwRDM3NTBGIC8qIFJlbmRl
ck1hdGhNTE9wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlck1hdGhNTE9wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
RkE1RkFFNDExMTEyNkE1RDAwRDM3NTBGIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlck1hdGhNTE9wZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZBNjU0QTYzMTEwOEFCQjcwMDI2MTVFMCAvKiBtYXRo
bWwuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5jc3M7IHBhdGggPSBtYXRobWwuY3NzOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGQTY1NEE2NzExMDhBQkUyMDAyNjE1RTAgLyogbWF0aGF0dHJz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1hdGhhdHRycy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRkE2NTRBNjkxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hdGhNTFRleHRF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkE2NTRBNkExMTA4QUJF
RDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hdGhNTFRleHRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUZBNjU0QTZEMTEwOEFCRkYwMDI2MTVFMCAvKiBSZW5kZXJNYXRoTUxCbG9jay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxCbG9jay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZBNjU0QTZFMTEwOEFCRkYwMDI2MTVFMCAv
KiBSZW5kZXJNYXRoTUxCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJNYXRoTUxCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQTdFRkIw
MzExMjBEMjU0MDBDRjc5QzcgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZBN0VGQjA0MTEyMEQyNTQwMENGNzlDNyAvKiBS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyTWF0aE1MVW5kZXJPdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZB
QTEwNTZFMTE0QzJERjcwMDk0MEEwMSAvKiBSZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZBQTEwNTZGMTE0QzJERjcwMDk0MEEwMSAv
KiBSZW5kZXJNYXRoTUxGcmFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJNYXRoTUxGcmFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlG
QUJFNzJFRDEwNTlDMUVCMDBEOTk5REQgLyogTWF0aE1MRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYXRoTUxFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRkFCRTcyRUUxMDU5QzFFQjAwRDk5OUREIC8qIE1hdGhNTEVsZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF0aE1MRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJFRjEwNTlDMUVCMDBEOTk5REQgLyog
TWF0aE1MSW5saW5lQ29udGFpbmVyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNYXRoTUxJbmxpbmVDb250YWluZXJFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMDM2LDggKzEyMDM4LDYgQEAKIAkJRkFCRTcyRjMxMDU5
QzFFQjAwRDk5OUREIC8qIG1hdGh0YWdzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1hdGh0
YWdzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQUJFNzJGQjEwNTlDMjExMDBE
OTk5REQgLyogTWF0aE1MRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWF0aE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlGQUJFNzJGQzEwNTlDMjExMDBEOTk5REQgLyogTWF0aE1MTmFtZXMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWF0aE1MTmFtZXMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlGQUMxMkNDMjExMjBEQTY5MDBEQUNDMzYgLyog
UmVuZGVyTWF0aE1MU3ViU3VwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbmRlck1hdGhNTFN1YlN1cC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUZBQzEyQ0MzMTEyMERBNjkwMERBQ0MzNiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTWF0aE1MU3ViU3VwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCQzIyMERFMTIzN0ZCRUIwMEJDRjc4OCAvKiBHcmFwaGlj
c0NvbnRleHQzRE9wZW5HTC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBHcmFwaGljc0NvbnRleHQzRE9wZW5HTC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZEMkRCRjBFMTJCMDQ4QTMwMEVEOThDNiAvKiBBY2NlbGVyYXRlLmZyYW1ld29yayAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHdyYXBwZXIuZnJh
bWV3b3JrOyBuYW1lID0gQWNjZWxlcmF0ZS5mcmFtZXdvcms7IHBhdGggPSAvU3lzdGVtL0xpYnJh
cnkvRnJhbWV3b3Jrcy9BY2NlbGVyYXRlLmZyYW1ld29yazsgc291cmNlVHJlZSA9ICI8YWJzb2x1
dGU+IjsgfTsKIAkJRkQyREJGMEYxMkIwNDhBMzAwRUQ5OEM2IC8qIEF1ZGlvVG9vbGJveC5mcmFt
ZXdvcmsgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3
cmFwcGVyLmZyYW1ld29yazsgbmFtZSA9IEF1ZGlvVG9vbGJveC5mcmFtZXdvcms7IHBhdGggPSAv
U3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9BdWRpb1Rvb2xib3guZnJhbWV3b3JrOyBzb3VyY2VU
cmVlID0gIjxhYnNvbHV0ZT4iOyB9OwpAQCAtMTMxNDYsNiArMTMxNDYsMzMgQEAKIAkJCXBhdGgg
PSBzaGFkb3c7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk0MzkwNDZDMjEy
REEyNUNFMDBBRjgwQTIgLyogbWF0aG1sICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQk0MzkwNDZDMzEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1M
QmxvY2suY3BwICovLAorCQkJCTQzOTA0NkM0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRo
TUxCbG9jay5oICovLAorCQkJCTQzOTA0NkM1MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRo
TUxGZW5jZWQuY3BwICovLAorCQkJCTQzOTA0NkM2MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJN
YXRoTUxGZW5jZWQuaCAqLywKKwkJCQk0MzkwNDZDNzEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVy
TWF0aE1MRnJhY3Rpb24uY3BwICovLAorCQkJCTQzOTA0NkM4MTJEQTI1RTgwMEFGODBBMiAvKiBS
ZW5kZXJNYXRoTUxGcmFjdGlvbi5oICovLAorCQkJCTQzOTA0NkM5MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxNYXRoLmNwcCAqLywKKwkJCQk0MzkwNDZDQTEyREEyNUU4MDBBRjgwQTIg
LyogUmVuZGVyTWF0aE1MTWF0aC5oICovLAorCQkJCTQzOTA0NkNCMTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgKi8sCisJCQkJNDM5MDQ2Q0MxMkRBMjVFODAwQUY4
MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggKi8sCisJCQkJNDM5MDQ2Q0QxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvb3QuY3BwICovLAorCQkJCTQzOTA0NkNFMTJEQTI1RTgw
MEFGODBBMiAvKiBSZW5kZXJNYXRoTUxSb290LmggKi8sCisJCQkJNDM5MDQ2Q0YxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvdy5jcHAgKi8sCisJCQkJNDM5MDQ2RDAxMkRBMjVFODAw
QUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvdy5oICovLAorCQkJCTQzOTA0NkQxMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCAqLywKKwkJCQk0MzkwNDZEMjEyREEy
NUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5oICovLAorCQkJCTQzOTA0NkQz
MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuY3BwICovLAorCQkJCTQzOTA0
NkQ0MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuaCAqLywKKwkJCQk0Mzkw
NDZENTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmNwcCAqLywKKwkJ
CQk0MzkwNDZENjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmggKi8s
CisJCQkpOworCQkJbmFtZSA9IG1hdGhtbDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTQ0OTE5NTkwMEZCRTE3NUIwMEQ5RjgyNCAvKiBFeHBvcnRzICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE4NTQzLDYgKzE4NTcwLDcgQEAKIAkJ
RjUyM0QyRjMwMkRFNDQzQjAxODYzNUNBIC8qIHJlbmRlcmluZyAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNDM5MDQ2QzIxMkRBMjVDRTAwQUY4MEEyIC8q
IG1hdGhtbCAqLywKIAkJCQlCQzhDOEZBQTBERENEMkYyMDBCNTkyRjQgLyogc3R5bGUgKi8sCiAJ
CQkJMDg4QzJGNzQxMjM5MDA4MDAwM0Q2NUNFIC8qIHN2ZyAqLywKIAkJCQlBOENGRjA0QjBBMTU0
RjA5MDAwQTQyMzQgLyogQXV0b1RhYmxlTGF5b3V0LmNwcCAqLywKQEAgLTE5MDU4LDI2ICsxOTA4
Niw2IEBACiAJCQkJRkE2NTRBNjkxMTA4QUJFRDAwMjYxNUUwIC8qIE1hdGhNTFRleHRFbGVtZW50
LmNwcCAqLywKIAkJCQlGQTY1NEE2QTExMDhBQkVEMDAyNjE1RTAgLyogTWF0aE1MVGV4dEVsZW1l
bnQuaCAqLywKIAkJCQlGQUJFNzJGMzEwNTlDMUVCMDBEOTk5REQgLyogbWF0aHRhZ3MuaW4gKi8s
Ci0JCQkJRkE2NTRBNkQxMTA4QUJGRjAwMjYxNUUwIC8qIFJlbmRlck1hdGhNTEJsb2NrLmNwcCAq
LywKLQkJCQlGQTY1NEE2RTExMDhBQkZGMDAyNjE1RTAgLyogUmVuZGVyTWF0aE1MQmxvY2suaCAq
LywKLQkJCQkwRjY5QjlDNzEyMEZFMUQ2MDAwRTFGQzcgLyogUmVuZGVyTWF0aE1MRmVuY2VkLmNw
cCAqLywKLQkJCQkwRjY5QjlDODEyMEZFMUQ2MDAwRTFGQzcgLyogUmVuZGVyTWF0aE1MRmVuY2Vk
LmggKi8sCi0JCQkJRkFBMTA1NkUxMTRDMkRGNzAwOTQwQTAxIC8qIFJlbmRlck1hdGhNTEZyYWN0
aW9uLmNwcCAqLywKLQkJCQlGQUExMDU2RjExNEMyREY3MDA5NDBBMDEgLyogUmVuZGVyTWF0aE1M
RnJhY3Rpb24uaCAqLywKLQkJCQlGQTBCMUY4MjExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0
aE1MTWF0aC5jcHAgKi8sCi0JCQkJRkEwQjFGODMxMTEyNUNFRTAwN0Y5ODM5IC8qIFJlbmRlck1h
dGhNTE1hdGguaCAqLywKLQkJCQlGQTVGQUU0MDExMTI2QTVEMDBEMzc1MEYgLyogUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwICovLAotCQkJCUZBNUZBRTQxMTExMjZBNUQwMEQzNzUwRiAvKiBSZW5k
ZXJNYXRoTUxPcGVyYXRvci5oICovLAotCQkJCTBGRjI4MTMyMTE4MjFDQjYwMDdCN0NENiAvKiBS
ZW5kZXJNYXRoTUxSb290LmNwcCAqLywKLQkJCQkwRkYyODEzMzExODIxQ0I2MDA3QjdDRDYgLyog
UmVuZGVyTWF0aE1MUm9vdC5oICovLAotCQkJCUZBMEIxRjg0MTExMjVDRUUwMDdGOTgzOSAvKiBS
ZW5kZXJNYXRoTUxSb3cuY3BwICovLAotCQkJCUZBMEIxRjg1MTExMjVDRUUwMDdGOTgzOSAvKiBS
ZW5kZXJNYXRoTUxSb3cuaCAqLywKLQkJCQkwRkYyODEzNDExODIxQ0I2MDA3QjdDRDYgLyogUmVu
ZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAgKi8sCi0JCQkJMEZGMjgxMzUxMTgyMUNCNjAwN0I3Q0Q2
IC8qIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QuaCAqLywKLQkJCQlGQUMxMkNDMjExMjBEQTY5MDBE
QUNDMzYgLyogUmVuZGVyTWF0aE1MU3ViU3VwLmNwcCAqLywKLQkJCQlGQUMxMkNDMzExMjBEQTY5
MDBEQUNDMzYgLyogUmVuZGVyTWF0aE1MU3ViU3VwLmggKi8sCi0JCQkJRkE3RUZCMDMxMTIwRDI1
NDAwQ0Y3OUM3IC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAgKi8sCi0JCQkJRkE3RUZCMDQx
MTIwRDI1NDAwQ0Y3OUM3IC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5oICovLAogCQkJKTsKIAkJ
CXBhdGggPSBtYXRobWw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjE1NjEsMTYg
KzIxNTY5LDE2IEBACiAJCQkJQThFQTdBNTIwQTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RJ
dGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBN0E1MDBBMTkxQTUyMDBBOEVGNUYgLyogUmVu
ZGVyTGlzdE1hcmtlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NjAyOEYwRTRCNzY1ODAwNjVC
MDM4IC8qIFJlbmRlck1hcnF1ZWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUZBNjU0QTcwMTEwOEFC
RkYwMDI2MTVFMCAvKiBSZW5kZXJNYXRoTUxCbG9jay5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY2
OUI5Q0ExMjBGRTFENjAwMEUxRkM3IC8qIFJlbmRlck1hdGhNTEZlbmNlZC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJRkFBMTA1NzExMTRDMkRGNzAwOTQwQTAxIC8qIFJlbmRlck1hdGhNTEZyYWN0aW9u
LmggaW4gSGVhZGVycyAqLywKLQkJCQlGQTBCMUY4NzExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVy
TWF0aE1MTWF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkE1RkFFNDMxMTEyNkE1RDAwRDM3NTBG
IC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkYyODU5MTEx
ODY0MDUzMDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MUm9vdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
RkEwQjFGODkxMTEyNUNFRTAwN0Y5ODM5IC8qIFJlbmRlck1hdGhNTFJvdy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEZGMjg1OTMxMTg2NDA1NTAwN0I3Q0Q2IC8qIFJlbmRlck1hdGhNTFNxdWFyZVJv
b3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUZBQzEyQ0M1MTEyMERBNjkwMERBQ0MzNiAvKiBSZW5k
ZXJNYXRoTUxTdWJTdXAuaCBpbiBIZWFkZXJzICovLAotCQkJCUZBN0VGQjA2MTEyMEQyNTQwMENG
NzlDNyAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzOTA0
NkQ4MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxCbG9jay5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNDM5MDQ2REExMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEZlbmNlZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDM5MDQ2REMxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TEZyYWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk0MzkwNDZERTEyREEyNUU4MDBBRjgwQTIg
LyogUmVuZGVyTWF0aE1MTWF0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDM5MDQ2RTAxMkRBMjVF
ODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTE9wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk0
MzkwNDZFMjEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MUm9vdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDM5MDQ2RTQxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFJvdy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNDM5MDQ2RTYxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhN
TFNxdWFyZVJvb3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzOTA0NkU4MTJEQTI1RTgwMEFGODBB
MiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTQzOTA0NkVBMTJE
QTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0QzI3OTU5MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5kZXJNZWRpYS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQUJEREZFN0EwQTVDNkU3MDAwQTNFMTFEIC8qIFJlbmRlck1lbnVMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNDU0NDI0RjExOUIzNjg3MDA5QkU5MTIgLyogUmVuZGVyTWV0ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjQzNTAsMTYgKzI0MzU4LDE2IEBACiAJCQkJQThFQTdBNEUw
QTE5MUE1MjAwQThFRjVGIC8qIFJlbmRlckxpc3RJdGVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE4RUE3QTUxMEExOTFBNTIwMEE4RUY1RiAvKiBSZW5kZXJMaXN0TWFya2VyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNTYwMjkwMEU0Qjc2NTgwMDY1QjAzOCAvKiBSZW5kZXJNYXJxdWVlLmNw
cCBpbiBTb3VyY2VzICovLAotCQkJCUZBNjU0QTZGMTEwOEFCRkYwMDI2MTVFMCAvKiBSZW5kZXJN
YXRoTUxCbG9jay5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjY5QjlDOTEyMEZFMUQ2MDAwRTFG
QzcgLyogUmVuZGVyTWF0aE1MRmVuY2VkLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZBQTEwNTcw
MTE0QzJERjcwMDk0MEEwMSAvKiBSZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQlGQTBCMUY4NjExMTI1Q0VFMDA3Rjk4MzkgLyogUmVuZGVyTWF0aE1MTWF0aC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlGQTVGQUU0MjExMTI2QTVEMDBEMzc1MEYgLyogUmVuZGVyTWF0
aE1MT3BlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZGMjg1OTAxMTg2NDA1MjAwN0I3
Q0Q2IC8qIFJlbmRlck1hdGhNTFJvb3QuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJRkEwQjFGODgx
MTEyNUNFRTAwN0Y5ODM5IC8qIFJlbmRlck1hdGhNTFJvdy5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkwRkYyODU5MjExODY0MDU0MDA3QjdDRDYgLyogUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQlGQUMxMkNDNDExMjBEQTY5MDBEQUNDMzYgLyogUmVuZGVyTWF0
aE1MU3ViU3VwLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUZBN0VGQjA1MTEyMEQyNTQwMENGNzlD
NyAvKiBSZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDM5MDQ2
RDcxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTEJsb2NrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTQzOTA0NkQ5MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxGZW5jZWQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNDM5MDQ2REIxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1h
dGhNTEZyYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkREMTJEQTI1RTgwMEFG
ODBBMiAvKiBSZW5kZXJNYXRoTUxNYXRoLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkRG
MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0MzkwNDZFMTEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0aE1MUm9vdC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0MzkwNDZFMzEyREEyNUU4MDBBRjgwQTIgLyogUmVuZGVyTWF0
aE1MUm93LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU1MTJEQTI1RTgwMEFGODBBMiAv
KiBSZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQzOTA0NkU3
MTJEQTI1RTgwMEFGODBBMiAvKiBSZW5kZXJNYXRoTUxTdWJTdXAuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNDM5MDQ2RTkxMkRBMjVFODAwQUY4MEEyIC8qIFJlbmRlck1hdGhNTFVuZGVyT3Zlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEMyNzk1ODBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVy
TWVkaWEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQUJEREZFNzkwQTVDNkU3MDAwQTNFMTFEIC8q
IFJlbmRlck1lbnVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE0NTQ0MjRFMTE5QjM2ODcw
MDlCRTkxMiAvKiBSZW5kZXJNZXRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkocmV2aXNpb24gNzUzNTApCisr
KyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXggTWls
b3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNQVRITUwpCi0K
LSNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgotCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9y
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiTWF0aE1MTmFtZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLXVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsK
LSAgICAKLVJlbmRlck1hdGhNTEJsb2NrOjpSZW5kZXJNYXRoTUxCbG9jayhOb2RlKiBjb250YWlu
ZXIpIAotICAgIDogUmVuZGVyQmxvY2soY29udGFpbmVyKSAKLXsKLX0KLQotYm9vbCBSZW5kZXJN
YXRoTUxCbG9jazo6aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5
bGUqKSBjb25zdAotewotICAgIHJldHVybiBjaGlsZC0+bm9kZSgpICYmIGNoaWxkLT5ub2RlKCkt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVOVF9OT0RFOwotfQotCi1QYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBSZW5kZXJNYXRoTUxCbG9jazo6bWFrZUJsb2NrU3R5bGUoKQotewotICAgIFJlZlB0
cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbmV3
U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOwotICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KEJM
T0NLKTsKLSAgICByZXR1cm4gbmV3U3R5bGU7Ci19Ci0KLWludCBSZW5kZXJNYXRoTUxCbG9jazo6
bm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdAotewotICAgIGlmICghaXNSZW5kZXJNYXRoTUxPcGVy
YXRvcigpKQotICAgICAgICByZXR1cm4gb2Zmc2V0SGVpZ2h0KCk7Ci0gICAgICAgIAotICAgIHJl
dHVybiAwOwotfQotCi12b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpzdHJldGNoVG9IZWlnaHQoaW50
IGhlaWdodCkgCi17Ci0gICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxk
KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpKQotICAgICAgIGlm
IChjdXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKLSAgICAgICAgICBSZW5kZXJNYXRo
TUxCbG9jayogYmxvY2sgPSB0b1JlbmRlck1hdGhNTEJsb2NrKGN1cnJlbnQpOwotICAgICAgICAg
IGJsb2NrLT5zdHJldGNoVG9IZWlnaHQoaGVpZ2h0KTsKLSAgICAgICB9Ci19Ci0KLSNpZiBFTkFC
TEUoREVCVUdfTUFUSF9MQVlPVVQpCi12b2lkIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChQYWlu
dEluZm8mIGluZm8sIGludCB0eCwgaW50IHR5KQotewotICAgIFJlbmRlckJsb2NrOjpwYWludChp
bmZvLCB0eCwgdHkpOwotICAgIAotICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBpbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOwotICAgIAotICAgIGluZm8uY29u
dGV4dC0+c2F2ZSgpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNz
KDEuMGYpOwotICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwot
ICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMCwgMjU1KSwgQ29sb3JT
cGFjZVNSR0IpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgs
IHR5KSwgSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSkpOwotICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSksIEludFBvaW50KHR4
ICsgb2Zmc2V0V2lkdGgoKSwgdHkgKyBvZmZzZXRIZWlnaHQoKSkpOwotICAgIGluZm8uY29udGV4
dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5ICsgb2Zmc2V0SGVpZ2h0KCkpLCBJbnRQb2ludCh0
eCArIG9mZnNldFdpZHRoKCksIHR5ICsgb2Zmc2V0SGVpZ2h0KCkpKTsKLSAgICBpbmZvLmNvbnRl
eHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50KHR4LCB0eSArIG9mZnNldEhl
aWdodCgpKSk7Ci0gICAgCi0gICAgaW50IHRvcFN0YXJ0ID0gcGFkZGluZ1RvcCgpOwotICAgIAot
ICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMCwgMjU1LCAwKSwgQ29sb3JT
cGFjZVNSR0IpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgs
IHR5ICsgdG9wU3RhcnQpLCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgdG9wU3Rh
cnQpKTsKLSAgICAKLSAgICBpbnQgYmFzZWxpbmUgPSBiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0
aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOwotICAgIAotICAgIGluZm8uY29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSwgQ29sb3JTcGFjZVNSR0IpOwotICAg
IAotICAgIGluZm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5ICsgYmFzZWxpbmUp
LCBJbnRQb2ludCh0eCArIG9mZnNldFdpZHRoKCksIHR5ICsgYmFzZWxpbmUpKTsKLSAgICAKLSAg
ICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAKLX0KLSNlbmRpZiAvLyBFTkFCTEUoREVC
VUdfTUFUSF9MQVlPVVQpCi0KLQotfSAgICAKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAkocmV2aXNpb24gNzUzNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4
QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIFJlbmRlck1hdGhNTEJsb2NrX2gKLSNkZWZpbmUgUmVuZGVyTWF0aE1MQmxvY2tf
aAotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLQotI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0KLSNk
ZWZpbmUgRU5BQkxFX0RFQlVHX01BVEhfTEFZT1VUIDAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIAotY2xhc3MgUmVuZGVyTWF0aE1MQmxvY2sgOiBwdWJsaWMgUmVuZGVyQmxvY2sgewotcHVi
bGljOgotICAgIFJlbmRlck1hdGhNTEJsb2NrKE5vZGUqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVh
bCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MQmxvY2soKSBjb25zdCB7IHJl
dHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTFJv
dygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0
aE1MTWF0aCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGhhc0Jh
c2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9y
SGVpZ2h0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgaGVp
Z2h0KTsKLQotI2lmIEVOQUJMRShERUJVR19NQVRIX0xBWU9VVCkKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotI2VuZGlmCi0gICAgCi1wcm90ZWN0
ZWQ6Ci0gICAgaW50IGdldEJveE1vZGVsT2JqZWN0SGVpZ2h0KFJlbmRlck9iamVjdCogb2JqZWN0
KSAKLSAgICB7Ci0gICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0JveE1vZGVsT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJv
eE1vZGVsT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gYm94LT5vZmZzZXRIZWln
aHQoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IGludCBnZXRCb3hNb2RlbE9iamVjdEhlaWdodChjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkg
Ci0gICAgewotICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgp
KSB7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChvYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIGJveC0+b2Zmc2V0
SGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBpbnQgZ2V0Qm94TW9kZWxPYmplY3RXaWR0aChSZW5kZXJPYmplY3QqIG9iamVjdCkgCi0g
ICAgewotICAgICAgICBpZiAob2JqZWN0ICYmIG9iamVjdC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChvYmplY3QpOwotICAgICAgICAgICAgcmV0dXJuIGJveC0+b2Zmc2V0V2lkdGgoKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGludCBn
ZXRCb3hNb2RlbE9iamVjdFdpZHRoKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KSAKLSAgICB7
Ci0gICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgICAgICByZXR1cm4gYm94LT5vZmZzZXRXaWR0aCgp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBtYWtlQmxvY2tTdHlsZSgpOwotICAgIAotfTsK
LQotaW5saW5lIFJlbmRlck1hdGhNTEJsb2NrKiB0b1JlbmRlck1hdGhNTEJsb2NrKFJlbmRlck9i
amVjdCogb2JqZWN0KQoteyAKLSAgICBBU1NFUlQoIW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVy
TWF0aE1MQmxvY2soKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1hdGhNTEJsb2Nr
Kj4ob2JqZWN0KTsKLX0KLQotaW5saW5lIGNvbnN0IFJlbmRlck1hdGhNTEJsb2NrKiB0b1JlbmRl
ck1hdGhNTEJsb2NrKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoteyAKLSAgICBBU1NFUlQo
IW9iamVjdCB8fCBvYmplY3QtPmlzUmVuZGVyTWF0aE1MQmxvY2soKSk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlck1hdGhNTEJsb2NrKj4ob2JqZWN0KTsKLX0KLQotfQotCi0K
LSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotI2VuZGlmIC8vIFJlbmRlck1hdGhNTEJsb2NrX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCShy
ZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lm
IEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRoTUxGZW5jZWQuaCIKLQotI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCi0jaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKLSNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLXVzaW5n
IG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKLSAgICAKLWVudW0gQnJhY2VzIHsgT3BlbmluZ0JyYWNl
Q2hhciA9IDB4MjgsIENsb3NpbmdCcmFjZUNoYXIgPSAweDI5IH07Ci0gICAgCi1zdGF0aWMgY29u
c3QgZmxvYXQgZ09wZXJhdG9yUGFkZGluZyA9IDAuMWY7Ci0KLVJlbmRlck1hdGhNTEZlbmNlZDo6
UmVuZGVyTWF0aE1MRmVuY2VkKE5vZGUqIGZlbmNlZCkgCi0gICAgOiBSZW5kZXJNYXRoTUxSb3co
ZmVuY2VkKQotICAgICwgbV9vcGVuKE9wZW5pbmdCcmFjZUNoYXIpCi0gICAgLCBtX2Nsb3NlKENs
b3NpbmdCcmFjZUNoYXIpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjp1cGRhdGVG
cm9tRWxlbWVudCgpCi17Ci0gICAgRWxlbWVudCogZmVuY2VkID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG5vZGUoKSk7Ci0gCi0gICAgLy8gRklYTUU6IEhhbmRsZSBvcGVuL2Nsb3NlIHZhbHVlcyB3
aXRoIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyICh0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGxpa2Ug
dGV4dCkuCi0gICAgQXRvbWljU3RyaW5nIG9wZW5WYWx1ZSA9IGZlbmNlZC0+Z2V0QXR0cmlidXRl
KE1hdGhNTE5hbWVzOjpvcGVuQXR0cik7Ci0gICAgaWYgKG9wZW5WYWx1ZS5sZW5ndGgoKSA+IDAp
Ci0gICAgICAgIG1fb3BlbiA9IG9wZW5WYWx1ZVswXTsKLSAgICBBdG9taWNTdHJpbmcgY2xvc2VW
YWx1ZSA9IGZlbmNlZC0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpjbG9zZUF0dHIpOwotICAg
IGlmIChjbG9zZVZhbHVlLmxlbmd0aCgpID4gMCkKLSAgICAgICAgbV9jbG9zZSA9IGNsb3NlVmFs
dWVbMF07Ci0gICAgCi0gICAgQXRvbWljU3RyaW5nIHNlcGFyYXRvcnMgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4oZmVuY2VkKS0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzZXBhcmF0b3JzQXR0
cik7Ci0gICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7Ci0gICAgICAgIFZlY3RvcjxVQ2hh
cj4gY2hhcmFjdGVyczsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBh
cmF0b3JzLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGlu
ZShzZXBhcmF0b3JzW2ldKSkKLSAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBh
cmF0b3JzW2ldKTsKLSAgICAgICAgfQotICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVy
cy5zaXplKCkgPyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hh
cmFjdGVycy5zaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFRoZSBzZXBhcmF0b3Ig
ZGVmYXVsdHMgdG8gYSBzaW5nbGUgY29tbWEuCi0gICAgICAgIG1fc2VwYXJhdG9ycyA9IFN0cmlu
Z0ltcGw6OmNyZWF0ZSgiLCIpOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNFbXB0eSgpKQotICAg
ICAgICBtYWtlRmVuY2VzKCk7Ci19Ci0KLVJlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTWF0aE1M
RmVuY2VkOjptYWtlT3BlcmF0b3JTdHlsZSgpIAotewotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
bmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgbmV3U3R5bGUtPmluaGVyaXRG
cm9tKHN0eWxlKCkpOwotICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0g
ICAgbmV3U3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihnT3Bl
cmF0b3JQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7Ci0gICAgcmV0dXJu
IG5ld1N0eWxlOwotfQotCi12b2lkIFJlbmRlck1hdGhNTEZlbmNlZDo6bWFrZUZlbmNlcygpCi17
Ci0gICAgUmVuZGVyT2JqZWN0KiBvcGVuRmVuY2UgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRl
ck1hdGhNTE9wZXJhdG9yKG5vZGUoKSwgbV9vcGVuKTsKLSAgICBvcGVuRmVuY2UtPnNldFN0eWxl
KG1ha2VPcGVyYXRvclN0eWxlKCkucmVsZWFzZSgpKTsKLSAgICBSZW5kZXJCbG9jazo6YWRkQ2hp
bGQob3BlbkZlbmNlLCBmaXJzdENoaWxkKCkpOwotICAgIFJlbmRlck9iamVjdCogY2xvc2VGZW5j
ZSA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MT3BlcmF0b3Iobm9kZSgpLCBtX2Ns
b3NlKTsKLSAgICBjbG9zZUZlbmNlLT5zZXRTdHlsZShtYWtlT3BlcmF0b3JTdHlsZSgpLnJlbGVh
c2UoKSk7Ci0gICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNsb3NlRmVuY2UpOwotfQotCi12b2lk
IFJlbmRlck1hdGhNTEZlbmNlZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KikKLXsKLSAgICAvLyBtYWtlIHRoZSBmZW5jZXMgaWYgdGhlIHJlbmRlciBvYmplY3Qg
aXMgZW1wdHkKLSAgICBpZiAoaXNFbXB0eSgpKQotICAgICAgICB1cGRhdGVGcm9tRWxlbWVudCgp
OwotICAgIAotICAgIGlmIChtX3NlcGFyYXRvcnMuZ2V0KCkpIHsKLSAgICAgICAgdW5zaWduZWQg
aW50IGNvdW50ID0gMDsKLSAgICAgICAgZm9yIChOb2RlKiBwb3NpdGlvbiA9IGNoaWxkLT5ub2Rl
KCk7IHBvc2l0aW9uOyBwb3NpdGlvbiA9IHBvc2l0aW9uLT5wcmV2aW91c1NpYmxpbmcoKSkgewot
ICAgICAgICAgICAgaWYgKHBvc2l0aW9uLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9E
RSkKLSAgICAgICAgICAgICAgICBjb3VudCsrOwotICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgIGlmIChjb3VudCA+IDEpIHsKLSAgICAgICAgICAgIFVDaGFyIHNlcGFyYXRvcjsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXNlIHRoZSBsYXN0IHNlcGFyYXRvciBpZiB3
ZSd2ZSBydW4gb3V0IG9mIHNwZWNpZmllZCBzZXBhcmF0b3JzLgotICAgICAgICAgICAgaWYgKChj
b3VudCAtIDEpID49IG1fc2VwYXJhdG9ycy5nZXQoKS0+bGVuZ3RoKCkpCi0gICAgICAgICAgICAg
ICAgc2VwYXJhdG9yID0gKCptX3NlcGFyYXRvcnMuZ2V0KCkpW21fc2VwYXJhdG9ycy5nZXQoKS0+
bGVuZ3RoKCkgLSAxXTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXBhcmF0
b3IgPSAoKm1fc2VwYXJhdG9ycy5nZXQoKSlbY291bnQgLSAxXTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIFJlbmRlck9iamVjdCogc2VwYXJhdG9yT2JqID0gbmV3IChyZW5kZXJBcmVu
YSgpKSBSZW5kZXJNYXRoTUxPcGVyYXRvcihub2RlKCksIHNlcGFyYXRvcik7Ci0gICAgICAgICAg
ICBzZXBhcmF0b3JPYmotPnNldFN0eWxlKG1ha2VPcGVyYXRvclN0eWxlKCkucmVsZWFzZSgpKTsK
LSAgICAgICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChzZXBhcmF0b3JPYmosIGxhc3RDaGls
ZCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIGEgYmxvY2ss
IHdlJ2xsIHdyYXAgaXQgaW4gYW4gaW5saW5lLWJsb2NrLgotICAgIGlmIChjaGlsZC0+aXNCbG9j
a0Zsb3coKSAmJiBjaGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpICE9IElOTElORV9CTE9DSykgewot
ICAgICAgICAvLyBCbG9jayBvYmplY3RzIHdyYXBwZXIuCi0KLSAgICAgICAgUmVuZGVyQmxvY2sq
IGJsb2NrID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhub2RlKCkpOwotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwot
ICAgICAgICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7Ci0gICAgICAgIG5ld1N0eWxl
LT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0gICAgICAgIGJsb2NrLT5zZXRTdHlsZShuZXdT
dHlsZS5yZWxlYXNlKCkpOwotICAgICAgICAKLSAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxk
KGJsb2NrLCBsYXN0Q2hpbGQoKSk7Ci0gICAgICAgIGJsb2NrLT5hZGRDaGlsZChjaGlsZCk7ICAg
IAotICAgIH0gZWxzZQotICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoY2hpbGQsIGxhc3RD
aGlsZCgpKTsKLX0KLQotfSAgICAKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCShyZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9XZWJD
b3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXggTWlsb3dza2kgKGFsZXhAbWls
b3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgUmVuZGVyTWF0aE1MRmVuY2VkX2gKLSNkZWZpbmUgUmVuZGVyTWF0aE1MRmVuY2VkX2gK
LQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRoTUxSb3cuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgUmVuZGVyTWF0aE1MRmVuY2VkIDogcHVi
bGljIFJlbmRlck1hdGhNTFJvdyB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWF0aE1MRmVuY2VkKE5v
ZGUgKmZyYWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIAotcHJpdmF0ZToKLSAgICB2b2lkIG1ha2VGZW5jZXMo
KTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1ha2VPcGVyYXRvclN0eWxlKCk7Ci0gICAgVUNo
YXIgbV9vcGVuOwotICAgIFVDaGFyIG1fY2xvc2U7Ci0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1f
c2VwYXJhdG9yczsKLX07Ci0gICAgCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotCi0j
ZW5kaWYgLy8gUmVuZGVyTWF0aE1MRmVuY2VkX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bWF0aG1sL1JlbmRlck1hdGhNTEZyYWN0aW9uLmNwcAkocmV2aXNpb24gNzUzNTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDE4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXggTWlsb3dz
a2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBGcmFuw6dvaXMgU2F1c3NldCAoc2F1c3NldEBnbWFpbC5jb20pLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKE1BVEhNTCkKLQotI2luY2x1ZGUgIlJlbmRlck1hdGhNTEZyYWN0aW9uLmgi
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5o
IgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAot
dXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5hbWVzOwotCi1zdGF0aWMgY29uc3QgZG91YmxlIGdIb3Jp
em9udGFsUGFkID0gMC4yOwotc3RhdGljIGNvbnN0IGludCBnTGluZVRoaW4gPSAxOwotc3RhdGlj
IGNvbnN0IGludCBnTGluZU1lZGl1bSA9IDM7Ci1zdGF0aWMgY29uc3QgaW50IGdMaW5lVGhpY2sg
PSA1Owotc3RhdGljIGNvbnN0IGRvdWJsZSBnRnJhY3Rpb25BbGlnbm1lbnQgPSAwLjI1Owotc3Rh
dGljIGNvbnN0IGRvdWJsZSBnRnJhY3Rpb25CYXJXaWR0aCA9IDAuMDU7Ci1zdGF0aWMgY29uc3Qg
ZG91YmxlIGdEZW5vbWluYXRvclBhZCA9IDAuMTsKLQotUmVuZGVyTWF0aE1MRnJhY3Rpb246OlJl
bmRlck1hdGhNTEZyYWN0aW9uKEVsZW1lbnQqIGZyYWN0aW9uKSAKLSAgICA6IFJlbmRlck1hdGhN
TEJsb2NrKGZyYWN0aW9uKQotICAgICwgbV9saW5lVGhpY2tuZXNzKGdMaW5lVGhpbikKLXsKLSAg
ICBzZXRDaGlsZHJlbklubGluZShmYWxzZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rp
b246OnVwZGF0ZUZyb21FbGVtZW50KCkKLXsKLSAgICAvLyBGSVhNRTogbWZyYWMgd2hlcmUgYmV2
ZWxsZWQ9dHJ1ZSB3aWxsIG5lZWQgdG8gcmVvcmdhbml6ZSB0aGUgZGVzY2VuZGFudHMKLSAgICBp
ZiAoaXNFbXB0eSgpKSAKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEVsZW1lbnQqIGZyYWN0
aW9uID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSk7Ci0gICAgCi0gICAgUmVuZGVyT2Jq
ZWN0KiBudW1lcmF0b3IgPSBmaXJzdENoaWxkKCk7Ci0gICAgU3RyaW5nIG5hbGlnbiA9IGZyYWN0
aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om51bWFsaWduQXR0cik7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5hbGlnbiwgImxlZnQiKSkKLSAgICAgICAgbnVtZXJhdG9yLT5zdHls
ZSgpLT5zZXRUZXh0QWxpZ24oTEVGVCk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFsaWduLCAicmlnaHQiKSkKLSAgICAgICAgbnVtZXJhdG9yLT5zdHlsZSgpLT5zZXRUZXh0QWxp
Z24oUklHSFQpOwotICAgIGVsc2UKLSAgICAgICAgbnVtZXJhdG9yLT5zdHlsZSgpLT5zZXRUZXh0
QWxpZ24oQ0VOVEVSKTsKLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIGRlbm9taW5hdG9yID0gbnVt
ZXJhdG9yLT5uZXh0U2libGluZygpOwotICAgIGlmICghZGVub21pbmF0b3IpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBTdHJpbmcgZGFsaWduID0gZnJhY3Rpb24tPmdldEF0dHJpYnV0ZShN
YXRoTUxOYW1lczo6ZGVub21hbGlnbkF0dHIpOwotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShk
YWxpZ24sICJsZWZ0IikpCi0gICAgICAgIGRlbm9taW5hdG9yLT5zdHlsZSgpLT5zZXRUZXh0QWxp
Z24oTEVGVCk7Ci0gICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGFsaWduLCAicmlnaHQi
KSkKLSAgICAgICAgZGVub21pbmF0b3ItPnN0eWxlKCktPnNldFRleHRBbGlnbihSSUdIVCk7Ci0g
ICAgZWxzZQotICAgICAgICBkZW5vbWluYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKENFTlRF
Uik7Ci0gICAgCi0gICAgLy8gRklYTUU6IHBhcnNlIHVuaXRzCi0gICAgU3RyaW5nIHRoaWNrbmVz
cyA9IGZyYWN0aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmxpbmV0aGlja25lc3NBdHRy
KTsKLSAgICBtX2xpbmVUaGlja25lc3MgPSBnTGluZVRoaW47Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHRoaWNrbmVzcywgInRoaW4iKSkKLSAgICAgICAgbV9saW5lVGhpY2tuZXNzID0gZ0xp
bmVUaGluOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywgIm1lZGl1
bSIpKQotICAgICAgICBtX2xpbmVUaGlja25lc3MgPSBnTGluZU1lZGl1bTsKLSAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZSh0aGlja25lc3MsICJ0aGljayIpKQotICAgICAgICBtX2xpbmVU
aGlja25lc3MgPSBnTGluZVRoaWNrOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRo
aWNrbmVzcywgIjAiKSkKLSAgICAgICAgbV9saW5lVGhpY2tuZXNzID0gMDsKLQotICAgIC8vIFVw
ZGF0ZSB0aGUgc3R5bGUgZm9yIHRoZSBwYWRkaW5nIG9mIHRoZSBkZW5vbWluYXRvciBmb3IgdGhl
IGxpbmUgdGhpY2tuZXNzCi0gICAgbGFzdENoaWxkKCktPnN0eWxlKCktPnNldFBhZGRpbmdUb3Ao
TGVuZ3RoKHN0YXRpY19jYXN0PGludD4obV9saW5lVGhpY2tuZXNzICsgc3R5bGUoKS0+Zm9udFNp
emUoKSAqIGdEZW5vbWluYXRvclBhZCksIEZpeGVkKSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1M
RnJhY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpCi17Ci0gICAgUmVuZGVyQmxvY2sqIHJvdyA9IG5ldyAocmVuZGVyQXJlbmEoKSkg
UmVuZGVyTWF0aE1MQmxvY2sobm9kZSgpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvd1N0
eWxlID0gbWFrZUJsb2NrU3R5bGUoKTsKLSAgICAKLSAgICByb3dTdHlsZS0+c2V0VGV4dEFsaWdu
KENFTlRFUik7Ci0gICAgTGVuZ3RoIHBhZChzdGF0aWNfY2FzdDxpbnQ+KHJvd1N0eWxlLT5mb250
U2l6ZSgpICogZ0hvcml6b250YWxQYWQpLCBGaXhlZCk7Ci0gICAgcm93U3R5bGUtPnNldFBhZGRp
bmdMZWZ0KHBhZCk7Ci0gICAgcm93U3R5bGUtPnNldFBhZGRpbmdSaWdodChwYWQpOwotICAgIAot
ICAgIC8vIE9ubHkgYWRkIHBhZGRpbmcgZm9yIHJvd3MgYXMgZGVub21pbmF0b3JzCi0gICAgYm9v
bCBpc051bWVyYXRvciA9IGlzRW1wdHkoKTsKLSAgICBpZiAoIWlzTnVtZXJhdG9yKSAKLSAgICAg
ICAgcm93U3R5bGUtPnNldFBhZGRpbmdUb3AoTGVuZ3RoKDIsIEZpeGVkKSk7Ci0gICAgCi0gICAg
cm93LT5zZXRTdHlsZShyb3dTdHlsZS5yZWxlYXNlKCkpOwotICAgIFJlbmRlckJsb2NrOjphZGRD
aGlsZChyb3csIGJlZm9yZUNoaWxkKTsKLSAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKLSAgICB1
cGRhdGVGcm9tRWxlbWVudCgpOwotfQotCi12b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpsYXlv
dXQoKQotewotICAgIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0KLSAgICAvLyBBZGp1c3QgdGhlIGZy
YWN0aW9uIGxpbmUgdGhpY2tuZXNzIGZvciB0aGUgem9vbQotICAgIGlmIChsYXN0Q2hpbGQoKSAm
JiBsYXN0Q2hpbGQoKS0+aXNSZW5kZXJCbG9jaygpKQotICAgICAgICBtX2xpbmVUaGlja25lc3Mg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fbGluZVRoaWNrbmVzcyAqIGNlaWwoZ0ZyYWN0aW9uQmFyV2lk
dGggKiBzdHlsZSgpLT5mb250U2l6ZSgpKSk7Ci0KLSAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7
Ci0KLX0KLQotdm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlvbjo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywg
dHgsIHR5KTsKLSAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgaW5m
by5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIGlmICghZmlyc3RDaGlsZCgpIHx8IW1fbGluZVRoaWNrbmVzcykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaW50IHZlcnRpY2FsT2Zmc2V0ID0gMDsKLSAgICAvLyBUaGUgY2hpbGRyZW4gYXJl
IGFsd2F5cyBSZW5kZXJNYXRoTUxCbG9jayBpbnN0YW5jZXMKLSAgICBpZiAoZmlyc3RDaGlsZCgp
LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKLSAgICAgICAgaW50IGFkanVzdEZvclRoaWNrbmVz
cyA9IG1fbGluZVRoaWNrbmVzcyA+IDEgPyBtX2xpbmVUaGlja25lc3MgLyAyIDogMTsKLSAgICAg
ICAgaWYgKG1fbGluZVRoaWNrbmVzcyAlIDIgPT0gMSkKLSAgICAgICAgICAgIGFkanVzdEZvclRo
aWNrbmVzcysrOwotICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogbnVtZXJhdG9yID0gdG9SZW5k
ZXJNYXRoTUxCbG9jayhmaXJzdENoaWxkKCkpOwotICAgICAgICBpZiAobnVtZXJhdG9yLT5pc1Jl
bmRlck1hdGhNTFJvdygpKQotICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3It
Pm9mZnNldEhlaWdodCgpICsgYWRqdXN0Rm9yVGhpY2tuZXNzOwotICAgICAgICBlbHNlIAotICAg
ICAgICAgICAgdmVydGljYWxPZmZzZXQgPSBudW1lcmF0b3ItPm9mZnNldEhlaWdodCgpOyAgICAg
ICAgCi0gICAgfQotICAgIAotICAgIHR4ICs9IHgoKTsKLSAgICB0eSArPSB5KCkgKyB2ZXJ0aWNh
bE9mZnNldDsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICAKLSAgICBpbmZv
LmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhzdGF0aWNfY2FzdDxmbG9hdD4obV9saW5lVGhp
Y2tuZXNzKSk7Ci0gICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7
Ci0gICAgaW5mby5jb250ZXh0LT5zZXRTdHJva2VDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIENvbG9yU3BhY2VTUkdCKTsKLSAgICAKLSAgICBp
bmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSksIEludFBvaW50KHR4ICsgb2Zm
c2V0V2lkdGgoKSwgdHkpKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLX0K
LQotaW50IFJlbmRlck1hdGhNTEZyYWN0aW9uOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGlu
ZSwgYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQ
b3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAgICBpZiAoZmlyc3RDaGls
ZCgpICYmIGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7Ci0gICAgICAgIFJl
bmRlck1hdGhNTEJsb2NrKiBudW1lcmF0b3IgPSB0b1JlbmRlck1hdGhNTEJsb2NrKGZpcnN0Q2hp
bGQoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiB0aGUgYmFzZWxpbmUgc2hvdWxkIGFkanVzdCBzbyB0
aGUgZnJhY3Rpb24gbGluZSBhbGlnbnMKLSAgICAgICAgLy8gcmVsYXRpdmUgY2VydGFpbiBvcGVy
YXRvcnMgKGUuZy4gYWxpZ25zIHdpdGggdGhlIGhvcml6b250YWwKLSAgICAgICAgLy8gc3Ryb2tl
IG9mIHRoZSBwbHVzKS4gIDEvMyBvZiB0aGUgY3VycmVudCBmb250IHNpemUgaXMganVzdAotICAg
ICAgICAvLyBhIGdvb2QgZ3Vlc3MuCi0gICAgICAgIHJldHVybiBudW1lcmF0b3ItPm9mZnNldEhl
aWdodCgpICsgc3R5bGUoKS0+Zm9udFNpemUoKSAvIDM7Ci0gICAgfQotICAgIHJldHVybiBSZW5k
ZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIGZpcnN0TGluZSwg
bGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7Ci19Ci0KLX0KLQotCi0jZW5kaWYgLy8g
RU5BQkxFKE1BVEhNTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxG
cmFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxGcmFjdGlvbi5oCShyZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9S
ZW5kZXJNYXRoTUxGcmFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20p
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIEZyYW7Dp29pcyBT
YXVzc2V0IChzYXVzc2V0QGdtYWlsLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZuZGVmIFJlbmRlck1hdGhNTEZyYWN0aW9uX2gKLSNkZWZpbmUgUmVu
ZGVyTWF0aE1MRnJhY3Rpb25faAotCi0jaWYgRU5BQkxFKE1BVEhNTCkKLQotI2luY2x1ZGUgIlJl
bmRlck1hdGhNTEJsb2NrLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVy
TWF0aE1MRnJhY3Rpb24gOiBwdWJsaWMgUmVuZGVyTWF0aE1MQmxvY2sgewotcHVibGljOgotICAg
IFJlbmRlck1hdGhNTEZyYWN0aW9uKEVsZW1lbnQqIGZyYWN0aW9uKTsKLSAgICB2aXJ0dWFsIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1
YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OyAKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBp
bnQgdHkpOwotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLXByaXZhdGU6
Ci0gICAgaW50IG1fbGluZVRoaWNrbmVzczsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShN
QVRITUwpCi0KLSNlbmRpZiAvLyBSZW5kZXJNYXRoTUxGcmFjdGlvbl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwCShyZXZpc2lvbiA3NTM1MCkKKysr
IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dz
a2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNp
bmNsdWRlICJSZW5kZXJNYXRoTUxNYXRoLmgiCi0KLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKLQot
UmVuZGVyTWF0aE1MTWF0aDo6UmVuZGVyTWF0aE1MTWF0aChOb2RlKiBtYXRoKQotICAgIDogUmVu
ZGVyTWF0aE1MUm93KG1hdGgpCi17Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShNQVRITUwp
Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguaAkocmV2aXNp
b24gNzUzNTApCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAg
QWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJNYXRoTUxNYXRoX2gKLSNkZWZpbmUg
UmVuZGVyTWF0aE1MTWF0aF9oCi0KLSNpZiBFTkFCTEUoTUFUSE1MKQotCi0jaW5jbHVkZSAiUmVu
ZGVyTWF0aE1MUm93LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICAKLWNsYXNzIFJlbmRl
ck1hdGhNTE1hdGggOiBwdWJsaWMgUmVuZGVyTWF0aE1MUm93IHsKLXB1YmxpYzoKLSAgICBSZW5k
ZXJNYXRoTUxNYXRoKE5vZGUqIGNvbnRhaW5lcik7Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVy
TWF0aE1MTWF0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLX07Ci0gICAgCi19Ci0KLQotI2Vu
ZGlmIC8vIEVOQUJMRShNQVRITUwpCi0jZW5kaWYgLy8gUmVuZGVyTWF0aE1MTWF0aF9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAJKHJl
dmlzaW9uIDc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwzNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgRnJhbsOnb2lzIFNhdXNzZXQgKHNhdXNz
ZXRAZ21haWwuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJS
ZW5kZXJNYXRoTUxPcGVyYXRvci5oIgotCi0jaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiTWF0aE1MTmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLSAgICAKLXVzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKLQotUmVuZGVy
TWF0aE1MT3BlcmF0b3I6OlJlbmRlck1hdGhNTE9wZXJhdG9yKE5vZGUqIGNvbnRhaW5lcikKLSAg
ICA6IFJlbmRlck1hdGhNTEJsb2NrKGNvbnRhaW5lcikKLSAgICAsIG1fc3RyZXRjaEhlaWdodCgw
KQotICAgICwgbV9vcGVyYXRvcigwKQotewotfQotCi1SZW5kZXJNYXRoTUxPcGVyYXRvcjo6UmVu
ZGVyTWF0aE1MT3BlcmF0b3IoTm9kZSogY29udGFpbmVyLCBVQ2hhciBvcGVyYXRvckNoYXIpCi0g
ICAgOiBSZW5kZXJNYXRoTUxCbG9jayhjb250YWluZXIpCi0gICAgLCBtX3N0cmV0Y2hIZWlnaHQo
MCkKLSAgICAsIG1fb3BlcmF0b3IoY29udmVydEh5cGhlbk1pbnVzVG9NaW51c1NpZ24ob3BlcmF0
b3JDaGFyKSkKLXsKLX0KLQotYm9vbCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6aXNDaGlsZEFsbG93
ZWQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqKSBjb25zdAotewotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0IGdPcGVyYXRvclNwYWNlciA9IDAuMWY7Ci1zdGF0
aWMgY29uc3QgZmxvYXQgZ09wZXJhdG9yRXhwYW5zaW9uID0gMS4yZjsKLQotdm9pZCBSZW5kZXJN
YXRoTUxPcGVyYXRvcjo6c3RyZXRjaFRvSGVpZ2h0KGludCBoZWlnaHQpCi17Ci0gICAgaWYgKGhl
aWdodCA9PSBtX3N0cmV0Y2hIZWlnaHQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0cmV0Y2hI
ZWlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KGhlaWdodCAqIGdPcGVyYXRvckV4cGFuc2lvbik7Ci0g
ICAgCi0gICAgdXBkYXRlQm94TW9kZWxJbmZvRnJvbVN0eWxlKCk7Ci0gICAgc2V0TmVlZHNMYXlv
dXQodHJ1ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmxheW91dCgpIAotewot
ICAgIC8vIEZJWE1FOiBUaGlzIHByb2JhYmx5IHNob3VsZG4ndCBiZSBjYWxsZWQgaGVyZSBidXQg
d2hlbiB0aGUgb3BlcmF0b3IKLSAgICAvLyBpc24ndCBzdHJldGNoZWQgKGUuZy4gb3V0c2lkZSBv
ZiBhIG1yb3cpLCBpdCBuZWVkcyB0byBiZSBjYWxsZWQgc29tZWhvdwotICAgIHVwZGF0ZUZyb21F
bGVtZW50KCk7Ci0gICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotfQotCi0vLyBUaGlzIGlzIGEg
dGFibGUgb2Ygc3RyZXRjaHkgY2hhcmFjdGVycy4KLS8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBy
ZWFkIGZyb20gdGhlIHVuaWNvZGUgY2hhcmFjdGVyaXN0aWNzIHNvbWVob3c/Ci0vLyB0YWJsZTog
IHN0cmV0Y2h5IG9wZXJhdG9yLCB0b3AgY2hhciwgZXh0ZW5zaW9uIGNoYXIsIGJvdHRvbSBjaGFy
LCBtaWRkbGUgY2hhcgotc3RhdGljIHN0cnVjdCBTdHJldGNoeUNoYXJhY3RlciB7Ci0gICAgVUNo
YXIgY2hhcmFjdGVyOwotICAgIFVDaGFyIHRvcEdseXBoOwotICAgIFVDaGFyIGV4dGVuc2lvbkds
eXBoOwotICAgIFVDaGFyIGJvdHRvbUdseXBoOwotICAgIFVDaGFyIG1pZGRsZUdseXBoOwotfSBz
dHJldGNoeUNoYXJhY3RlcnNbMTNdID0gewotICAgIHsgMHgyOCAgLCAweDIzOWIsIDB4MjM5Yywg
MHgyMzlkLCAweDAgICAgfSwgLy8gbGVmdCBwYXJlbnRoZXNpcwotICAgIHsgMHgyOSAgLCAweDIz
OWUsIDB4MjM5ZiwgMHgyM2EwLCAweDAgICAgfSwgLy8gcmlnaHQgcGFyZW50aGVzaXMKLSAgICB7
IDB4NWIgICwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMywgMHgwICAgIH0sIC8vIGxlZnQgc3F1YXJl
IGJyYWNrZXQKLSAgICB7IDB4MjMwOCwgMHgyM2ExLCAweDIzYTIsIDB4MjNhMiwgMHgwICAgIH0s
IC8vIGxlZnQgY2VpbGluZwotICAgIHsgMHgyMzBhLCAweDIzYTIsIDB4MjNhMiwgMHgyM2EzLCAw
eDAgICAgfSwgLy8gbGVmdCBmbG9vcgotICAgIHsgMHg1ZCAgLCAweDIzYTQsIDB4MjNhNSwgMHgy
M2E2LCAweDAgICAgfSwgLy8gcmlnaHQgc3F1YXJlIGJyYWNrZXQKLSAgICB7IDB4MjMwOSwgMHgy
M2E0LCAweDIzYTUsIDB4MjNhNSwgMHgwICAgIH0sIC8vIHJpZ2h0IGNlaWxpbmcKLSAgICB7IDB4
MjMwYiwgMHgyM2E1LCAweDIzYTUsIDB4MjNhNiwgMHgwICAgIH0sIC8vIHJpZ2h0IGZsb29yCi0g
ICAgeyAweDdiICAsIDB4MjNhNywgMHgyM2FhLCAweDIzYTksIDB4MjNhOCB9LCAvLyBsZWZ0IGN1
cmx5IGJyYWNrZXQKLSAgICB7IDB4N2MgICwgMHgyM2QwLCAweDIzZDAsIDB4MjNkMCwgMHgwICAg
IH0sIC8vIHZlcnRpY2FsIGJhcgotICAgIHsgMHgyMDE2LCAweDIwMTYsIDB4MjAxNiwgMHgyMDE2
LCAweDAgICAgfSwgLy8gZG91YmxlIHZlcnRpY2FsIGxpbmUKLSAgICB7IDB4N2QgICwgMHgyM2Fi
LCAweDIzYWEsIDB4MjNhZCwgMHgyM2FjIH0sIC8vIHJpZ2h0IGN1cmx5IGJyYWNrZXQKLSAgICB7
IDB4MjIyYiwgMHgyMzIwLCAweDIzYWUsIDB4MjMyMSwgMHgwICAgIH0gLy8gaW50ZWdyYWwgc2ln
bgotfTsKLQotLy8gV2Ugc3RhY2sgZ2x5cGhzIHVzaW5nIGEgMTRweCBoZWlnaHQgd2l0aCBhIGRp
c3BsYXllZCBnbHlwaCBoZWlnaHQKLS8vIG9mIDEwcHguICBUaGUgbGluZSBoZWlnaHQgaXMgc2V0
IHRvIGxlc3MgdGhhbiB0aGUgMTRweCBzbyB0aGF0IHRoZXJlCi0vLyBhcmUgbm8gYmxhbmsgc3Bh
Y2VzIGJldHdlZW4gdGhlIHN0YWNrZWQgZ2x5cGhzLgotLy8KLS8vIENlcnRhaW4gZ2x5cGhzIChl
LmcuIG1pZGRsZSBhbmQgYm90dG9tKSBuZWVkIHRvIGJlIGFkanVzdGVkIHVwd2FyZHMKLS8vIGlu
IHRoZSBzdGFjayBzbyB0aGF0IHRoZXJlIGlzbid0IGEgZ2FwLgotLy8KLS8vIEFsbCBvZiB0aGVz
ZSBzZXR0aW5ncyBhcmUgcmVwcmVzZW50ZWQgaW4gdGhlIGNvbnN0YW50cyBiZWxvdy4KLQotLy8g
RklYTUU6IHVzZSBmcmFjdGlvbnMgb2Ygc3R5bGUoKS0+Zm9udFNpemUoKSBmb3IgcHJvcGVyIHpv
b21pbmcvcmVzaXppbmcuCi1zdGF0aWMgY29uc3QgaW50IGdHbHlwaEZvbnRTaXplID0gMTQ7Ci1z
dGF0aWMgY29uc3QgaW50IGdHbHlwaExpbmVIZWlnaHQgPSAxMTsKLXN0YXRpYyBjb25zdCBpbnQg
Z01pbmltdW1TdHJldGNoSGVpZ2h0ID0gMjQ7Ci1zdGF0aWMgY29uc3QgaW50IGdHbHlwaEhlaWdo
dCA9IDEwOwotc3RhdGljIGNvbnN0IGludCBnVG9wR2x5cGhUb3BBZGp1c3QgPSAxOwotc3RhdGlj
IGNvbnN0IGludCBnTWlkZGxlR2x5cGhUb3BBZGp1c3QgPSAtMTsKLXN0YXRpYyBjb25zdCBpbnQg
Z0JvdHRvbUdseXBoVG9wQWRqdXN0ID0gLTM7Ci1zdGF0aWMgY29uc3QgZmxvYXQgZ01pbmltdW1S
YXRpb0ZvclN0cmV0Y2ggPSAwLjEwZjsKLQotdm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBk
YXRlRnJvbUVsZW1lbnQoKQotewotICAgIC8vIERlc3Ryb3kgb3VyIGN1cnJlbnQgY2hpbGRyZW4K
LSAgICBjaGlsZHJlbigpLT5kZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOwotCi0gICAgLy8gU2lu
Y2Ugd2Ugc2hhcmUgYSBub2RlIHdpdGggb3VyIGNoaWxkcmVuLCBkZXN0cm95aW5nIG91ciBjaGls
ZHJlbiB3aWxsIHNldCBvdXIgbm9kZSdzCi0gICAgLy8gcmVuZGVyZXIgdG8gMCwgc28gd2UgbmVl
ZCB0byByZS1zZXQgaXQgYmFjayB0byB0aGlzLgotICAgIG5vZGUoKS0+c2V0UmVuZGVyZXIodGhp
cyk7Ci0gICAgCi0gICAgLy8gSWYgdGhlIG9wZXJhdG9yIGlzIGZpeGVkLCBpdCB3aWxsIGJlIGNv
bnRhaW5lZCBpbiBtX29wZXJhdG9yCi0gICAgVUNoYXIgZmlyc3RDaGFyID0gbV9vcGVyYXRvcjsK
LSAgICAKLSAgICAvLyBUaGlzIGJvb2xlYW4gaW5kaWNhdGVzIHdoZXRoZXIgc3RyZXRjaGluZyBp
cyBkaXNhYmxlZCB2aWEgdGhlIG1hcmt1cC4KLSAgICBib29sIHN0cmV0Y2hEaXNhYmxlZCA9IGZh
bHNlOwotICAgIAotICAgIC8vIFdlIG1hZGUgbmVlZCB0aGUgZWxlbWVudCBsYXRlciBpZiB3ZSBj
YW4ndCBzdHJldGNoLgotICAgIGlmIChub2RlKCktPm5vZGVUeXBlKCkgPT0gTm9kZTo6RUxFTUVO
VF9OT0RFKSB7Ci0gICAgICAgIGlmIChFbGVtZW50KiBtbyA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKCkpKSB7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgc3RyZXRjaHlBdHRyID0gbW8t
PmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6c3RyZXRjaHlBdHRyKTsKLSAgICAgICAgICAgIHN0
cmV0Y2hEaXNhYmxlZCA9IGVxdWFsSWdub3JpbmdDYXNlKHN0cmV0Y2h5QXR0ciwgImZhbHNlIik7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHN0cmV0Y2hpbmcgaXNuJ3QgZGlzYWJs
ZWQsIGdldCB0aGUgY2hhcmFjdGVyIGZyb20gdGhlIHRleHQgY29udGVudC4KLSAgICAgICAgICAg
IGlmICghc3RyZXRjaERpc2FibGVkICYmICFmaXJzdENoYXIpIHsKLSAgICAgICAgICAgICAgICBT
dHJpbmcgb3BUZXh0ID0gbW8tPnRleHRDb250ZW50KCk7Ci0gICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7ICFmaXJzdENoYXIgJiYgaSA8IG9wVGV4dC5sZW5ndGgoKTsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShvcFRleHRbaV0p
KQotICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyID0gb3BUZXh0W2ldOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAv
LyBUaGUgJ2luZGV4JyBob2xkcyB0aGUgc3RyZXRjaGFibGUgY2hhcmFjdGVyJ3MgZ2x5cGggaW5m
b3JtYXRpb24KLSAgICBpbnQgaW5kZXggPSAtMTsKLSAgICAKLSAgICAvLyBpc1N0cmV0Y2h5IGlu
ZGljYXRlcyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgc3RyZWF0Y2hhYmxlIHZpYSBhIG51bWJl
ciBvZiBmYWN0b3JzLgotICAgIGJvb2wgaXNTdHJldGNoeSA9IGZhbHNlOwotICAgIAotICAgIC8v
IENoZWNrIGZvciBhIHN0cmV0Y2hhYmxlIGNoYXJhY3Rlci4KLSAgICBpZiAoIXN0cmV0Y2hEaXNh
YmxlZCAmJiBmaXJzdENoYXIpIHsKLSAgICAgICAgY29uc3QgaW50IG1heEluZGV4ID0gV1RGX0FS
UkFZX0xFTkdUSChzdHJldGNoeUNoYXJhY3RlcnMpOwotICAgICAgICBmb3IgKGluZGV4Kys7IGlu
ZGV4IDwgbWF4SW5kZXg7IGluZGV4KyspIHsKLSAgICAgICAgICAgIGlmIChzdHJldGNoeUNoYXJh
Y3RlcnNbaW5kZXhdLmNoYXJhY3RlciA9PSBmaXJzdENoYXIpIHsKLSAgICAgICAgICAgICAgICBp
c1N0cmV0Y2h5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBXZSBvbmx5IHN0cmV0Y2ggY2hhcmFjdGVy
IGlmIHRoZSBzdHJldGNoIGhlaWdodCBpcyBsYXJnZXIgdGhhbiBhIG1pbmltdW0gc2l6ZSAoZS5n
LiAyNHB4KS4KLSAgICBib29sIHNob3VsZFN0cmV0Y2ggPSBpc1N0cmV0Y2h5ICYmIG1fc3RyZXRj
aEhlaWdodD5nTWluaW11bVN0cmV0Y2hIZWlnaHQ7Ci0gICAgCi0gICAgLy8gRWl0aGVyIHN0cmV0
Y2ggaXMgZGlzYWJsZWQgb3Igd2UgZG9uJ3QgaGF2ZSBhIHN0cmV0Y2hhYmxlIGNoYXJhY3RlciBv
dmVyIHRoZSBtaW5pbXVtIGhlaWdodAotICAgIGlmIChzdHJldGNoRGlzYWJsZWQgfHwgIXNob3Vs
ZFN0cmV0Y2gpIHsKLSAgICAgICAgbV9pc1N0YWNrZWQgPSBmYWxzZTsKLSAgICAgICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5lciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2so
bm9kZSgpKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIG5ld1N0eWxlLT5pbmhlcml0RnJvbShz
dHlsZSgpKTsKLSAgICAgICAgbmV3U3R5bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKLSAg
ICAgICAgbmV3U3R5bGUtPnNldFZlcnRpY2FsQWxpZ24oQkFTRUxJTkUpOwotICAgICAgICAKLSAg
ICAgICAgLy8gQ2hlY2sgZm9yIGEgc3RyZXRjaGFibGUgY2hhcmFjdGVyIHRoYXQgaXMgdW5kZXIg
dGhlIG1pbmltdW0gaGVpZ2h0IGFuZCB1c2UgdGhlCi0gICAgICAgIC8vIGZvbnQgc2l6ZSB0byBh
ZGp1c3QgdGhlIGdseXBoIHNpemUuCi0gICAgICAgIGludCBjdXJyZW50Rm9udFNpemUgPSBzdHls
ZSgpLT5mb250U2l6ZSgpOwotICAgICAgICBpZiAoIXN0cmV0Y2hEaXNhYmxlZCAmJiBpc1N0cmV0
Y2h5ICYmIG1fc3RyZXRjaEhlaWdodCA+IDAgJiYgbV9zdHJldGNoSGVpZ2h0IDw9IGdNaW5pbXVt
U3RyZXRjaEhlaWdodCAgJiYgbV9zdHJldGNoSGVpZ2h0ID4gY3VycmVudEZvbnRTaXplKSB7Ci0g
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKLSAgICAgICAgICAgIGRlc2Muc2V0SXNB
YnNvbHV0ZVNpemUodHJ1ZSk7Ci0gICAgICAgICAgICBkZXNjLnNldFNwZWNpZmllZFNpemUobV9z
dHJldGNoSGVpZ2h0KTsKLSAgICAgICAgICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKG1fc3RyZXRj
aEhlaWdodCk7Ci0gICAgICAgICAgICBuZXdTdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlc2Mp
OwotICAgICAgICAgICAgbmV3U3R5bGUtPmZvbnQoKS51cGRhdGUobmV3U3R5bGUtPmZvbnQoKS5m
b250U2VsZWN0b3IoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb250YWluZXItPnNldFN0eWxl
KG5ld1N0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgIGFkZENoaWxkKGNvbnRhaW5lcik7Ci0gICAg
ICAgIAotICAgICAgICAvLyBCdWlsZCB0aGUgdGV4dCBvZiB0aGUgb3BlcmF0b3IuCi0gICAgICAg
IFJlbmRlclRleHQqIHRleHQgPSAwOwotICAgICAgICBpZiAobV9vcGVyYXRvcikgCi0gICAgICAg
ICAgICB0ZXh0ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJUZXh0KG5vZGUoKSwgU3RyaW5n
SW1wbDo6Y3JlYXRlKCZtX29wZXJhdG9yLCAxKSk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUoKS0+
bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05PREUpCi0gICAgICAgICAgICBpZiAoRWxlbWVu
dCogbW8gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSkKLSAgICAgICAgICAgICAgICB0
ZXh0ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJUZXh0KG5vZGUoKSwgbW8tPnRleHRDb250
ZW50KCkucmVwbGFjZShoeXBoZW5NaW51cywgbWludXNTaWduKS5pbXBsKCkpOwotICAgICAgICAv
LyBJZiB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSB0ZXh0LCBsZWF2ZSBpdCBibGFuay4KLSAgICAg
ICAgaWYgKHRleHQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gdGV4dFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgICAgICAgICAgdGV4dFN0eWxlLT5pbmhlcml0
RnJvbShjb250YWluZXItPnN0eWxlKCkpOwotICAgICAgICAgICAgdGV4dC0+c2V0U3R5bGUodGV4
dFN0eWxlLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBjb250YWluZXItPmFkZENoaWxkKHRleHQp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQnVpbGQgc3RyZXRjaGFibGUg
Y2hhcmFjdGVycyBhcyBhIHN0YWNrIG9mIGdseXBocy4KLSAgICAgICAgbV9pc1N0YWNrZWQgPSB0
cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0ubWlk
ZGxlR2x5cGgpIHsKLSAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtaWRkbGUgZ2x5cGggKGUuZy4g
YSBjdXJseSBicmFja2V0KSB0aGF0IHJlcXVpcmVzIHNwZWNpYWwgcHJvY2Vzc2luZy4KLSAgICAg
ICAgICAgIGludCBoYWxmID0gKG1fc3RyZXRjaEhlaWdodCAtIGdHbHlwaEhlaWdodCkgLyAyOwot
ICAgICAgICAgICAgaWYgKGhhbGYgPD0gZ0dseXBoSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2Ugb25seSBoYXZlIGVub3VnaCBzcGFjZSBmb3IgYSBzaW5nbGUgbWlkZGxlIGdseXBoLgot
ICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0udG9w
R2x5cGgsIGhhbGYsIGdUb3BHbHlwaFRvcEFkanVzdCk7Ci0gICAgICAgICAgICAgICAgY3JlYXRl
R2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5taWRkbGVHbHlwaCwgZ0dseXBoSGVpZ2h0
LCBnTWlkZGxlR2x5cGhUb3BBZGp1c3QpOwotICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0
cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uYm90dG9tR2x5cGgsIDAsIGdCb3R0b21HbHlwaFRvcEFk
anVzdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gZXh0ZW5kIGJvdGggdGhlIHRvcCBhbmQgYm90dG9tIHRvIHRoZSBtaWRkbGUuCi0gICAgICAg
ICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS50b3BHbHlwaCwg
Z0dseXBoSGVpZ2h0LCBnVG9wR2x5cGhUb3BBZGp1c3QpOwotICAgICAgICAgICAgICAgIGludCBy
ZW1haW5pbmcgPSBoYWxmIC0gZ0dseXBoSGVpZ2h0OwotICAgICAgICAgICAgICAgIHdoaWxlIChy
ZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPCBnR2x5
cGhIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5
Q2hhcmFjdGVyc1tpbmRleF0uZXh0ZW5zaW9uR2x5cGgsIHJlbWFpbmluZyk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZW1haW5pbmcgPSAwOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJz
W2luZGV4XS5leHRlbnNpb25HbHlwaCwgZ0dseXBoSGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZyAtPSBnR2x5cGhIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8g
VGhlIG1pZGRsZSBnbHlwaCBpbiB0aGUgc3RhY2suCi0gICAgICAgICAgICAgICAgY3JlYXRlR2x5
cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5taWRkbGVHbHlwaCwgZ0dseXBoSGVpZ2h0LCBn
TWlkZGxlR2x5cGhUb3BBZGp1c3QpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIFRoZSByZW1haW5pbmcgaXMgdGhlIHRvcCBoYWxmIG1pbnVzIHRoZSBtaWRkbGUgZ2x5cGgg
aGVpZ2h0LgotICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IGhhbGYgLSBnR2x5cGhIZWlnaHQ7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgZnVs
bCBoZWlnaHQgaW4gY2FzZSB0aGUgaGVpZ2h0IGlzIG9kZC4KLSAgICAgICAgICAgICAgICBpZiAo
bV9zdHJldGNoSGVpZ2h0ICUgMiA9PSAxKQotICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcr
KzsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBFeHRlbmQgdG8gdGhlIGJv
dHRvbSBnbHlwaC4KLSAgICAgICAgICAgICAgICB3aGlsZSAocmVtYWluaW5nID4gMCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nIDwgZ0dseXBoSGVpZ2h0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjcmVhdGVHbHlwaChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmV4
dGVuc2lvbkdseXBoLCByZW1haW5pbmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWlu
aW5nID0gMDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uZXh0ZW5zaW9uR2x5
cGgsIGdHbHlwaEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgLT0g
Z0dseXBoSGVpZ2h0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIFRoZSBib3R0b20gZ2x5cGggaW4g
dGhlIHN0YWNrLgotICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFjdGVy
c1tpbmRleF0uYm90dG9tR2x5cGgsIDAsIGdCb3R0b21HbHlwaFRvcEFkanVzdCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBh
IG1pZGRsZSBnbHlwaCBhbmQgc28gd2UganVzdCBleHRlbmQgZnJvbSB0aGUgdG9wIHRvIHRoZSBi
b3R0b20gZ2x5cGguCi0gICAgICAgICAgICBpbnQgcmVtYWluaW5nID0gbV9zdHJldGNoSGVpZ2h0
IC0gMiAqIGdHbHlwaEhlaWdodDsKLSAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hh
cmFjdGVyc1tpbmRleF0udG9wR2x5cGgsIGdHbHlwaEhlaWdodCwgZ1RvcEdseXBoVG9wQWRqdXN0
KTsKLSAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlbWFpbmluZyA8IGdHbHlwaEhlaWdodCkgewotICAgICAgICAgICAgICAgICAgICBjcmVh
dGVHbHlwaChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLmV4dGVuc2lvbkdseXBoLCByZW1haW5p
bmcpOwotICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcgPSAwOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFj
dGVyc1tpbmRleF0uZXh0ZW5zaW9uR2x5cGgsIGdHbHlwaEhlaWdodCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlbWFpbmluZyAtPSBnR2x5cGhIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2lu
ZGV4XS5ib3R0b21HbHlwaCwgMCwgZ0JvdHRvbUdseXBoVG9wQWRqdXN0KTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6Y3Jl
YXRlU3RhY2thYmxlU3R5bGUoaW50IHNpemUsIGludCB0b3BSZWxhdGl2ZSkKLXsKLSAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwotICAgIG5l
d1N0eWxlLT5pbmhlcml0RnJvbShzdHlsZSgpKTsKLSAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShC
TE9DSyk7Ci0gICAgCi0gICAgRm9udERlc2NyaXB0aW9uIGRlc2M7Ci0gICAgZGVzYy5zZXRJc0Fi
c29sdXRlU2l6ZSh0cnVlKTsKLSAgICBkZXNjLnNldFNwZWNpZmllZFNpemUoZ0dseXBoRm9udFNp
emUpOwotICAgIGRlc2Muc2V0Q29tcHV0ZWRTaXplKGdHbHlwaEZvbnRTaXplKTsKLSAgICBuZXdT
dHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKGRlc2MpOwotICAgIG5ld1N0eWxlLT5mb250KCkudXBk
YXRlKG5ld1N0eWxlLT5mb250KCkuZm9udFNlbGVjdG9yKCkpOwotICAgIG5ld1N0eWxlLT5zZXRM
aW5lSGVpZ2h0KExlbmd0aChnR2x5cGhMaW5lSGVpZ2h0LCBGaXhlZCkpOwotICAgIG5ld1N0eWxl
LT5zZXRWZXJ0aWNhbEFsaWduKFRPUCk7Ci0KLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgICAgIG5l
d1N0eWxlLT5zZXRNYXhIZWlnaHQoTGVuZ3RoKHNpemUsIEZpeGVkKSk7Ci0gICAgCi0gICAgbmV3
U3R5bGUtPnNldE92ZXJmbG93WShPSElEREVOKTsKLSAgICBuZXdTdHlsZS0+c2V0T3ZlcmZsb3dY
KE9ISURERU4pOwotICAgIGlmICh0b3BSZWxhdGl2ZSkgewotICAgICAgICBuZXdTdHlsZS0+c2V0
VG9wKExlbmd0aCh0b3BSZWxhdGl2ZSwgRml4ZWQpKTsKLSAgICAgICAgbmV3U3R5bGUtPnNldFBv
c2l0aW9uKFJlbGF0aXZlUG9zaXRpb24pOwotICAgIH0KLQotICAgIHJldHVybiBuZXdTdHlsZTsK
LX0KLQotUmVuZGVyQmxvY2sqIFJlbmRlck1hdGhNTE9wZXJhdG9yOjpjcmVhdGVHbHlwaChVQ2hh
ciBnbHlwaCwgaW50IHNpemUsIGludCBjaGFyUmVsYXRpdmUsIGludCB0b3BSZWxhdGl2ZSkKLXsK
LSAgICBSZW5kZXJCbG9jayogY29udGFpbmVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJN
YXRoTUxCbG9jayhub2RlKCkpOwotICAgIGNvbnRhaW5lci0+c2V0U3R5bGUoY3JlYXRlU3RhY2th
YmxlU3R5bGUoc2l6ZSwgdG9wUmVsYXRpdmUpLnJlbGVhc2UoKSk7Ci0gICAgYWRkQ2hpbGQoY29u
dGFpbmVyKTsKLSAgICBSZW5kZXJCbG9jayogcGFyZW50ID0gY29udGFpbmVyOwotICAgIGlmIChj
aGFyUmVsYXRpdmUpIHsKLSAgICAgICAgUmVuZGVyQmxvY2sqIGNoYXJCbG9jayA9IG5ldyAocmVu
ZGVyQXJlbmEoKSkgUmVuZGVyQmxvY2sobm9kZSgpKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBjaGFyU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIGNoYXJTdHls
ZS0+aW5oZXJpdEZyb20oY29udGFpbmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY2hhclN0eWxlLT5z
ZXREaXNwbGF5KElOTElORV9CTE9DSyk7Ci0gICAgICAgIGNoYXJTdHlsZS0+c2V0VG9wKExlbmd0
aChjaGFyUmVsYXRpdmUsIEZpeGVkKSk7Ci0gICAgICAgIGNoYXJTdHlsZS0+c2V0UG9zaXRpb24o
UmVsYXRpdmVQb3NpdGlvbik7Ci0gICAgICAgIGNoYXJCbG9jay0+c2V0U3R5bGUoY2hhclN0eWxl
KTsKLSAgICAgICAgcGFyZW50LT5hZGRDaGlsZChjaGFyQmxvY2spOwotICAgICAgICBwYXJlbnQg
PSBjaGFyQmxvY2s7Ci0gICAgfQotICAgIAotICAgIFJlbmRlclRleHQqIHRleHQgPSBuZXcgKHJl
bmRlckFyZW5hKCkpIFJlbmRlclRleHQobm9kZSgpLCBTdHJpbmdJbXBsOjpjcmVhdGUoJmdseXBo
LCAxKSk7Ci0gICAgdGV4dC0+c2V0U3R5bGUoY29udGFpbmVyLT5zdHlsZSgpKTsKLSAgICBwYXJl
bnQtPmFkZENoaWxkKHRleHQpOwotICAgIHJldHVybiBjb250YWluZXI7Ci19Ci0KLWludCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcjo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2Rl
IGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgaWYgKG1faXNTdGFja2VkKQotICAgICAg
ICByZXR1cm4gbV9zdHJldGNoSGVpZ2h0ICogMiAvIDMgLSAobV9zdHJldGNoSGVpZ2h0IC0gc3Rh
dGljX2Nhc3Q8aW50PihtX3N0cmV0Y2hIZWlnaHQgLyBnT3BlcmF0b3JFeHBhbnNpb24pKSAvIDI7
ICAgIAotICAgIHJldHVybiBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGlj
QmFzZWxpbmUsIGZpcnN0TGluZSwgbGluZURpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7Ci19
Ci0gICAgCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1h
dGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRl
ck1hdGhNTE9wZXJhdG9yLmgJKHJldmlzaW9uIDc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tp
LmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IFJlbmRlck1hdGhNTE9wZXJhdG9yX2gKLSNkZWZpbmUgUmVuZGVyTWF0aE1MT3BlcmF0b3JfaAot
Ci0jaWYgRU5BQkxFKE1BVEhNTCkKLQotI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCi0jaW5j
bHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAot
Y2xhc3MgUmVuZGVyTWF0aE1MT3BlcmF0b3IgOiBwdWJsaWMgUmVuZGVyTWF0aE1MQmxvY2sgewot
cHVibGljOgotICAgIFJlbmRlck1hdGhNTE9wZXJhdG9yKE5vZGUqIGNvbnRhaW5lcik7Ci0gICAg
UmVuZGVyTWF0aE1MT3BlcmF0b3IoTm9kZSogY29udGFpbmVyLCBVQ2hhciBvcGVyYXRvckNoYXIp
OwotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IHBpeGVsSGVp
Z2h0KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsgCi0gICAgdmlydHVh
bCBib29sIGlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7
Ci0gICAgdmlydHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmly
c3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25D
b250YWluaW5nTGluZSkgY29uc3Q7Ci0gICAgICAgIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlU3Rh
Y2thYmxlU3R5bGUoaW50IHNpemUsIGludCB0b3BSZWxhdGl2ZSk7Ci0gICAgdmlydHVhbCBSZW5k
ZXJCbG9jayogY3JlYXRlR2x5cGgoVUNoYXIgZ2x5cGgsIGludCBzaXplID0gMCwgaW50IGNoYXJS
ZWxhdGl2ZSA9IDAsIGludCB0b3BSZWxhdGl2ZSA9IDApOwotICAgIAotcHJpdmF0ZToKLSAgICBp
bnQgbV9zdHJldGNoSGVpZ2h0OwotICAgIGJvb2wgbV9pc1N0YWNrZWQ7Ci0gICAgVUNoYXIgbV9v
cGVyYXRvcjsKLX07Ci0KLWlubGluZSBSZW5kZXJNYXRoTUxPcGVyYXRvciogdG9SZW5kZXJNYXRo
TUxPcGVyYXRvcihSZW5kZXJNYXRoTUxCbG9jayogYmxvY2spCi17IAotICAgIEFTU0VSVCghYmxv
Y2sgfHwgYmxvY2stPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yKj4oYmxvY2spOwotfQotCi1pbmxpbmUgY29uc3Qg
UmVuZGVyTWF0aE1MT3BlcmF0b3IqIHRvUmVuZGVyTWF0aE1MT3BlcmF0b3IoY29uc3QgUmVuZGVy
TWF0aE1MQmxvY2sqIGJsb2NrKQoteyAKLSAgICBBU1NFUlQoIWJsb2NrIHx8IGJsb2NrLT5pc1Jl
bmRlck1hdGhNTE9wZXJhdG9yKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJNYXRoTUxPcGVyYXRvcio+KGJsb2NrKTsKLX0KLQotaW5saW5lIFVDaGFyIGNvbnZlcnRIeXBo
ZW5NaW51c1RvTWludXNTaWduKFVDaGFyIGdseXBoKQotewotICAgIC8vIFdoZW4gcmVuZGVyZWQg
YXMgYSBtYXRoZW1hdGljYWwgb3BlcmF0b3IsIG1pbnVzIGdseXBoIHNob3VsZCBiZSBsYXJnZXIu
Ci0gICAgaWYgKGdseXBoID09IGh5cGhlbk1pbnVzKQotICAgICAgICByZXR1cm4gbWludXNTaWdu
OwotICAgIAotICAgIHJldHVybiBnbHlwaDsKLX0KLQotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1B
VEhNTCkKLSNlbmRpZiAvLyBSZW5kZXJNYXRoTUxPcGVyYXRvcl9oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCShyZXZpc2lvbiA3NTM1MCkKKysrIFNv
dXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwyNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4IE1pbG93c2tp
IChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgRnJhbsOnb2lzIFNhdXNzZXQgKHNhdXNzZXRAZ21haWwuY29tKS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRoTUxSb290LmgiCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi11c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7Ci0K
LS8vIExlZnQgbWFyZ2luIG9mIHRoZSByYWRpY2FsIChweCkKLWNvbnN0IGludCBnUmFkaWNhbExl
ZnRNYXJnaW4gPSAzOwotLy8gQm90dG9tIHBhZGRpbmcgb2YgdGhlIHJhZGljYWwgKHB4KQotY29u
c3QgaW50IGdSYWRpY2FsQmFzZVBhZCA9IDM7Ci0vLyBUaHJlc2hvbGQgYWJvdmUgd2hpY2ggdGhl
IHJhZGljYWwgc2hhcGUgaXMgbW9kaWZpZWQgdG8gbG9vayBuaWNlIHdpdGggYmlnIGJhc2VzICgl
KQotY29uc3QgZmxvYXQgZ1RocmVzaG9sZEJhc2VIZWlnaHQgPSAxLjVmOwotLy8gUmFkaWNhbCB3
aWR0aCAoJSkKLWNvbnN0IGZsb2F0IGdSYWRpY2FsV2lkdGggPSAwLjc1ZjsKLS8vIEhvcml6b250
YWwgcG9zaXRpb24gb2YgdGhlIGJvdHRvbSBwb2ludCBvZiB0aGUgcmFkaWNhbCAoJSkKLWNvbnN0
IGZsb2F0IGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zPSAwLjVmOwotLy8gSG9yaXpvbnRhbCBwb3Np
dGlvbiBvZiB0aGUgdG9wIGxlZnQgcG9pbnQgb2YgdGhlIHJhZGljYWwgKCUpCi1jb25zdCBmbG9h
dCBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgPSAwLjhmOwotLy8gVmVydGljYWwgcG9zaXRpb24g
b2YgdGhlIHRvcCBsZWZ0IHBvaW50IG9mIHRoZSByYWRpY2FsICglKQotY29uc3QgZmxvYXQgZ1Jh
ZGljYWxUb3BMZWZ0UG9pbnRZUG9zID0gMC42MjVmOyAKLS8vIFZlcnRpY2FsIHNoaWZ0IG9mIHRo
ZSBsZWZ0IGVuZCBwb2ludCBvZiB0aGUgcmFkaWNhbCAoJSkKLWNvbnN0IGZsb2F0IGdSYWRpY2Fs
TGVmdEVuZFlTaGlmdCA9IDAuMDVmOwotLy8gUm9vdCBwYWRkaW5nIGFyb3VuZCB0aGUgYmFzZSAo
JSkKLWNvbnN0IGZsb2F0IGdSb290UGFkZGluZyA9IDAuMmY7Ci0vLyBBZGRpdGlvbmFsIGJvdHRv
bSByb290IHBhZGRpbmcgKCUpCi1jb25zdCBmbG9hdCBnUm9vdEJvdHRvbVBhZGRpbmcgPSAwLjJm
OwotICAgIAotLy8gUmFkaWNhbCBsaW5lIHRoaWNrbmVzcyAoJSkKLWNvbnN0IGZsb2F0IGdSYWRp
Y2FsTGluZVRoaWNrbmVzcyA9IDAuMDJmOwotLy8gUmFkaWNhbCB0aGljayBsaW5lIHRoaWNrbmVz
cyAoJSkKLWNvbnN0IGZsb2F0IGdSYWRpY2FsVGhpY2tMaW5lVGhpY2tuZXNzID0gMC4xZjsKLSAg
ICAKLVJlbmRlck1hdGhNTFJvb3Q6OlJlbmRlck1hdGhNTFJvb3QoTm9kZSAqZXhwcmVzc2lvbikg
Ci06IFJlbmRlck1hdGhNTEJsb2NrKGV4cHJlc3Npb24pIAotewotfQotCi12b2lkIFJlbmRlck1h
dGhNTFJvb3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogKQot
ewotICAgIGlmIChpc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQWRkIGEgYmxvY2sgZm9yIHRoZSBp
bmRleAotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJl
bmRlckJsb2NrKG5vZGUoKSk7Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gaW5kZXhTdHls
ZSA9IG1ha2VCbG9ja1N0eWxlKCk7Ci0gICAgICAgIGluZGV4U3R5bGUtPnNldERpc3BsYXkoSU5M
SU5FX0JMT0NLKTsKLSAgICAgICAgYmxvY2stPnNldFN0eWxlKGluZGV4U3R5bGUucmVsZWFzZSgp
KTsKLSAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGJsb2NrKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIEZJWE1FOiB0aGUgd3JhcHBpbmcgZG9lcyBub3Qgc2VlbSB0byBiZSBuZWVkZWQgYW55
bW9yZS4KLSAgICAgICAgLy8gdGhpcyBpcyB0aGUgYmFzZSwgc28gd3JhcCBpdCBzbyB3ZSBjYW4g
cGFkIGl0Ci0gICAgICAgIGJsb2NrID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhu
b2RlKCkpOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGJhc2VTdHlsZSA9IG1ha2VCbG9j
a1N0eWxlKCk7Ci0gICAgICAgIGJhc2VTdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxPQ0spOwot
ICAgICAgICBiYXNlU3R5bGUtPnNldFBhZGRpbmdMZWZ0KExlbmd0aCg1ICogZ1JhZGljYWxXaWR0
aCAsIFBlcmNlbnQpKTsKLSAgICAgICAgYmxvY2stPnNldFN0eWxlKGJhc2VTdHlsZS5yZWxlYXNl
KCkpOwotICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoYmxvY2spOwotICAgICAgICBibG9j
ay0+YWRkQ2hpbGQoY2hpbGQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGFsd2F5cyBhZGQg
dG8gdGhlIGluZGV4Ci0gICAgICAgIGZpcnN0Q2hpbGQoKS0+YWRkQ2hpbGQoY2hpbGQpOwotICAg
IH0KLX0KLSAgICAKLXZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZv
LCBpbnQgdHgsIGludCB0eSkKLXsKLSAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbyAs
IHR4ICwgdHkpOwotICAgIAotICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFmaXJzdENoaWxkKCkgfHwgIWxhc3RDaGls
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0eCArPSB4KCk7Ci0gICAgdHkgKz0geSgpOwot
ICAgIAotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBpbmRleEJveCA9IHRvUmVuZGVyQm94TW9k
ZWxPYmplY3QobGFzdENoaWxkKCkpOwotICAgIAotICAgIGludCBtYXhIZWlnaHQgPSBpbmRleEJv
eC0+b2Zmc2V0SGVpZ2h0KCk7Ci0gICAgLy8gZGVmYXVsdCB0byB0aGUgZm9udCBzaXplIGluIHBp
eGVscyBpZiB3ZSdyZSBlbXB0eQotICAgIGlmICghbWF4SGVpZ2h0KQotICAgICAgICBtYXhIZWln
aHQgPSBzdHlsZSgpLT5mb250U2l6ZSgpOwotICAgIGludCB3aWR0aCA9IGluZGV4Qm94LT5vZmZz
ZXRXaWR0aCgpOwotICAgIAotICAgIGludCBpbmRleFdpZHRoID0gMDsKLSAgICBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGN1cnJlbnQgIT0gbGFzdENo
aWxkKCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnQtPmlzQm94TW9kZWxPYmplY3QoKSkgewotICAg
ICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmpl
Y3QoY3VycmVudCk7Ci0gICAgICAgICAgICBpbmRleFdpZHRoICs9IGJveC0+b2Zmc2V0V2lkdGgo
KTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsK
LSAgICB9Ci0gICAgCi0gICAgaW50IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxl
KCktPmZvbnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKLSAgICBpbnQgdG9wU3RhcnRTaGlmdCA9
IDA7Ci0gICAgLy8gQmFzZSBoZWlnaHQgYWJvdmUgd2hpY2ggdGhlIHNoYXBlIG9mIHRoZSByb290
IGNoYW5nZXMKLSAgICBpbnQgdGhyZXNob2xkSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihnVGhy
ZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIAotICAgIGlmICht
YXhIZWlnaHQgPiB0aHJlc2hvbGRIZWlnaHQgJiYgdGhyZXNob2xkSGVpZ2h0KSB7Ci0gICAgICAg
IGZsb2F0IHNoaWZ0ID0gKG1heEhlaWdodCAtIHRocmVzaG9sZEhlaWdodCkgLyBzdGF0aWNfY2Fz
dDxmbG9hdD4odGhyZXNob2xkSGVpZ2h0KTsKLSAgICAgICAgaWYgKHNoaWZ0ID4gMS4pCi0gICAg
ICAgICAgICBzaGlmdCA9IDEuMGY7Ci0gICAgICAgIHRvcFN0YXJ0U2hpZnQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAqIHNoaWZ0KTsKLSAg
ICB9Ci0gICAgCi0gICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKLSAgICAKLSAgICBpbnQgcm9v
dFBhZCA9IHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUo
KSk7Ci0gICAgaW50IHN0YXJ0ID0gdHggKyBpbmRleFdpZHRoICsgZ1JhZGljYWxMZWZ0TWFyZ2lu
ICsgc3R5bGUoKS0+cGFkZGluZ0xlZnQoKS52YWx1ZSgpIC0gcm9vdFBhZDsKLSAgICB0eSArPSBz
dHlsZSgpLT5wYWRkaW5nVG9wKCkudmFsdWUoKSAtIHJvb3RQYWQ7Ci0gICAgCi0gICAgRmxvYXRQ
b2ludCB0b3BTdGFydChzdGFydCAtIHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBGbG9hdFBvaW50
IGJvdHRvbUxlZnQoc3RhcnQgLSBnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250V2lkdGgg
LCB0eSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BM
ZWZ0KHN0YXJ0IC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRYUG9zICogZnJvbnRXaWR0aCAsIHR5ICsg
Z1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50IGxl
ZnRFbmQoc3RhcnQgLSBmcm9udFdpZHRoICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZ
U2hpZnQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnNh
dmUoKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhnUmFkaWNh
bExpbmVUaGlja25lc3MgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKLSAgICBpbmZvLmNvbnRleHQt
PnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwg
Q29sb3JTcGFjZURldmljZVJHQik7Ci0gICAgaW5mby5jb250ZXh0LT5zZXRMaW5lSm9pbihNaXRl
ckpvaW4pOwotICAgIGluZm8uY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZSgpLT5mb250U2l6
ZSgpKTsKLSAgICAKLSAgICBQYXRoIHJvb3Q7Ci0gICAgCi0gICAgcm9vdC5tb3ZlVG8oRmxvYXRQ
b2ludCh0b3BTdGFydC54KCkgKyB3aWR0aCwgdHkpKTsKLSAgICAvLyBkcmF3IHRvcAotICAgIHJv
b3QuYWRkTGluZVRvKHRvcFN0YXJ0KTsKLSAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVy
IHRvIGJvdHRvbSBwb2ludCBvZiByYWRpY2FsCi0gICAgcm9vdC5hZGRMaW5lVG8oYm90dG9tTGVm
dCk7Ci0gICAgLy8gZHJhdyBmcm9tIGJvdHRvbSBwb2ludCB0byB0b3Agb2YgbGVmdCBwYXJ0IG9m
IHJhZGljYWwgYmFzZSAicG9ja2V0IgotICAgIHJvb3QuYWRkTGluZVRvKHRvcExlZnQpOwotICAg
IC8vIGRyYXcgdG8gZW5kCi0gICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7Ci0gICAgCi0gICAg
aW5mby5jb250ZXh0LT5zdHJva2VQYXRoKHJvb3QpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+
c2F2ZSgpOwotICAgIAotICAgIC8vIEJ1aWxkIGEgbWFzayB0byBkcmF3IHRoZSB0aGljayBwYXJ0
IG9mIHRoZSByb290LgotICAgIFBhdGggbWFzazsKLSAgICAKLSAgICBtYXNrLm1vdmVUbyh0b3BT
dGFydCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5l
VG8odG9wTGVmdCk7Ci0gICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54
KCkgLSBsZWZ0RW5kLngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKLSAgICAK
LSAgICBpbmZvLmNvbnRleHQtPmNsaXAobWFzayk7Ci0gICAgCi0gICAgLy8gRHJhdyB0aGUgdGhp
Y2sgcGFydCBvZiB0aGUgcm9vdC4KLSAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVz
cyhnUmFkaWNhbFRoaWNrTGluZVRoaWNrbmVzcyAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAg
IGluZm8uY29udGV4dC0+c2V0TGluZUNhcChTcXVhcmVDYXApOwotICAgIAotICAgIFBhdGggbGlu
ZTsKLSAgICBsaW5lLm1vdmVUbyhib3R0b21MZWZ0KTsKLSAgICBsaW5lLmFkZExpbmVUbyh0b3BM
ZWZ0KTsKLQotICAgIGluZm8uY29udGV4dC0+c3Ryb2tlUGF0aChsaW5lKTsKLSAgICAKLSAgICBp
bmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUo
KTsKLQotfQotCi12b2lkIFJlbmRlck1hdGhNTFJvb3Q6OmxheW91dCgpCi17Ci0gICAgUmVuZGVy
QmxvY2s6OmxheW91dCgpOwotCi0gICAgaWYgKCFmaXJzdENoaWxkKCkgfHwgIWxhc3RDaGlsZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbWF4SGVpZ2h0ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChsYXN0Q2hpbGQoKSktPm9mZnNldEhlaWdodCgpOwotICAgIAotICAgIFJlbmRlck9i
amVjdCogY3VycmVudCA9IGxhc3RDaGlsZCgpLT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKGN1cnJl
bnQpCi0gICAgICAgIGN1cnJlbnQtPnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ24oQkFTRUxJTkUp
OwotICAgIAotICAgIGlmICghbWF4SGVpZ2h0KQotICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgp
LT5mb250U2l6ZSgpOwotICAgIAotICAgIC8vIEJhc2UgaGVpZ2h0IGFib3ZlIHdoaWNoIHRoZSBz
aGFwZSBvZiB0aGUgcm9vdCBjaGFuZ2VzCi0gICAgaW50IHRocmVzaG9sZEhlaWdodCA9IHN0YXRp
Y19jYXN0PGludD4oZ1RocmVzaG9sZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsK
LSAgICBpbnQgdG9wU3RhcnRTaGlmdCA9IDA7Ci0gICAgCi0gICAgaWYgKG1heEhlaWdodCA+IHRo
cmVzaG9sZEhlaWdodCAmJiB0aHJlc2hvbGRIZWlnaHQpIHsKLSAgICAgICAgZmxvYXQgc2hpZnQg
PSAobWF4SGVpZ2h0IC0gdGhyZXNob2xkSGVpZ2h0KSAvIHN0YXRpY19jYXN0PGZsb2F0Pih0aHJl
c2hvbGRIZWlnaHQpOwotICAgICAgICBpZiAoc2hpZnQgPiAxLikKLSAgICAgICAgICAgIHNoaWZ0
ID0gMS4wZjsKLSAgICAgICAgaW50IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxl
KCktPmZvbnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKLSAgICAgICAgdG9wU3RhcnRTaGlmdCA9
IHN0YXRpY19jYXN0PGludD4oZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICog
c2hpZnQpOwotICAgICAgICAKLSAgICAgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0JvdHRvbShMZW5n
dGgoc3RhdGljX2Nhc3Q8aW50PihnUm9vdEJvdHRvbVBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6
ZSgpKSwgRml4ZWQpKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gUG9zaXRpb25pbmcgb2YgdGhlIGlu
ZGV4Ci0gICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGluZGV4Qm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChmaXJzdENoaWxkKCktPmZpcnN0Q2hpbGQoKSk7Ci0gICAgaWYgKCFpbmRleEJveCkK
LSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGludCBpbmRleFNoaWZ0ID0gaW5kZXhCb3gtPm9m
ZnNldFdpZHRoKCkgKyB0b3BTdGFydFNoaWZ0OwotICAgIGludCByYWRpY2FsSGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8aW50PigoMSAtIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcykgKiBtYXhIZWlnaHQp
OwotICAgIGludCByb290TWFyZ2luVG9wID0gcmFkaWNhbEhlaWdodCArIHN0eWxlKCktPnBhZGRp
bmdCb3R0b20oKS52YWx1ZSgpICsgaW5kZXhCb3gtPm9mZnNldEhlaWdodCgpIC0gKG1heEhlaWdo
dCArIHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQYWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSkp
OwotICAgIAotICAgIHN0eWxlKCktPnNldFBhZGRpbmdMZWZ0KExlbmd0aChpbmRleFNoaWZ0LCBG
aXhlZCkpOwotICAgIGlmIChyb290TWFyZ2luVG9wID4gMCkKLSAgICAgICAgc3R5bGUoKS0+c2V0
UGFkZGluZ1RvcChMZW5ndGgocm9vdE1hcmdpblRvcCArIHN0YXRpY19jYXN0PGludD4oZ1Jvb3RQ
YWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7Ci0gICAgCi0gICAgc2V0TmVl
ZHNMYXlvdXQodHJ1ZSk7Ci0gICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUs
IGZhbHNlKTsKLSAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Ci0KLSAgICBpbmRleEJveC0+c3R5
bGUoKS0+c2V0Qm90dG9tKExlbmd0aChyYWRpY2FsSGVpZ2h0ICsgc3R5bGUoKS0+cGFkZGluZ0Jv
dHRvbSgpLnZhbHVlKCksIEZpeGVkKSk7Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSd2ZSBwb3RlbnRp
YWxseSBjaGFuZ2VkIGl0cyBwb3NpdGlvbiwgd2UgbmVlZCBsYXlvdXQgdGhlIGluZGV4IGFnYWlu
LgotICAgIGluZGV4Qm94LT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICBpbmRleEJveC0+bGF5
b3V0KCk7Ci19Ci0gICAgCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotCi0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb290LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuaAkocmV2aXNpb24gNzUzNTAp
CisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleCBNaWxv
d3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBSZW5kZXJNYXRoTUxSb290X2gKLSNkZWZpbmUgUmVuZGVyTWF0
aE1MUm9vdF9oCi0KLSNpZiBFTkFCTEUoTUFUSE1MKQotCi0jaW5jbHVkZSAiUmVuZGVyTWF0aE1M
QmxvY2suaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotY2xhc3MgUmVuZGVyTWF0aE1M
Um9vdCA6IHB1YmxpYyBSZW5kZXJNYXRoTUxCbG9jayB7Ci1wdWJsaWM6Ci0gICAgUmVuZGVyTWF0
aE1MUm9vdChOb2RlKiBmcmFjdGlvbik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRl
ck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLX07Ci0gICAgCi19Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoTUFUSE1MKQotCi0jZW5kaWYgLy8gUmVuZGVyTWF0aE1MUm9vdF9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkocmV2aXNpb24gNzUzNTApCisrKyBT
b3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tp
IChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoTUFUSE1MKQotCi0jaW5j
bHVkZSAiUmVuZGVyTWF0aE1MUm93LmgiCi0KLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgotI2lu
Y2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
dXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5hbWVzOwotCi1SZW5kZXJNYXRoTUxSb3c6OlJlbmRlck1h
dGhNTFJvdyhOb2RlKiByb3cpCi0gICAgOiBSZW5kZXJNYXRoTUxCbG9jayhyb3cpCi17Ci19Ci0K
LWludCBSZW5kZXJNYXRoTUxSb3c6Om5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3QKLXsKLSAgICBp
bnQgbWF4SGVpZ2h0ID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0
Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgaWYgKGN1cnJlbnQtPmlzUmVuZGVyTWF0aE1MQmxvY2soKSkgewotICAgICAgICAgICAg
UmVuZGVyTWF0aE1MQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhjdXJyZW50KTsK
LSAgICAgICAgICAgIGludCBibG9ja0hlaWdodCA9IGJsb2NrLT5ub25PcGVyYXRvckhlaWdodCgp
OwotICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgYm94IGhhcyBhIGxhcmdlciBo
ZWlnaHQKLSAgICAgICAgICAgIGlmIChibG9ja0hlaWdodCA+IG1heEhlaWdodCkKLSAgICAgICAg
ICAgICAgICBtYXhIZWlnaHQgPSBibG9ja0hlaWdodDsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJy
ZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnJlbnQpOwotICAgICAgICAgICAg
Ly8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgYm94IGhhcyBhIGxhcmdlciBoZWlnaHQKLSAgICAgICAg
ICAgIGlmIChib3gtPm9mZnNldEhlaWdodCgpID4gbWF4SGVpZ2h0KQotICAgICAgICAgICAgICAg
IG1heEhlaWdodCA9IGJveC0+b2Zmc2V0SGVpZ2h0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgfQotICAgIHJldHVybiBtYXhIZWlnaHQ7Ci19Ci0KLXZvaWQgUmVuZGVyTWF0aE1MUm93Ojps
YXlvdXQoKSAKLXsKLSAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Ci0gICAgCi0gICAgaW50IG1h
eEhlaWdodCA9IDA7Ci0gICAgaW50IGNoaWxkQ291bnQgPSAwOwotICAgIGludCBvcGVyYXRvckNv
dW50ID0gMDsKLQotICAgIC8vIENhbGN1bGF0ZSB0aGUgbm9uLW9wZXJhdG9yIG1heCBoZWlnaHQg
b2YgdGhlIHJvdy4KLSAgICBpbnQgb3BlcmF0b3JIZWlnaHQgPSAwOwotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBjaGlsZENvdW50Kys7Ci0gICAgICAgIGlmIChj
dXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKLSAgICAgICAgICAgIFJlbmRlck1hdGhN
TEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1MQmxvY2soY3VycmVudCk7Ci0gICAgICAgICAg
ICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5vbi1vcGVyYXRvciBibG9jayBoYXMgYSBncmVhdGVy
IGhlaWdodC4KLSAgICAgICAgICAgIGlmICghYmxvY2stPmhhc0Jhc2UoKSAmJiAhYmxvY2stPmlz
UmVuZGVyTWF0aE1MT3BlcmF0b3IoKSAmJiBibG9jay0+b2Zmc2V0SGVpZ2h0KCkgPiBtYXhIZWln
aHQpCi0gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYmxvY2stPm9mZnNldEhlaWdodCgpOwot
ICAgICAgICAgICAgaWYgKGJsb2NrLT5oYXNCYXNlKCkgJiYgYmxvY2stPm5vbk9wZXJhdG9ySGVp
Z2h0KCkgPiBtYXhIZWlnaHQpIAotICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGJsb2NrLT5u
b25PcGVyYXRvckhlaWdodCgpOwotICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIGlzIGFuIG9w
ZXJhdG9yLCBjYXB0dXJlIHRoZSBtYXhpbXVtIGhlaWdodCBhbmQgaW5jcmVtZW50IHRoZSBjb3Vu
dC4KLSAgICAgICAgICAgIGlmIChibG9jay0+aXNSZW5kZXJNYXRoTUxPcGVyYXRvcigpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5vZmZzZXRIZWlnaHQoKSA+IG9wZXJhdG9ySGVpZ2h0
KQotICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckhlaWdodCA9IGJsb2NrLT5vZmZzZXRIZWln
aHQoKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRvckNvdW50Kys7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChj
dXJyZW50KTsKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGJveCBoYXMgYSBs
YXJnZXIgaGVpZ2h0LgotICAgICAgICAgICAgaWYgKGJveC0+b2Zmc2V0SGVpZ2h0KCkgPiBtYXhI
ZWlnaHQpCi0gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5vZmZzZXRIZWlnaHQoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoY2hpbGRDb3VudCA+IDAgJiYgY2hpbGRD
b3VudCA9PSBvcGVyYXRvckNvdW50KSB7Ci0gICAgICAgIC8vIFdlIGhhdmUgb25seSBvcGVyYXRv
cnMgYW5kIHNvIHNldCB0aGUgbWF4IGhlaWdodCB0byB0aGUgb3BlcmF0b3IgaGVpZ2h0LgotICAg
ICAgICBtYXhIZWlnaHQgPSBvcGVyYXRvckhlaWdodDsKLSAgICB9Ci0gICAgCi0gICAgLy8gU3Ry
ZXRjaCBldmVyeXRoaW5nIHRvIHRoZSBzYW1lIGhlaWdodCAoYmxvY2tzIGNhbiBpZ25vcmUgdGhl
IHJlcXVlc3QpLgotICAgIGlmIChtYXhIZWlnaHQgPiAwKSB7Ci0gICAgICAgIGJvb2wgZGlkU3Ry
ZXRjaCA9IGZhbHNlOwotICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0
Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKLSAg
ICAgICAgICAgIGlmIChjdXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxvY2sgPSB0b1JlbmRlck1hdGhNTEJsb2NrKGN1
cnJlbnQpOwotICAgICAgICAgICAgICAgIGJsb2NrLT5zdHJldGNoVG9IZWlnaHQobWF4SGVpZ2h0
KTsKLSAgICAgICAgICAgICAgICBkaWRTdHJldGNoID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBpZiAoZGlkU3RyZXRjaCkgewotICAgICAgICAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSk7Ci0gICAgICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHko
dHJ1ZSwgZmFsc2UpOwotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIAotfSAgICAKLQotaW50IFJlbmRlck1hdGhNTFJvdzo6YmFzZWxpbmVQ
b3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBk
aXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKLXsKLSAg
ICBpZiAoZmlyc3RDaGlsZCgpICYmIGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygp
KSB7Ci0gICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1MQmxv
Y2soZmlyc3RDaGlsZCgpKTsKLSAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlck1hdGhNTE9wZXJh
dG9yKCkpCi0gICAgICAgICAgICByZXR1cm4gYmxvY2stPnkoKSArIGJsb2NrLT5iYXNlbGluZVBv
c2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3Np
dGlvbk1vZGUpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmJhc2VsaW5l
UG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBv
c2l0aW9uTW9kZSk7Ci19Ci0gICAgCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5oCShyZXZpc2lvbiA3NTM1
MCkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxSb3cuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXggTWls
b3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgUmVuZGVyTWF0aE1MUm93X2gKLSNkZWZpbmUgUmVuZGVyTWF0
aE1MUm93X2gKLQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRoTUxC
bG9jay5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCi1jbGFzcyBSZW5kZXJNYXRoTUxS
b3cgOiBwdWJsaWMgUmVuZGVyTWF0aE1MQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlck1hdGhN
TFJvdyhOb2RlKiBjb250YWluZXIpOwotICAgIHZpcnR1YWwgYm9vbCBpc1JlbmRlck1hdGhNTFJv
dygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGludCBub25PcGVyYXRvckhl
aWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2Vs
aW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUg
PSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OyAgICAKLSAgICB2aXJ0dWFsIHZvaWQg
c3RyZXRjaFRvSGVpZ2h0KGludCkge30KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci19OwotICAgIAotfQotCi0KLSNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQotI2VuZGlm
IC8vIFJlbmRlck1hdGhNTFJvd19oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVy
TWF0aE1MU3F1YXJlUm9vdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuY3BwCShyZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSwxOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4IE1pbG93c2tp
IChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgRnJhbsOnb2lzIFNhdXNzZXQgKHNhdXNzZXRAZ21haWwuY29tKS4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRoTUxTcXVhcmVSb290Lmgi
Ci0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5o
IgotI2luY2x1ZGUgIlBhdGguaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcg
bmFtZXNwYWNlIE1hdGhNTE5hbWVzOwotCi0vLyBCb3R0b20gcGFkZGluZyBvZiB0aGUgcmFkaWNh
bCAocHgpCi1jb25zdCBpbnQgZ1JhZGljYWxCYXNlUGFkID0gMzsKLS8vIFRocmVzaG9sZCBhYm92
ZSB3aGljaCB0aGUgcmFkaWNhbCBzaGFwZSBpcyBtb2RpZmllZCB0byBsb29rIG5pY2Ugd2l0aCBi
aWcgYmFzZXMgKCUpCi1jb25zdCBmbG9hdCBnVGhyZXNob2xkQmFzZUhlaWdodCA9IDEuNWY7Ci0v
LyBSYWRpY2FsIHdpZHRoICglKQotY29uc3QgZmxvYXQgZ1JhZGljYWxXaWR0aCA9IDAuNzVmOwot
Ly8gSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgYm90dG9tIHBvaW50IG9mIHRoZSByYWRpY2Fs
ICglKQotY29uc3QgZmxvYXQgZ1JhZGljYWxCb3R0b21Qb2ludFhQb3M9IDAuNWY7Ci0vLyBIb3Jp
em9udGFsIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBwb2ludCBvZiB0aGUgcmFkaWNhbCAoJSkK
LWNvbnN0IGZsb2F0IGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyA9IDAuMmY7Ci0vLyBWZXJ0aWNh
bCBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgcG9pbnQgb2YgdGhlIHJhZGljYWwgKCUpCi1jb25z
dCBmbG9hdCBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgPSAwLjVmOyAKLS8vIFZlcnRpY2FsIHNo
aWZ0IG9mIHRoZSBsZWZ0IGVuZCBwb2ludCBvZiB0aGUgcmFkaWNhbCAoJSkKLWNvbnN0IGZsb2F0
IGdSYWRpY2FsTGVmdEVuZFlTaGlmdCA9IDAuMDVmOwotLy8gQWRkaXRpb25hbCBib3R0b20gcm9v
dCBwYWRkaW5nICglKQotY29uc3QgZmxvYXQgZ1Jvb3RCb3R0b21QYWRkaW5nID0gMC4yZjsKLQot
Ly8gUmFkaWNhbCBsaW5lIHRoaWNrbmVzcyAoJSkKLWNvbnN0IGZsb2F0IGdSYWRpY2FsTGluZVRo
aWNrbmVzcyA9IDAuMDJmOwotLy8gUmFkaWNhbCB0aGljayBsaW5lIHRoaWNrbmVzcyAoJSkKLWNv
bnN0IGZsb2F0IGdSYWRpY2FsVGhpY2tMaW5lVGhpY2tuZXNzID0gMC4xZjsKLSAgICAKLVJlbmRl
ck1hdGhNTFNxdWFyZVJvb3Q6OlJlbmRlck1hdGhNTFNxdWFyZVJvb3QoTm9kZSAqZXhwcmVzc2lv
bikgCi0gICAgOiBSZW5kZXJNYXRoTUxCbG9jayhleHByZXNzaW9uKSAKLXsKLX0KLQotdm9pZCBS
ZW5kZXJNYXRoTUxTcXVhcmVSb290OjpwYWludChQYWludEluZm8mIGluZm8sIGludCB0eCwgaW50
IHR5KQotewotICAgIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChpbmZvLCB0eCwgdHkpOwotICAg
Ci0gICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdHggKz0geCgpOwotICAgIHR5ICs9IHkoKTsKLQotICAgIGludCBtYXhI
ZWlnaHQgPSAwOwotICAgIGludCB3aWR0aCA9IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50
ID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGlmIChjdXJy
ZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoY3VycmVudCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGJveCBo
YXMgYSBsYXJnZXIgaGVpZ2h0Ci0gICAgICAgICAgICBpZiAoYm94LT5vZmZzZXRIZWlnaHQoKSA+
IG1heEhlaWdodCkKLSAgICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBib3gtPm9mZnNldEhlaWdo
dCgpOwotICAgICAgICAgICAgd2lkdGggKz0gYm94LT5vZmZzZXRXaWR0aCgpOwotICAgICAgICB9
Ci0gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgIH0KLSAgICAv
LyBkZWZhdWx0IHRvIHRoZSBmb250IHNpemUgaW4gcGl4ZWxzIGlmIHdlJ3JlIGVtcHR5Ci0gICAg
aWYgKCFtYXhIZWlnaHQpCi0gICAgICAgIG1heEhlaWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7
Ci0gICAgCi0gICAgaW50IGZyb250V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmZv
bnRTaXplKCkgKiBnUmFkaWNhbFdpZHRoKTsKLSAgICBpbnQgdG9wU3RhcnRTaGlmdCA9IDA7Ci0g
ICAgLy8gQmFzZSBoZWlnaHQgYWJvdmUgd2hpY2ggdGhlIHNoYXBlIG9mIHRoZSByb290IGNoYW5n
ZXMKLSAgICBpbnQgdGhyZXNob2xkSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihnVGhyZXNob2xk
QmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIAotICAgIGlmIChtYXhIZWln
aHQgPiB0aHJlc2hvbGRIZWlnaHQgJiYgdGhyZXNob2xkSGVpZ2h0KSB7Ci0gICAgICAgIGZsb2F0
IHNoaWZ0ID0gKG1heEhlaWdodCAtIHRocmVzaG9sZEhlaWdodCkgLyBzdGF0aWNfY2FzdDxmbG9h
dD4odGhyZXNob2xkSGVpZ2h0KTsKLSAgICAgICAgaWYgKHNoaWZ0ID4gMS4pCi0gICAgICAgICAg
ICBzaGlmdCA9IDEuMGY7Ci0gICAgICAgIHRvcFN0YXJ0U2hpZnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJvbnRXaWR0aCAqIHNoaWZ0KTsKLSAgICB9Ci0g
ICAgCi0gICAgd2lkdGggKz0gdG9wU3RhcnRTaGlmdDsKLSAgICAKLSAgICBGbG9hdFBvaW50IHRv
cFN0YXJ0KHR4ICsgZnJvbnRXaWR0aCAtIHRvcFN0YXJ0U2hpZnQsIHR5KTsKLSAgICBGbG9hdFBv
aW50IGJvdHRvbUxlZnQodHggKyBmcm9udFdpZHRoICogZ1JhZGljYWxCb3R0b21Qb2ludFhQb3Mg
LCB0eSArIG1heEhlaWdodCArIGdSYWRpY2FsQmFzZVBhZCk7Ci0gICAgRmxvYXRQb2ludCB0b3BM
ZWZ0KHR4ICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyAsIHR5ICsgZ1Jh
ZGljYWxUb3BMZWZ0UG9pbnRZUG9zICogbWF4SGVpZ2h0KTsKLSAgICBGbG9hdFBvaW50IGxlZnRF
bmQodHggLCB0b3BMZWZ0LnkoKSArIGdSYWRpY2FsTGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZv
bnRTaXplKCkpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOwotICAgIAotICAgIGlu
Zm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGdSYWRpY2FsTGluZVRoaWNrbmVzcyAqIHN0
eWxlKCktPmZvbnRTaXplKCkpOwotICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29s
aWRTdHJva2UpOwotICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS0+dmlz
aXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKLSAgICBpbmZvLmNvbnRleHQtPnNldExpbmVKb2luKE1pdGVySm9pbik7Ci0gICAgaW5mby5j
b250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlKCktPmZvbnRTaXplKCkpOwotICAgIAotICAgIFBh
dGggcm9vdDsKLSAgICAKLSAgICByb290Lm1vdmVUbyhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSAr
IHdpZHRoICwgdHkpKTsKLSAgICAvLyBkcmF3IHRvcAotICAgIHJvb3QuYWRkTGluZVRvKHRvcFN0
YXJ0KTsKLSAgICAvLyBkcmF3IGZyb20gdG9wIGxlZnQgY29ybmVyIHRvIGJvdHRvbSBwb2ludCBv
ZiByYWRpY2FsCi0gICAgcm9vdC5hZGRMaW5lVG8oYm90dG9tTGVmdCk7Ci0gICAgLy8gZHJhdyBm
cm9tIGJvdHRvbSBwb2ludCB0byB0b3Agb2YgbGVmdCBwYXJ0IG9mIHJhZGljYWwgYmFzZSAicG9j
a2V0IgotICAgIHJvb3QuYWRkTGluZVRvKHRvcExlZnQpOwotICAgIC8vIGRyYXcgdG8gZW5kCi0g
ICAgcm9vdC5hZGRMaW5lVG8obGVmdEVuZCk7Ci0KLSAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBh
dGgocm9vdCk7Ci0gICAgCi0gICAgaW5mby5jb250ZXh0LT5zYXZlKCk7Ci0gICAgCi0gICAgLy8g
QnVpbGQgYSBtYXNrIHRvIGRyYXcgdGhlIHRoaWNrIHBhcnQgb2YgdGhlIHJvb3QuCi0gICAgUGF0
aCBtYXNrOwotICAgIAotICAgIG1hc2subW92ZVRvKHRvcFN0YXJ0KTsKLSAgICBtYXNrLmFkZExp
bmVUbyhib3R0b21MZWZ0KTsKLSAgICBtYXNrLmFkZExpbmVUbyh0b3BMZWZ0KTsKLSAgICBtYXNr
LmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICog
dG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkpOwotICAgIAotICAgIGluZm8uY29udGV4dC0+Y2xp
cChtYXNrKTsKLSAgICAKLSAgICAvLyBEcmF3IHRoZSB0aGljayBwYXJ0IG9mIHRoZSByb290Lgot
ICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGdSYWRpY2FsVGhpY2tMaW5lVGhp
Y2tuZXNzICogc3R5bGUoKS0+Zm9udFNpemUoKSk7Ci0gICAgaW5mby5jb250ZXh0LT5zZXRMaW5l
Q2FwKFNxdWFyZUNhcCk7Ci0gICAgCi0gICAgUGF0aCBsaW5lOwotICAgIGxpbmUubW92ZVRvKGJv
dHRvbUxlZnQpOwotICAgIGxpbmUuYWRkTGluZVRvKHRvcExlZnQpOwotICAgIAotICAgIGluZm8u
Y29udGV4dC0+c3Ryb2tlUGF0aChsaW5lKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnJlc3Rv
cmUoKTsKLSAgICAKLSAgICBpbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKLX0KLQotdm9pZCBSZW5k
ZXJNYXRoTUxTcXVhcmVSb290OjpsYXlvdXQoKQotewotICAgIGludCBtYXhIZWlnaHQgPSAwOwot
ICAgIAotICAgIFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGls
ZSAoY3VycmVudCkgewotICAgICAgICBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7
Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2Rl
bE9iamVjdChjdXJyZW50KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGJveC0+b2Zm
c2V0SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCi0gICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94
LT5vZmZzZXRIZWlnaHQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYm94LT5zdHlsZSgp
LT5zZXRWZXJ0aWNhbEFsaWduKEJBU0VMSU5FKTsKLSAgICAgICAgfQotICAgICAgICBjdXJyZW50
ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFtYXhIZWln
aHQpCi0gICAgICAgIG1heEhlaWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7Ci0KLSAgICAKLSAg
ICBpZiAobWF4SGVpZ2h0ID4gc3RhdGljX2Nhc3Q8aW50PihnVGhyZXNob2xkQmFzZUhlaWdodCAq
IHN0eWxlKCktPmZvbnRTaXplKCkpKQotICAgICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nQm90dG9t
KExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGdSb290Qm90dG9tUGFkZGluZyAqIHN0eWxlKCktPmZv
bnRTaXplKCkpLCBGaXhlZCkpOwotCi0gICAgCi0gICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwot
fQotICAgIAotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKLQotICAgICAgICAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaAkocmV2
aXNpb24gNzUzNTApCisrKyBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDkgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSAKLSNpZm5kZWYgUmVuZGVyTWF0aE1MU3F1YXJl
Um9vdF9oCi0jZGVmaW5lIFJlbmRlck1hdGhNTFNxdWFyZVJvb3RfaAotCi0jaWYgRU5BQkxFKE1B
VEhNTCkKLQotI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLSAgICAKLWNsYXNzIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QgOiBwdWJsaWMgUmVuZGVy
TWF0aE1MQmxvY2sgewotcHVibGljOgotICAgIFJlbmRlck1hdGhNTFNxdWFyZVJvb3QoTm9kZSog
ZnJhY3Rpb24pOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7Ci1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotfTsKLSAgICAK
LX0KLQotI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCi0KLSNlbmRpZiAvLyBSZW5kZXJNYXRoTUxT
cXVhcmVSb290X2gKLQotCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxTdWJTdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJN
YXRoTUxTdWJTdXAuY3BwCShyZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL21hdGht
bC9SZW5kZXJNYXRoTUxTdWJTdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIxMiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2ku
Y29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJSZW5kZXJNYXRo
TUxTdWJTdXAuaCIKLQotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIk1hdGhN
TE5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVuZGVyVGFi
bGUuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJSZW5kZXJUYWJs
ZVJvdy5oIgotI2luY2x1ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRl
clRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAotdXNpbmcgbmFtZXNwYWNlIE1h
dGhNTE5hbWVzOwotCi1zdGF0aWMgY29uc3QgaW50IGdUb3BBZGp1c3REaXZpc29yID0gMzsKLXN0
YXRpYyBjb25zdCBpbnQgZ1N1YnN1cFNjcmlwdE1hcmdpbiA9IDE7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgZ1N1YlN1cFN0cmV0Y2ggPSAxLjJmOwotCi1SZW5kZXJNYXRoTUxTdWJTdXA6OlJlbmRlck1h
dGhNTFN1YlN1cChFbGVtZW50KiBlbGVtZW50KSAKLSAgICA6IFJlbmRlck1hdGhNTEJsb2NrKGVs
ZW1lbnQpCi0gICAgLCBtX3NjcmlwdHMoMCkKLXsKLSAgICAvLyBEZXRlcm1pbmUgd2hhdCBraW5k
IG9mIHVuZGVyL292ZXIgZXhwcmVzc2lvbiB3ZSBoYXZlIGJ5IGVsZW1lbnQgbmFtZQotICAgIGlm
IChlbGVtZW50LT5oYXNMb2NhbE5hbWUoTWF0aE1MTmFtZXM6Om1zdWJUYWcpKQotICAgICAgICBt
X2tpbmQgPSBTdWI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzTG9jYWxOYW1lKE1hdGhNTE5h
bWVzOjptc3VwVGFnKSkKLSAgICAgICAgbV9raW5kID0gU3VwOwotICAgIGVsc2UgaWYgKGVsZW1l
bnQtPmhhc0xvY2FsTmFtZShNYXRoTUxOYW1lczo6bXN1YnN1cFRhZykpCi0gICAgICAgIG1fa2lu
ZCA9IFN1YlN1cDsKLSAgICBlbHNlIAotICAgICAgICBtX2tpbmQgPSBTdWJTdXA7Ci19Ci0KLXZv
aWQgUmVuZGVyTWF0aE1MU3ViU3VwOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQotewotICAgIGlmIChmaXJzdENoaWxkKCkpIHsKLSAgICAg
ICAgLy8gV2UgYWxyZWFkeSBoYXZlIGEgYmFzZSwgc28gdGhpcyBpcyB0aGUgc3VwZXIvc3Vic2Ny
aXB0cyBiZWluZyBhZGRlZC4KLSAgICAgICAgCi0gICAgICAgIGlmIChtX2tpbmQgPT0gU3ViU3Vw
KSB7Ci0gICAgICAgICAgICBpZiAoIW1fc2NyaXB0cykgewotICAgICAgICAgICAgICAgIG1fc2Ny
aXB0cyA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2sobm9kZSgpKTsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHNjcmlwdHNTdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBzY3JpcHRzU3R5bGUtPmluaGVyaXRGcm9t
KHN0eWxlKCkpOwotICAgICAgICAgICAgICAgIHNjcmlwdHNTdHlsZS0+c2V0RGlzcGxheShJTkxJ
TkVfQkxPQ0spOwotICAgICAgICAgICAgICAgIHNjcmlwdHNTdHlsZS0+c2V0VmVydGljYWxBbGln
bihUT1ApOwotICAgICAgICAgICAgICAgIHNjcmlwdHNTdHlsZS0+c2V0TWFyZ2luTGVmdChMZW5n
dGgoZ1N1YnN1cFNjcmlwdE1hcmdpbiwgRml4ZWQpKTsKLSAgICAgICAgICAgICAgICBzY3JpcHRz
U3R5bGUtPnNldFRleHRBbGlnbihMRUZUKTsKLSAgICAgICAgICAgICAgICBtX3NjcmlwdHMtPnNl
dFN0eWxlKHNjcmlwdHNTdHlsZS5yZWxlYXNlKCkpOwotICAgICAgICAgICAgICAgIFJlbmRlck1h
dGhNTEJsb2NrOjphZGRDaGlsZChtX3NjcmlwdHMsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIHNjcmlwdCA9IG5ldyAo
cmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2sobm9kZSgpKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gc2NyaXB0U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Ci0g
ICAgICAgICAgICBzY3JpcHRTdHlsZS0+aW5oZXJpdEZyb20obV9zY3JpcHRzLT5zdHlsZSgpKTsK
LSAgICAgICAgICAgIHNjcmlwdFN0eWxlLT5zZXREaXNwbGF5KEJMT0NLKTsKLSAgICAgICAgICAg
IHNjcmlwdC0+c2V0U3R5bGUoc2NyaXB0U3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9zY3JpcHRzLT5hZGRDaGlsZChzY3JpcHQsIG1fc2NyaXB0cy0+Zmlyc3RD
aGlsZCgpKTsKLSAgICAgICAgICAgIHNjcmlwdC0+YWRkQ2hpbGQoY2hpbGQpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrOjphZGRDaGlsZChjaGlsZCwgYmVm
b3JlQ2hpbGQpOwotICAgICAgICAKLSAgICB9IGVsc2UgewotICAgICAgICBSZW5kZXJNYXRoTUxC
bG9jayogd3JhcHBlciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2sobm9k
ZSgpKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB3cmFwcGVyU3R5bGUgPSBSZW5kZXJT
dHlsZTo6Y3JlYXRlKCk7Ci0gICAgICAgIHdyYXBwZXJTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUo
KSk7Ci0gICAgICAgIHdyYXBwZXJTdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxPQ0spOwotICAg
ICAgICB3cmFwcGVyU3R5bGUtPnNldFZlcnRpY2FsQWxpZ24oQkFTRUxJTkUpOwotICAgICAgICB3
cmFwcGVyLT5zZXRTdHlsZSh3cmFwcGVyU3R5bGUucmVsZWFzZSgpKTsKLSAgICAgICAgUmVuZGVy
TWF0aE1MQmxvY2s6OmFkZENoaWxkKHdyYXBwZXIsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgd3Jh
cHBlci0+YWRkQ2hpbGQoY2hpbGQpOwotICAgICAgICAKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVy
TWF0aE1MU3ViU3VwOjpzdHJldGNoVG9IZWlnaHQoaW50IGhlaWdodCkKLXsKLSAgICBSZW5kZXJP
YmplY3QqIGJhc2UgPSBmaXJzdENoaWxkKCk7Ci0gICAgaWYgKCFiYXNlKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKGJhc2UtPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9j
aygpKSB7Ci0gICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1M
QmxvY2soYmFzZS0+Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgYmxvY2stPnN0cmV0Y2hUb0hlaWdo
dChzdGF0aWNfY2FzdDxpbnQ+KGdTdWJTdXBTdHJldGNoICogaGVpZ2h0KSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBBZGp1c3QgdGhlIHNjcmlwdCBwbGFjZW1lbnQgYWZ0ZXIgd2Ugc3RyZXRjaAot
ICAgICAgICBpZiAoaGVpZ2h0ID4gMCAmJiBtX2tpbmQgPT0gU3ViU3VwICYmIG1fc2NyaXB0cykg
ewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBzY3JpcHQgPSBtX3NjcmlwdHMtPmZpcnN0Q2hp
bGQoKTsKLSAgICAgICAgICAgIGlmIChzY3JpcHQpIHsKLSAgICAgICAgICAgICAgICAvLyBDYWxj
dWxhdGUgdGhlIHNjcmlwdCBoZWlnaHQgd2l0aG91dCB0aGUgY29udGFpbmVyIG1hcmdpbnMuCi0g
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiB0b3AgPSBzY3JpcHQ7Ci0gICAgICAgICAgICAg
ICAgaW50IHRvcEhlaWdodCA9IGdldEJveE1vZGVsT2JqZWN0SGVpZ2h0KHRvcC0+Zmlyc3RDaGls
ZCgpKTsKLSAgICAgICAgICAgICAgICBpbnQgdG9wQWRqdXN0ID0gdG9wSGVpZ2h0IC8gZ1RvcEFk
anVzdERpdmlzb3I7Ci0gICAgICAgICAgICAgICAgdG9wLT5zdHlsZSgpLT5zZXRNYXJnaW5Ub3Ao
TGVuZ3RoKC10b3BBZGp1c3QsIEZpeGVkKSk7Ci0gICAgICAgICAgICAgICAgdG9wLT5zdHlsZSgp
LT5zZXRNYXJnaW5Cb3R0b20oTGVuZ3RoKGhlaWdodCAtIHRvcEhlaWdodCArIHRvcEFkanVzdCwg
Rml4ZWQpKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHRvcEJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QodG9wKTsKLSAgICAgICAgICAgICAgICAgICAgdG9wQm94LT51cGRh
dGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgbV9zY3JpcHRzLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
ZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAK
LSAgICB9Ci19Ci0KLWludCBSZW5kZXJNYXRoTUxTdWJTdXA6Om5vbk9wZXJhdG9ySGVpZ2h0KCkg
Y29uc3QgCi17Ci0gICAgaWYgKG1fa2luZCA9PSBTdWJTdXApIAotICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmZvbnRTaXplKCkqZ1N1YlN1cFN0cmV0Y2gpOwotICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KHN0eWxlKCktPmZvbnRTaXplKCkpOwotfQotCi12b2lkIFJl
bmRlck1hdGhNTFN1YlN1cDo6bGF5b3V0KCkgCi17Ci0gICAgaWYgKGZpcnN0Q2hpbGQoKSkKLSAg
ICAgICAgZmlyc3RDaGlsZCgpLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICBpZiAobV9zY3Jp
cHRzKSAKLSAgICAgICAgbV9zY3JpcHRzLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICAKLSAg
ICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Ci0gICAgCi0gICAgaWYgKG1fa2luZCA9PSBTdWJTdXAp
IHsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYmFzZSA9IGZpcnN0Q2hpbGQoKSkgewotICAg
ICAgICAgICAgaW50IG1heEhlaWdodCA9IDA7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnQgPSBiYXNlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY3VycmVudCkg
ewotICAgICAgICAgICAgICAgIGludCBoZWlnaHQgPSBnZXRCb3hNb2RlbE9iamVjdEhlaWdodChj
dXJyZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0KQotICAgICAg
ICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICAgICAgY3VycmVu
dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
bnQgaGVpZ2h0RGlmZiA9IG1fc2NyaXB0cyA/IChtX3NjcmlwdHMtPm9mZnNldEhlaWdodCgpIC0g
bWF4SGVpZ2h0KSAvIDIgOiAwOwotICAgICAgICAgICAgaWYgKGhlaWdodERpZmYgPCAwKSAKLSAg
ICAgICAgICAgICAgICBoZWlnaHREaWZmID0gMDsKLSAgICAgICAgICAgIGJhc2UtPnN0eWxlKCkt
PnNldFBhZGRpbmdUb3AoTGVuZ3RoKGhlaWdodERpZmYsIEZpeGVkKSk7Ci0gICAgICAgICAgICBi
YXNlLT5zZXROZWVkc0xheW91dCh0cnVlKTsKLSAgICAgICAgfQotICAgICAgICBzZXROZWVkc0xh
eW91dCh0cnVlKTsKLSAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwotICAgIH0gICAgCi19
Ci0KLWludCBSZW5kZXJNYXRoTUxTdWJTdXA6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRp
b25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiBiYXNl
ID0gZmlyc3RDaGlsZCgpOwotICAgIGlmICghYmFzZSkgCi0gICAgICAgIHJldHVybiBvZmZzZXRI
ZWlnaHQoKTsKLSAgICAKLSAgICBpbnQgYmFzZWxpbmUgPSBvZmZzZXRIZWlnaHQoKTsKLSAgICBp
ZiAoIWJhc2UgfHwgIWJhc2UtPmlzQm94TW9kZWxPYmplY3QoKSkgCi0gICAgICAgIHJldHVybiBi
YXNlbGluZTsKLQotICAgIHN3aXRjaCAobV9raW5kKSB7Ci0gICAgY2FzZSBTdWJTdXA6Ci0gICAg
ICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChtX3NjcmlwdHMgJiYg
YmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaW50IHRvcEFkanVzdCA9IChtX3NjcmlwdHMtPm9mZnNldEhlaWdodCgpIC0g
Ym94LT5vZmZzZXRIZWlnaHQoKSkgLyAyOwotICAgICAgICAKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBUaGUgbGFzdCBiaXQgb2YgdGhpcyBjYWxjdWxhdGlvbiBzaG91bGQgYmUgbW9yZSBleGFjdC4g
IFdoeSBpcyB0aGUgMi0zcHggc2NhbGVkIGZvciB6b29tIG5lY2Vzc2FyeT8KLSAgICAgICAgICAg
IC8vIFRoZSBiYXNlbGluZSBpcyB0b3Agc3BhY2luZyBvZiB0aGUgYmFzZSArIHRoZSBiYXNlbGlu
ZSBvZiB0aGUgYmFzZSArIGFkanVzdGVkIHNwYWNlIGZvciB6b29tCi0gICAgICAgICAgICBmbG9h
dCB6b29tRmFjdG9yID0gc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpOwotICAgICAgICAgICAgcmV0
dXJuIHRvcEFkanVzdCArIGJveC0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUs
IGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKSArIHN0YXRpY19jYXN0PGlu
dD4oKHpvb21GYWN0b3IgPiAxLjI1ID8gMiA6IDMpICogem9vbUZhY3Rvcik7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTdXA6IAotICAgIGNhc2UgU3ViOgotICAgICAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKTsK
LSAgICAgICAgYmFzZWxpbmUgPSBib3gtPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2Vs
aW5lLCBmaXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gYmFzZWxpbmU7Ci0gICAgCi19Ci0gICAgCi19
ICAgIAotCi0jZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21h
dGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9t
YXRobWwvUmVuZGVyTWF0aE1MU3ViU3VwLmgJKHJldmlzaW9uIDc1MzUwKQorKysgU291cmNlL1dl
YkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxvd3NraSAoYWxleEBt
aWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
Ci0jaWZuZGVmIFJlbmRlck1hdGhNTFN1YlN1cF9oCi0jZGVmaW5lIFJlbmRlck1hdGhNTFN1YlN1
cF9oCi0KLSNpZiBFTkFCTEUoTUFUSE1MKQotCi0jaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2su
aCIKLSNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
Ci1jbGFzcyBSZW5kZXJNYXRoTUxTdWJTdXAgOiBwdWJsaWMgUmVuZGVyTWF0aE1MQmxvY2sgewot
cHVibGljOgotICAgIFJlbmRlck1hdGhNTFN1YlN1cChFbGVtZW50KiBmcmFjdGlvbik7Ci0gICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzQmFzZSgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGludCBub25PcGVyYXRvckhlaWdodCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IHBpeGVsSGVpZ2h0KTsKLSAgICB2
aXJ0dWFsIGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUs
IExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5p
bmdMaW5lKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsK
LSAgICAKLXByaXZhdGU6Ci0gICAgZW51bSBTdWJTdXBUeXBlIHsgU3ViLCBTdXAsIFN1YlN1cCB9
OwotICAgIFN1YlN1cFR5cGUgbV9raW5kOwotICAgIFJlbmRlckJsb2NrKiBtX3NjcmlwdHM7Ci19
OwotICAgIAotfQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKLQotI2VuZGlmIC8vIFJlbmRl
ck1hdGhNTFN1YlN1cF9oCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRo
TUxVbmRlck92ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5k
ZXJNYXRoTUxVbmRlck92ZXIuY3BwCShyZXZpc2lvbiA3NTM1MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDI5
OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXggTWlsb3dza2kgKGFsZXhA
bWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShNQVRITUwpCi0KLSNpbmNsdWRlICJS
ZW5kZXJNYXRoTUxVbmRlck92ZXIuaCIKLQotI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgotI2lu
Y2x1ZGUgIk1hdGhNTE5hbWVzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdXNpbmcgbmFt
ZXNwYWNlIE1hdGhNTE5hbWVzOwotICAgIAotc3RhdGljIGNvbnN0IGRvdWJsZSBnT3ZlclNwYWNp
bmdBZGp1c3RtZW50ID0gMC41OwotICAgIAotUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpSZW5kZXJN
YXRoTUxVbmRlck92ZXIoTm9kZSogZXhwcmVzc2lvbikgCi0gICAgOiBSZW5kZXJNYXRoTUxCbG9j
ayhleHByZXNzaW9uKSAKLXsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KGV4cHJlc3Npb24pOwotICAgIC8vIERldGVybWluZSB3aGF0IGtpbmQgb2YgdW5kZXIv
b3ZlciBleHByZXNzaW9uIHdlIGhhdmUgYnkgZWxlbWVudCBuYW1lCi0gICAgCi0gICAgaWYgKGVs
ZW1lbnQtPmhhc0xvY2FsTmFtZShNYXRoTUxOYW1lczo6bXVuZGVyVGFnKSkKLSAgICAgICAgbV9r
aW5kID0gVW5kZXI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzTG9jYWxOYW1lKE1hdGhNTE5h
bWVzOjptb3ZlclRhZykpCi0gICAgICAgIG1fa2luZCA9IE92ZXI7Ci0gICAgZWxzZSBpZiAoZWxl
bWVudC0+aGFzTG9jYWxOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJvdmVyVGFnKSkKLSAgICAgICAg
bV9raW5kID0gVW5kZXJPdmVyOwotICAgIGVsc2UgCi0gICAgICAgIG1fa2luZCA9IFVuZGVyOwot
ICAgIAotfQotCi12b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKLXsgICAgCi0gICAgUmVuZGVy
TWF0aE1MQmxvY2sqIHJvdyA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MQmxvY2so
bm9kZSgpKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvd1N0eWxlID0gbWFrZUJsb2NrU3R5
bGUoKTsKLSAgICByb3ctPnNldFN0eWxlKHJvd1N0eWxlLnJlbGVhc2UoKSk7Ci0gICAgCi0gICAg
Ly8gbG9vayB0aHJvdWdoIHRoZSBjaGlsZHJlbiBmb3IgcmVuZGVyZWQgZWxlbWVudHMgY291bnRp
bmcgdGhlIGJsb2NrcyBzbyB3ZSBrbm93IHdoYXQgY2hpbGQKLSAgICAvLyB3ZSBhcmUgYWRkaW5n
Ci0gICAgaW50IGJsb2NrcyA9IDA7Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gdGhpcy0+
Zmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjdXJyZW50KSB7Ci0gICAgICAgIGJsb2NrcysrOwot
ICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0gICAgCi0g
ICAgc3dpdGNoIChibG9ja3MpIHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIC8vIHRoaXMgaXMgdGhl
IGJhc2Ugc28ganVzdCBhcHBlbmQgaXQKLSAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKHJv
dywgYmVmb3JlQ2hpbGQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDE6Ci0gICAgICAgIC8v
IHRoZSB1bmRlciBvciBvdmVyCi0gICAgICAgIC8vIEZJWE1FOiB0ZXh0LWFsaWduOiBjZW50ZXIg
ZG9lcyBub3Qgd29yawotICAgICAgICByb3ctPnN0eWxlKCktPnNldFRleHRBbGlnbihDRU5URVIp
OwotICAgICAgICBpZiAobV9raW5kID09IE92ZXIpIHsKLSAgICAgICAgICAgIC8vIGFkZCB0aGUg
b3ZlciBhcyBmaXJzdAotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKHJvdywgZmly
c3RDaGlsZCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIGFkZCB0aGUgdW5k
ZXIgYXMgbGFzdAotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKHJvdywgYmVmb3Jl
Q2hpbGQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAg
Ly8gdGhlIHVuZGVyIG9yIG92ZXIKLSAgICAgICAgLy8gRklYTUU6IHRleHQtYWxpZ246IGNlbnRl
ciBkb2VzIG5vdCB3b3JrCi0gICAgICAgIHJvdy0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKENFTlRF
Uik7Ci0gICAgICAgIGlmIChtX2tpbmQgPT0gVW5kZXJPdmVyKSB7Ci0gICAgICAgICAgICAvLyBh
ZGQgdGhlIG92ZXIgYXMgZmlyc3QKLSAgICAgICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChy
b3csIGZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyB3ZSBy
ZWFsbHkgc2hvdWxkbid0IGdldCBoZXJlIGFzIG9ubHkgbXVuZGVyb3ZlciBzaG91bGQgaGF2ZSB0
aHJlZSBjaGlsZHJlbgotICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKHJvdywgYmVm
b3JlQ2hpbGQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIC8vIG11bmRlcm92ZXIgc2hvdWxkbid0IGhhdmUgbW9yZSB0aGFuIHRocmVlIGNoaWxkcmVu
LiAgSW4gdGhlb3J5IHdlIHNob3VsZG4ndCAKLSAgICAgICAgLy8gZ2V0IGhlcmUgaWYgdGhlIE1h
dGhNTCBpcyBjb3JyZWN0bHkgZm9ybWVkLCBidXQgdGhhdCBpc24ndCBhIGd1YXJhbnRlZS4KLSAg
ICAgICAgLy8gV2Ugd2lsbCB0cmVhdCB0aGlzIGFzIGFub3RoZXIgdW5kZXIgZWxlbWVudCBhbmQg
dGhleSdsbCBnZXQgc29tZXRoaW5nIGZ1bmt5LgotICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hp
bGQocm93LCBiZWZvcmVDaGlsZCk7Ci0gICAgfQotICAgIHJvdy0+YWRkQ2hpbGQoY2hpbGQpOyAg
ICAKLX0KLQotaW5saW5lIGludCBnZXRPZmZzZXRIZWlnaHQoUmVuZGVyT2JqZWN0KiBvYmopIAot
ewotICAgIGlmIChvYmotPmlzQm94TW9kZWxPYmplY3QoKSkgewotICAgICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvYmopOwotICAgICAgICBy
ZXR1cm4gYm94LT5vZmZzZXRIZWlnaHQoKTsKLSAgICB9Ci0gICAKLSAgICByZXR1cm4gMDsKLX0K
LQotdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OnN0cmV0Y2hUb0hlaWdodChpbnQgaGVpZ2h0
KQotewotCi0gICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gZmlyc3RDaGlsZCgpOwotICAgIGlmICgh
YmFzZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBGb3Igb3ZlciBvciB1bmRl
cm92ZXIsIHRoZSBiYXNlIGlzIHRoZSBzaWJsaW5nIG9mIHRoZSBmaXJzdCBjaGlsZAotICAgIGlm
IChtX2tpbmQgIT0gVW5kZXIpIAotICAgICAgICBiYXNlID0gYmFzZS0+bmV4dFNpYmxpbmcoKTsK
LSAgICAgICAgCi0gICAgaWYgKCFiYXNlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAg
IC8vIHVzZSB0aGUgY2hpbGQgb2YgdGhlIHJvdyB3aGljaCBpcyB0aGUgYWN0dWFsIGJhc2UKLSAg
ICBiYXNlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwotICAgIAotICAgIGlmIChiYXNlICYmIGJhc2Ut
PmlzUmVuZGVyTWF0aE1MQmxvY2soKSkgewotICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxv
Y2sgPSB0b1JlbmRlck1hdGhNTEJsb2NrKGJhc2UpOwotICAgICAgICBibG9jay0+c3RyZXRjaFRv
SGVpZ2h0KGhlaWdodCk7Ci0gICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgIH0KLX0K
LQotdm9pZCBSZW5kZXJNYXRoTUxVbmRlck92ZXI6OmxheW91dCgpIAotewotICAgIFJlbmRlckJs
b2NrOjpsYXlvdXQoKTsKLSAgICBSZW5kZXJPYmplY3QqIG92ZXIgPSAwOwotICAgIFJlbmRlck9i
amVjdCogYmFzZSA9IDA7Ci0gICAgc3dpdGNoIChtX2tpbmQpIHsKLSAgICBjYXNlIE92ZXI6Ci0g
ICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBiYXNlbGluZSBvdmVyIHRoZSBvdmVy
IHZlcnN1cyB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgYW5kIAotICAgICAgICAvLyBhZGp1c3QgdGhl
IHBsYWNlbWVudCBvZiB0aGUgYmFzZS4KLSAgICAgICAgb3ZlciA9IGZpcnN0Q2hpbGQoKTsKLSAg
ICAgICAgaWYgKG92ZXIpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBkZXNjZW5kaW5nIGdseXBo
cyBpbnRydWRlIGludG8gYmFzZSAoZS5nLiBsb3dlcmNhc2UgeSBvdmVyIGJhc2UpCi0gICAgICAg
ICAgICAvLyBGSVhNRTogYmFzZXMgdGhhdCBhc2NlbmQgaGlnaGVyIHRoYW4gdGhlIGxpbmUgYm94
IGludHJ1ZGUgaW50byB0aGUgb3ZlcgotICAgICAgICAgICAgaWYgKCFvdmVyLT5maXJzdENoaWxk
KCktPmlzQm94TW9kZWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaW50IG92ZXJTcGFjaW5nID0gc3RhdGljX2Nhc3Q8aW50PihnT3Zl
clNwYWNpbmdBZGp1c3RtZW50ICogKGdldE9mZnNldEhlaWdodChvdmVyKSAtIHRvUmVuZGVyQm94
TW9kZWxPYmplY3Qob3Zlci0+Zmlyc3RDaGlsZCgpKS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJl
dGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCi0gICAgICAgICAgICBiYXNlID0gb3Zlci0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGlmIChiYXNlKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KG92ZXJTcGFjaW5nID4gMCkgCi0gICAgICAgICAgICAgICAgICAgIGJhc2UtPnN0eWxlKCktPnNl
dE1hcmdpblRvcChMZW5ndGgoLW92ZXJTcGFjaW5nLCBGaXhlZCkpOwotICAgICAgICAgICAgICAg
IGVsc2UgCi0gICAgICAgICAgICAgICAgICAgIGJhc2UtPnN0eWxlKCktPnNldE1hcmdpblRvcChM
ZW5ndGgoMCwgRml4ZWQpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5kZXI6Ci0gICAgICAgIC8vIEZJWE1FOiBOb24t
YXNjZW5kaW5nIGdseXBocyBpbiB0aGUgdW5kZXIgc2hvdWxkIGJlIG1vdmVkIGNsb3NlciB0byB0
aGUgYmFzZQotCi0gICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBiYXNlbGluZSBv
ZiB0aGUgYmFzZSB2ZXJzdXMgdGhlIHN0YXJ0IG9mIHRoZSB1bmRlciBibG9jayBhbmQKLSAgICAg
ICAgLy8gYWRqdXN0IHRoZSBwbGFjZW1lbnQgb2YgdGhlIHVuZGVyIGJsb2NrLgotICAgICAgICAK
LSAgICAgICAgLy8gYmFzZSByb3cgd3JhcHBlcgotICAgICAgICBiYXNlID0gZmlyc3RDaGlsZCgp
OwotICAgICAgICBpZiAoYmFzZSkgewotICAgICAgICAgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRP
ZmZzZXRIZWlnaHQoYmFzZSk7Ci0gICAgICAgICAgICAvLyBhY3R1YWwgYmFzZQotICAgICAgICAg
ICAgYmFzZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGlmICghYmFzZS0+aXNC
b3hNb2RlbE9iamVjdCgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBsb29rIGF0IHRoZSBzcGFjZSBiZXR3ZWVu
IGEgc2luZ2xlIG1heGltdW0gaGVpZ2h0IG9mCi0gICAgICAgICAgICAvLyAgICAgICAgdGhlIGxp
bmUgYm94ZXMgYW5kIHRoZSBiYXNlbGluZSBhbmQgc3F1ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAg
ICAgICAgICBpbnQgdW5kZXJTcGFjaW5nID0gYmFzZUhlaWdodCAtIHRvUmVuZGVyQm94TW9kZWxP
YmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBI
b3Jpem9udGFsTGluZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGFkanVzdCB0aGUg
YmFzZSdzIGludHJ1c2lvbiBpbnRvIHRoZSB1bmRlcgotICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiB1bmRlciA9IGxhc3RDaGlsZCgpOwotICAgICAgICAgICAgaWYgKHVuZGVyICYmIHVuZGVyU3Bh
Y2luZyA+IDApCi0gICAgICAgICAgICAgICAgdW5kZXItPnN0eWxlKCktPnNldE1hcmdpblRvcChM
ZW5ndGgoLXVuZGVyU3BhY2luZywgRml4ZWQpKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFVuZGVyT3ZlcjoKLSAgICAgICAgLy8gRklYTUU6IE5vbi1kZXNjZW5kaW5nIGds
eXBocyBpbiB0aGUgb3ZlciBzaG91bGQgYmUgbW92ZWQgY2xvc2VyIHRvIHRoZSBiYXNlCi0gICAg
ICAgIC8vIEZJWE1FOiBOb24tYXNjZW5kaW5nIGdseXBocyBpbiB0aGUgdW5kZXIgc2hvdWxkIGJl
IG1vdmVkIGNsb3NlciB0byB0aGUgYmFzZQotICAgICAgICAKLSAgICAgICAgLy8gV2UgbmVlZCB0
byBjYWxjdWxhdGUgdGhlIGJhc2VsaW5lIG9mIHRoZSBvdmVyIHZlcnN1cyB0aGUgc3RhcnQgb2Yg
dGhlIGJhc2UgYW5kIAotICAgICAgICAvLyBhZGp1c3QgdGhlIHBsYWNlbWVudCBvZiB0aGUgYmFz
ZS4KLSAgICAgICAgCi0gICAgICAgIG92ZXIgPSBmaXJzdENoaWxkKCk7Ci0gICAgICAgIGlmIChv
dmVyKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogZGVzY2VuZGluZyBnbHlwaHMgaW50cnVkZSBp
bnRvIGJhc2UgKGUuZy4gbG93ZXJjYXNlIHkgb3ZlciBiYXNlKQotICAgICAgICAgICAgLy8gRklY
TUU6IGJhc2VzIHRoYXQgYXNjZW5kIGhpZ2hlciB0aGFuIHRoZSBsaW5lIGJveCBpbnRydWRlIGlu
dG8gdGhlIG92ZXIKLSAgICAgICAgICAgIGlmICghb3Zlci0+Zmlyc3RDaGlsZCgpLT5pc0JveE1v
ZGVsT2JqZWN0KCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpbnQgb3Zl
clNwYWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0
T2Zmc2V0SGVpZ2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENo
aWxkKCkpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpv
bnRhbExpbmUpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIGJhc2Ugcm93IHdyYXBw
ZXIKLSAgICAgICAgICAgIGJhc2UgPSBvdmVyLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoYmFzZSkgewotICAgICAgICAgICAgICAgIGlmIChvdmVyU3BhY2lu
ZyA+IDApCi0gICAgICAgICAgICAgICAgICAgIGJhc2UtPnN0eWxlKCktPnNldE1hcmdpblRvcChM
ZW5ndGgoLW92ZXJTcGFjaW5nLCBGaXhlZCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBiYXNlbGluZSBvZiB0aGUgYmFzZSB2
ZXJzdXMgdGhlIHN0YXJ0IG9mIHRoZSB1bmRlciBibG9jayBhbmQKLSAgICAgICAgICAgICAgICAv
LyBhZGp1c3QgdGhlIHBsYWNlbWVudCBvZiB0aGUgdW5kZXIgYmxvY2suCi0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaW50IGJhc2VIZWlnaHQgPSBnZXRPZmZzZXRIZWlnaHQoYmFz
ZSk7Ci0gICAgICAgICAgICAgICAgLy8gYWN0dWFsIGJhc2UKLSAgICAgICAgICAgICAgICBiYXNl
ID0gYmFzZS0+Zmlyc3RDaGlsZCgpOwotICAgICAgICAgICAgICAgIGlmICghYmFzZS0+aXNCb3hN
b2RlbE9iamVjdCgpKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGxvb2sgYXQgdGhlIHNwYWNlIGJldHdlZW4gYSBzaW5n
bGUgbWF4aW11bSBoZWlnaHQgb2YKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGxpbmUg
Ym94ZXMgYW5kIHRoZSBiYXNlbGluZSBhbmQgc3F1ZWV6ZSB0aGVtIHRvZ2V0aGVyCi0gICAgICAg
ICAgICAgICAgaW50IHVuZGVyU3BhY2luZyA9IGJhc2VIZWlnaHQgLSB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KGJhc2UpLT5iYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwg
SG9yaXpvbnRhbExpbmUpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFJlbmRl
ck9iamVjdCogdW5kZXIgPSBsYXN0Q2hpbGQoKTsKLSAgICAgICAgICAgICAgICBpZiAodW5kZXIg
JiYgdW5kZXItPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJJbmxpbmUoKSAmJiB1bmRlclNwYWNpbmcg
PiAwKQotICAgICAgICAgICAgICAgICAgICB1bmRlci0+c3R5bGUoKS0+c2V0TWFyZ2luVG9wKExl
bmd0aCgtdW5kZXJTcGFjaW5nLCBGaXhlZCkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzZXROZWVkc0xheW91
dCh0cnVlKTsKLSAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Ci19Ci0KLWludCBSZW5kZXJNYXRo
TUxVbmRlck92ZXI6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGlu
ZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3Np
dGlvbk1vZGUpIGNvbnN0Ci17Ci0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGls
ZCgpOwotICAgIGlmICghY3VycmVudCkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNl
bGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxp
bmVQb3NpdGlvbk1vZGUpOwotCi0gICAgaW50IGJhc2VsaW5lID0gMDsKLSAgICBzd2l0Y2ggKG1f
a2luZCkgewotICAgIGNhc2UgVW5kZXJPdmVyOgotICAgIGNhc2UgT3ZlcjoKLSAgICAgICAgYmFz
ZWxpbmUgKz0gZ2V0T2Zmc2V0SGVpZ2h0KGN1cnJlbnQpOwotICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgaWYgKGN1cnJlbnQpIHsKLSAgICAgICAgICAg
IC8vIGFjdHVhbCBiYXNlCi0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJhc2UgPSBjdXJyZW50
LT5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBpZiAoIWJhc2UgfHwgIWJhc2UtPmlzQm94TW9k
ZWxPYmplY3QoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJhc2VsaW5l
ICs9IHRvUmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFi
ZXRpY0Jhc2VsaW5lLCBmaXJzdExpbmUsIEhvcml6b250YWxMaW5lLCBsaW5lUG9zaXRpb25Nb2Rl
KTsKLSAgICAgICAgICAgIC8vIGFkZGVkIHRoZSBuZWdhdGl2ZSB0b3AgbWFyZ2luCi0gICAgICAg
ICAgICBiYXNlbGluZSArPSBjdXJyZW50LT5zdHlsZSgpLT5tYXJnaW5Ub3AoKS52YWx1ZSgpOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5kZXI6Ci0gICAgICAgIFJlbmRl
ck9iamVjdCogYmFzZSA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGJhc2Ug
JiYgYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQotICAgICAgICAgICAgYmFzZWxpbmUgKz0gdG9S
ZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKS0+YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFz
ZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2hl
cmUgaXMgdGhlIGV4dHJhIDItM3B4IGFkanVzdGVkIGZvciB6b29tIGNvbWluZyBmcm9tPwotICAg
IGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7Ci0gICAgYmFzZWxp
bmUgKz0gc3RhdGljX2Nhc3Q8aW50Pigoem9vbUZhY3RvciA+IDEuMjUgPyAyIDogMykgKiB6b29t
RmFjdG9yKTsKLSAgICByZXR1cm4gYmFzZWxpbmU7Ci19Ci0KLQotaW50IFJlbmRlck1hdGhNTFVu
ZGVyT3Zlcjo6bm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdCAKLXsKLSAgICBpbnQgbm9uT3BlcmF0
b3JzID0gMDsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYg
KGN1cnJlbnQtPmZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxvY2sgPSB0b1JlbmRlck1hdGhNTEJsb2NrKGN1cnJl
bnQtPmZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLT5pc1JlbmRlck1hdGhN
TE9wZXJhdG9yKCkpIAotICAgICAgICAgICAgICAgIG5vbk9wZXJhdG9ycyArPSBnZXRPZmZzZXRI
ZWlnaHQoY3VycmVudCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBub25PcGVyYXRv
cnMgKz0gZ2V0T2Zmc2V0SGVpZ2h0KGN1cnJlbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiBub25PcGVyYXRvcnM7Ci19Ci0KLX0KLQotCi0jZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MVW5kZXJPdmVyLmgJ
KHJldmlzaW9uIDc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFVu
ZGVyT3Zlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotCi0jaWZuZGVmIFJlbmRlck1hdGhNTFVu
ZGVyT3Zlcl9oCi0jZGVmaW5lIFJlbmRlck1hdGhNTFVuZGVyT3Zlcl9oCi0KLSNpZiBFTkFCTEUo
TUFUSE1MKQotCi0jaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIAotY2xhc3MgUmVuZGVyTWF0aE1MVW5kZXJPdmVyIDogcHVibGljIFJlbmRl
ck1hdGhNTEJsb2NrIHsKLXB1YmxpYzoKLSAgICBSZW5kZXJNYXRoTUxVbmRlck92ZXIoTm9kZSog
ZXhwcmVzc2lvbik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGF5
b3V0KCk7Ci0gICAgdmlydHVhbCBib29sIGhhc0Jhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
Ci0gICAgdmlydHVhbCBpbnQgbm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IGludCBiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9vbCBmaXJzdExpbmUsIExpbmVE
aXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlID0gUG9zaXRpb25PbkNvbnRhaW5pbmdMaW5l
KSBjb25zdDsgICAgCi0gICAgdmlydHVhbCB2b2lkIHN0cmV0Y2hUb0hlaWdodChpbnQgcGl4ZWxI
ZWlnaHQpOwotcHJpdmF0ZToKLSAgICBlbnVtIFVuZGVyT3ZlclR5cGUgeyBVbmRlciwgT3Zlciwg
VW5kZXJPdmVyIH07Ci0gICAgVW5kZXJPdmVyVHlwZSBtX2tpbmQ7Ci19OwotICAgIAotfQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKLQotI2VuZGlmIC8vIFJlbmRlck1hdGhNTFVuZGVyT3Zl
cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTEJsb2NrLmNwcAkocmV2aXNpb24gNzUzNTApCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5jcHA6NzUzNTApCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4IE1pbG93c2tpIChh
bGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorCisjaW5jbHVk
ZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKKworI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCisjaW5j
bHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisgICAgCit1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CisgICAgCitS
ZW5kZXJNYXRoTUxCbG9jazo6UmVuZGVyTWF0aE1MQmxvY2soTm9kZSogY29udGFpbmVyKSAKKyAg
ICA6IFJlbmRlckJsb2NrKGNvbnRhaW5lcikgCit7Cit9CisKK2Jvb2wgUmVuZGVyTWF0aE1MQmxv
Y2s6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKikgY29u
c3QKK3sKKyAgICByZXR1cm4gY2hpbGQtPm5vZGUoKSAmJiBjaGlsZC0+bm9kZSgpLT5ub2RlVHlw
ZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERTsKK30KKworUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
UmVuZGVyTWF0aE1MQmxvY2s6Om1ha2VCbG9ja1N0eWxlKCkKK3sKKyAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgIG5ld1N0eWxlLT5p
bmhlcml0RnJvbShzdHlsZSgpKTsKKyAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShCTE9DSyk7Cisg
ICAgcmV0dXJuIG5ld1N0eWxlOworfQorCitpbnQgUmVuZGVyTWF0aE1MQmxvY2s6Om5vbk9wZXJh
dG9ySGVpZ2h0KCkgY29uc3QKK3sKKyAgICBpZiAoIWlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIG9mZnNldEhlaWdodCgpOworICAgICAgICAKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6c3RyZXRjaFRvSGVpZ2h0KGludCBoZWlnaHQp
IAoreworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJy
ZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICBpZiAoY3VycmVu
dC0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CisgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sq
IGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhjdXJyZW50KTsKKyAgICAgICAgICBibG9jay0+
c3RyZXRjaFRvSGVpZ2h0KGhlaWdodCk7CisgICAgICAgfQorfQorCisjaWYgRU5BQkxFKERFQlVH
X01BVEhfTEFZT1VUKQordm9pZCBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoUGFpbnRJbmZvJiBp
bmZvLCBpbnQgdHgsIGludCB0eSkKK3sKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQoaW5mbywgdHgs
IHR5KTsKKyAgICAKKyAgICBpZiAoaW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwg
aW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdHggKz0geCgpOworICAgIHR5ICs9IHkoKTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPnNh
dmUoKTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcygxLjBmKTsK
KyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBpbmZv
LmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDAsIDI1NSksIENvbG9yU3BhY2VTUkdC
KTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSksIElu
dFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdM
aW5lKEludFBvaW50KHR4ICsgb2Zmc2V0V2lkdGgoKSwgdHkpLCBJbnRQb2ludCh0eCArIG9mZnNl
dFdpZHRoKCksIHR5ICsgb2Zmc2V0SGVpZ2h0KCkpKTsKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdM
aW5lKEludFBvaW50KHR4LCB0eSArIG9mZnNldEhlaWdodCgpKSwgSW50UG9pbnQodHggKyBvZmZz
ZXRXaWR0aCgpLCB0eSArIG9mZnNldEhlaWdodCgpKSk7CisgICAgaW5mby5jb250ZXh0LT5kcmF3
TGluZShJbnRQb2ludCh0eCwgdHkpLCBJbnRQb2ludCh0eCwgdHkgKyBvZmZzZXRIZWlnaHQoKSkp
OworICAgIAorICAgIGludCB0b3BTdGFydCA9IHBhZGRpbmdUb3AoKTsKKyAgICAKKyAgICBpbmZv
LmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKENvbG9yKDAsIDI1NSwgMCksIENvbG9yU3BhY2VTUkdC
KTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIHRv
cFN0YXJ0KSwgSW50UG9pbnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIHRvcFN0YXJ0KSk7Cisg
ICAgCisgICAgaW50IGJhc2VsaW5lID0gYmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxp
bmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0
cm9rZUNvbG9yKENvbG9yKDI1NSwgMCwgMCksIENvbG9yU3BhY2VTUkdCKTsKKyAgICAKKyAgICBp
bmZvLmNvbnRleHQtPmRyYXdMaW5lKEludFBvaW50KHR4LCB0eSArIGJhc2VsaW5lKSwgSW50UG9p
bnQodHggKyBvZmZzZXRXaWR0aCgpLCB0eSArIGJhc2VsaW5lKSk7CisgICAgCisgICAgaW5mby5j
b250ZXh0LT5yZXN0b3JlKCk7CisgICAgCit9CisjZW5kaWYgLy8gRU5BQkxFKERFQlVHX01BVEhf
TEFZT1VUKQorCisKK30gICAgCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MQmxvY2suaAkocmV2aXNpb24gNzUzNTAp
CShmcm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oOjc1MzUwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVuZGVyTWF0aE1MQmxvY2tfaAorI2RlZmlu
ZSBSZW5kZXJNYXRoTUxCbG9ja19oCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorCisjaW5jbHVkZSAi
UmVuZGVyQmxvY2suaCIKKworI2RlZmluZSBFTkFCTEVfREVCVUdfTUFUSF9MQVlPVVQgMAorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBSZW5kZXJNYXRoTUxCbG9jayA6IHB1Ymxp
YyBSZW5kZXJCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyTWF0aE1MQmxvY2soTm9kZSogY29u
dGFpbmVyKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0Kiwg
UmVuZGVyU3R5bGUqKSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRo
TUxCbG9jaygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5k
ZXJNYXRoTUxPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaGFzQmFzZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBpbnQgbm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZXRjaFRvSGVpZ2h0KGludCBoZWlnaHQpOworCisjaWYgRU5BQkxFKERFQlVHX01BVEhfTEFZT1VU
KQorICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Cisj
ZW5kaWYKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBpbnQgZ2V0Qm94TW9kZWxPYmplY3RIZWlnaHQo
UmVuZGVyT2JqZWN0KiBvYmplY3QpIAorICAgIHsKKyAgICAgICAgaWYgKG9iamVjdCAmJiBvYmpl
Y3QtPmlzQm94TW9kZWxPYmplY3QoKSkgeworICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIHJl
dHVybiBib3gtPm9mZnNldEhlaWdodCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaW50IGdldEJveE1vZGVsT2JqZWN0SGVpZ2h0KGNvbnN0IFJl
bmRlck9iamVjdCogb2JqZWN0KSAKKyAgICB7CisgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0
LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlckJveE1vZGVs
T2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgICAgICAg
ICByZXR1cm4gYm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIGludCBnZXRCb3hNb2RlbE9iamVjdFdpZHRoKFJlbmRl
ck9iamVjdCogb2JqZWN0KSAKKyAgICB7CisgICAgICAgIGlmIChvYmplY3QgJiYgb2JqZWN0LT5p
c0JveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBi
b3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4g
Ym94LT5vZmZzZXRXaWR0aCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaW50IGdldEJveE1vZGVsT2JqZWN0V2lkdGgoY29uc3QgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QpIAorICAgIHsKKyAgICAgICAgaWYgKG9iamVjdCAmJiBvYmplY3QtPmlzQm94
TW9kZWxPYmplY3QoKSkgeworICAgICAgICAgICAgY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IGJveCA9IHRvUmVuZGVyQm94TW9kZWxPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVy
biBib3gtPm9mZnNldFdpZHRoKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biAwOworICAgIH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IG1ha2VCbG9j
a1N0eWxlKCk7CisgICAgCit9OworCitpbmxpbmUgUmVuZGVyTWF0aE1MQmxvY2sqIHRvUmVuZGVy
TWF0aE1MQmxvY2soUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7IAorICAgIEFTU0VSVCghb2JqZWN0
IHx8IG9iamVjdC0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyTWF0aE1MQmxvY2sqPihvYmplY3QpOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVy
TWF0aE1MQmxvY2sqIHRvUmVuZGVyTWF0aE1MQmxvY2soY29uc3QgUmVuZGVyT2JqZWN0KiBvYmpl
Y3QpCit7IAorICAgIEFTU0VSVCghb2JqZWN0IHx8IG9iamVjdC0+aXNSZW5kZXJNYXRoTUxCbG9j
aygpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyTWF0aE1MQmxvY2sqPihv
YmplY3QpOworfQorCit9CisKKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisjZW5kaWYgLy8g
UmVuZGVyTWF0aE1MQmxvY2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAkocmV2aXNpb24gNzUzNTApCShm
cm9tIFNvdXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwOjc1MzUwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShNQVRITUwpCisKKyNpbmNsdWRlICJSZW5kZXJNYXRoTUxGZW5jZWQuaCIKKworI2luY2x1ZGUg
IkZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVu
ZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKKyNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVz
cGFjZSBNYXRoTUxOYW1lczsKKyAgICAKK2VudW0gQnJhY2VzIHsgT3BlbmluZ0JyYWNlQ2hhciA9
IDB4MjgsIENsb3NpbmdCcmFjZUNoYXIgPSAweDI5IH07CisgICAgCitzdGF0aWMgY29uc3QgZmxv
YXQgZ09wZXJhdG9yUGFkZGluZyA9IDAuMWY7CisKK1JlbmRlck1hdGhNTEZlbmNlZDo6UmVuZGVy
TWF0aE1MRmVuY2VkKE5vZGUqIGZlbmNlZCkgCisgICAgOiBSZW5kZXJNYXRoTUxSb3coZmVuY2Vk
KQorICAgICwgbV9vcGVuKE9wZW5pbmdCcmFjZUNoYXIpCisgICAgLCBtX2Nsb3NlKENsb3NpbmdC
cmFjZUNoYXIpCit7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxl
bWVudCgpCit7CisgICAgRWxlbWVudCogZmVuY2VkID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5v
ZGUoKSk7CisgCisgICAgLy8gRklYTUU6IEhhbmRsZSBvcGVuL2Nsb3NlIHZhbHVlcyB3aXRoIG1v
cmUgdGhhbiBvbmUgY2hhcmFjdGVyICh0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGV4dCku
CisgICAgQXRvbWljU3RyaW5nIG9wZW5WYWx1ZSA9IGZlbmNlZC0+Z2V0QXR0cmlidXRlKE1hdGhN
TE5hbWVzOjpvcGVuQXR0cik7CisgICAgaWYgKG9wZW5WYWx1ZS5sZW5ndGgoKSA+IDApCisgICAg
ICAgIG1fb3BlbiA9IG9wZW5WYWx1ZVswXTsKKyAgICBBdG9taWNTdHJpbmcgY2xvc2VWYWx1ZSA9
IGZlbmNlZC0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpjbG9zZUF0dHIpOworICAgIGlmIChj
bG9zZVZhbHVlLmxlbmd0aCgpID4gMCkKKyAgICAgICAgbV9jbG9zZSA9IGNsb3NlVmFsdWVbMF07
CisgICAgCisgICAgQXRvbWljU3RyaW5nIHNlcGFyYXRvcnMgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4oZmVuY2VkKS0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzZXBhcmF0b3JzQXR0cik7Cisg
ICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7CisgICAgICAgIFZlY3RvcjxVQ2hhcj4gY2hh
cmFjdGVyczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzZXBhcmF0b3Jz
Lmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZShzZXBh
cmF0b3JzW2ldKSkKKyAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLmFwcGVuZChzZXBhcmF0b3Jz
W2ldKTsKKyAgICAgICAgfQorICAgICAgICBtX3NlcGFyYXRvcnMgPSAhY2hhcmFjdGVycy5zaXpl
KCkgPyAwIDogU3RyaW5nSW1wbDo6Y3JlYXRlKGNoYXJhY3RlcnMuZGF0YSgpICwgY2hhcmFjdGVy
cy5zaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRoZSBzZXBhcmF0b3IgZGVmYXVs
dHMgdG8gYSBzaW5nbGUgY29tbWEuCisgICAgICAgIG1fc2VwYXJhdG9ycyA9IFN0cmluZ0ltcGw6
OmNyZWF0ZSgiLCIpOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICBt
YWtlRmVuY2VzKCk7Cit9CisKK1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyTWF0aE1MRmVuY2Vk
OjptYWtlT3BlcmF0b3JTdHlsZSgpIAoreworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0
eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisgICAgbmV3
U3R5bGUtPnNldFBhZGRpbmdSaWdodChMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihnT3BlcmF0b3JQ
YWRkaW5nICogc3R5bGUoKS0+Zm9udFNpemUoKSksIEZpeGVkKSk7CisgICAgcmV0dXJuIG5ld1N0
eWxlOworfQorCit2b2lkIFJlbmRlck1hdGhNTEZlbmNlZDo6bWFrZUZlbmNlcygpCit7CisgICAg
UmVuZGVyT2JqZWN0KiBvcGVuRmVuY2UgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlck1hdGhN
TE9wZXJhdG9yKG5vZGUoKSwgbV9vcGVuKTsKKyAgICBvcGVuRmVuY2UtPnNldFN0eWxlKG1ha2VP
cGVyYXRvclN0eWxlKCkucmVsZWFzZSgpKTsKKyAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQob3Bl
bkZlbmNlLCBmaXJzdENoaWxkKCkpOworICAgIFJlbmRlck9iamVjdCogY2xvc2VGZW5jZSA9IG5l
dyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyTWF0aE1MT3BlcmF0b3Iobm9kZSgpLCBtX2Nsb3NlKTsK
KyAgICBjbG9zZUZlbmNlLT5zZXRTdHlsZShtYWtlT3BlcmF0b3JTdHlsZSgpLnJlbGVhc2UoKSk7
CisgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGNsb3NlRmVuY2UpOworfQorCit2b2lkIFJlbmRl
ck1hdGhNTEZlbmNlZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KikKK3sKKyAgICAvLyBtYWtlIHRoZSBmZW5jZXMgaWYgdGhlIHJlbmRlciBvYmplY3QgaXMgZW1w
dHkKKyAgICBpZiAoaXNFbXB0eSgpKQorICAgICAgICB1cGRhdGVGcm9tRWxlbWVudCgpOworICAg
IAorICAgIGlmIChtX3NlcGFyYXRvcnMuZ2V0KCkpIHsKKyAgICAgICAgdW5zaWduZWQgaW50IGNv
dW50ID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiBwb3NpdGlvbiA9IGNoaWxkLT5ub2RlKCk7IHBv
c2l0aW9uOyBwb3NpdGlvbiA9IHBvc2l0aW9uLT5wcmV2aW91c1NpYmxpbmcoKSkgeworICAgICAg
ICAgICAgaWYgKHBvc2l0aW9uLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAg
ICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgIGlmIChjb3VudCA+IDEpIHsKKyAgICAgICAgICAgIFVDaGFyIHNlcGFyYXRvcjsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gVXNlIHRoZSBsYXN0IHNlcGFyYXRvciBpZiB3ZSd2ZSBy
dW4gb3V0IG9mIHNwZWNpZmllZCBzZXBhcmF0b3JzLgorICAgICAgICAgICAgaWYgKChjb3VudCAt
IDEpID49IG1fc2VwYXJhdG9ycy5nZXQoKS0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgc2Vw
YXJhdG9yID0gKCptX3NlcGFyYXRvcnMuZ2V0KCkpW21fc2VwYXJhdG9ycy5nZXQoKS0+bGVuZ3Ro
KCkgLSAxXTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzZXBhcmF0b3IgPSAo
Km1fc2VwYXJhdG9ycy5nZXQoKSlbY291bnQgLSAxXTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogc2VwYXJhdG9yT2JqID0gbmV3IChyZW5kZXJBcmVuYSgpKSBS
ZW5kZXJNYXRoTUxPcGVyYXRvcihub2RlKCksIHNlcGFyYXRvcik7CisgICAgICAgICAgICBzZXBh
cmF0b3JPYmotPnNldFN0eWxlKG1ha2VPcGVyYXRvclN0eWxlKCkucmVsZWFzZSgpKTsKKyAgICAg
ICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChzZXBhcmF0b3JPYmosIGxhc3RDaGlsZCgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBoYXZlIGEgYmxvY2ssIHdlJ2xs
IHdyYXAgaXQgaW4gYW4gaW5saW5lLWJsb2NrLgorICAgIGlmIChjaGlsZC0+aXNCbG9ja0Zsb3co
KSAmJiBjaGlsZC0+c3R5bGUoKS0+ZGlzcGxheSgpICE9IElOTElORV9CTE9DSykgeworICAgICAg
ICAvLyBCbG9jayBvYmplY3RzIHdyYXBwZXIuCisKKyAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2Nr
ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhub2RlKCkpOworICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAg
ICBuZXdTdHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CisgICAgICAgIG5ld1N0eWxlLT5zZXRE
aXNwbGF5KElOTElORV9CTE9DSyk7CisgICAgICAgIGJsb2NrLT5zZXRTdHlsZShuZXdTdHlsZS5y
ZWxlYXNlKCkpOworICAgICAgICAKKyAgICAgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKGJsb2Nr
LCBsYXN0Q2hpbGQoKSk7CisgICAgICAgIGJsb2NrLT5hZGRDaGlsZChjaGlsZCk7ICAgIAorICAg
IH0gZWxzZQorICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoY2hpbGQsIGxhc3RDaGlsZCgp
KTsKK30KKworfSAgICAKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgJKHJldmlzaW9uIDc1MzUwKQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmg6NzUzNTApCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
QWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5kZXJNYXRoTUxGZW5jZWRfaAorI2RlZmlu
ZSBSZW5kZXJNYXRoTUxGZW5jZWRfaAorCisjaWYgRU5BQkxFKE1BVEhNTCkKKworI2luY2x1ZGUg
IlJlbmRlck1hdGhNTFJvdy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitjbGFzcyBS
ZW5kZXJNYXRoTUxGZW5jZWQgOiBwdWJsaWMgUmVuZGVyTWF0aE1MUm93IHsKK3B1YmxpYzoKKyAg
ICBSZW5kZXJNYXRoTUxGZW5jZWQoTm9kZSAqZnJhY3Rpb24pOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
MCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgCitwcml2YXRl
OgorICAgIHZvaWQgbWFrZUZlbmNlcygpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbWFrZU9w
ZXJhdG9yU3R5bGUoKTsKKyAgICBVQ2hhciBtX29wZW47CisgICAgVUNoYXIgbV9jbG9zZTsKKyAg
ICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9zZXBhcmF0b3JzOworfTsKKyAgICAKK30KKworI2VuZGlm
IC8vIEVOQUJMRShNQVRITUwpCisKKyNlbmRpZiAvLyBSZW5kZXJNYXRoTUxGZW5jZWRfaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxGcmFjdGlvbi5jcHAJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9t
YXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwOjc1MzUwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxleCBNaWxvd3Nr
aSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEZyYW7Dp29pcyBTYXVzc2V0IChzYXVzc2V0QGdtYWlsLmNvbSkuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoTUFUSE1MKQorCisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgi
CisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1
c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgZ0hvcml6
b250YWxQYWQgPSAwLjI7CitzdGF0aWMgY29uc3QgaW50IGdMaW5lVGhpbiA9IDE7CitzdGF0aWMg
Y29uc3QgaW50IGdMaW5lTWVkaXVtID0gMzsKK3N0YXRpYyBjb25zdCBpbnQgZ0xpbmVUaGljayA9
IDU7CitzdGF0aWMgY29uc3QgZG91YmxlIGdGcmFjdGlvbkFsaWdubWVudCA9IDAuMjU7CitzdGF0
aWMgY29uc3QgZG91YmxlIGdGcmFjdGlvbkJhcldpZHRoID0gMC4wNTsKK3N0YXRpYyBjb25zdCBk
b3VibGUgZ0Rlbm9taW5hdG9yUGFkID0gMC4xOworCitSZW5kZXJNYXRoTUxGcmFjdGlvbjo6UmVu
ZGVyTWF0aE1MRnJhY3Rpb24oRWxlbWVudCogZnJhY3Rpb24pIAorICAgIDogUmVuZGVyTWF0aE1M
QmxvY2soZnJhY3Rpb24pCisgICAgLCBtX2xpbmVUaGlja25lc3MoZ0xpbmVUaGluKQoreworICAg
IHNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxGcmFjdGlv
bjo6dXBkYXRlRnJvbUVsZW1lbnQoKQoreworICAgIC8vIEZJWE1FOiBtZnJhYyB3aGVyZSBiZXZl
bGxlZD10cnVlIHdpbGwgbmVlZCB0byByZW9yZ2FuaXplIHRoZSBkZXNjZW5kYW50cworICAgIGlm
IChpc0VtcHR5KCkpIAorICAgICAgICByZXR1cm47CisgICAgCisgICAgRWxlbWVudCogZnJhY3Rp
b24gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKTsKKyAgICAKKyAgICBSZW5kZXJPYmpl
Y3QqIG51bWVyYXRvciA9IGZpcnN0Q2hpbGQoKTsKKyAgICBTdHJpbmcgbmFsaWduID0gZnJhY3Rp
b24tPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bnVtYWxpZ25BdHRyKTsKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFsaWduLCAibGVmdCIpKQorICAgICAgICBudW1lcmF0b3ItPnN0eWxl
KCktPnNldFRleHRBbGlnbihMRUZUKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YWxpZ24sICJyaWdodCIpKQorICAgICAgICBudW1lcmF0b3ItPnN0eWxlKCktPnNldFRleHRBbGln
bihSSUdIVCk7CisgICAgZWxzZQorICAgICAgICBudW1lcmF0b3ItPnN0eWxlKCktPnNldFRleHRB
bGlnbihDRU5URVIpOworICAgIAorICAgIFJlbmRlck9iamVjdCogZGVub21pbmF0b3IgPSBudW1l
cmF0b3ItPm5leHRTaWJsaW5nKCk7CisgICAgaWYgKCFkZW5vbWluYXRvcikKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFN0cmluZyBkYWxpZ24gPSBmcmFjdGlvbi0+Z2V0QXR0cmlidXRlKE1h
dGhNTE5hbWVzOjpkZW5vbWFsaWduQXR0cik7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRh
bGlnbiwgImxlZnQiKSkKKyAgICAgICAgZGVub21pbmF0b3ItPnN0eWxlKCktPnNldFRleHRBbGln
bihMRUZUKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShkYWxpZ24sICJyaWdodCIp
KQorICAgICAgICBkZW5vbWluYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKFJJR0hUKTsKKyAg
ICBlbHNlCisgICAgICAgIGRlbm9taW5hdG9yLT5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oQ0VOVEVS
KTsKKyAgICAKKyAgICAvLyBGSVhNRTogcGFyc2UgdW5pdHMKKyAgICBTdHJpbmcgdGhpY2tuZXNz
ID0gZnJhY3Rpb24tPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6bGluZXRoaWNrbmVzc0F0dHIp
OworICAgIG1fbGluZVRoaWNrbmVzcyA9IGdMaW5lVGhpbjsKKyAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UodGhpY2tuZXNzLCAidGhpbiIpKQorICAgICAgICBtX2xpbmVUaGlja25lc3MgPSBnTGlu
ZVRoaW47CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGhpY2tuZXNzLCAibWVkaXVt
IikpCisgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9IGdMaW5lTWVkaXVtOworICAgIGVsc2UgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywgInRoaWNrIikpCisgICAgICAgIG1fbGluZVRo
aWNrbmVzcyA9IGdMaW5lVGhpY2s7CisgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodGhp
Y2tuZXNzLCAiMCIpKQorICAgICAgICBtX2xpbmVUaGlja25lc3MgPSAwOworCisgICAgLy8gVXBk
YXRlIHRoZSBzdHlsZSBmb3IgdGhlIHBhZGRpbmcgb2YgdGhlIGRlbm9taW5hdG9yIGZvciB0aGUg
bGluZSB0aGlja25lc3MKKyAgICBsYXN0Q2hpbGQoKS0+c3R5bGUoKS0+c2V0UGFkZGluZ1RvcChM
ZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihtX2xpbmVUaGlja25lc3MgKyBzdHlsZSgpLT5mb250U2l6
ZSgpICogZ0Rlbm9taW5hdG9yUGFkKSwgRml4ZWQpKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxG
cmFjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKK3sKKyAgICBSZW5kZXJCbG9jayogcm93ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBS
ZW5kZXJNYXRoTUxCbG9jayhub2RlKCkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcm93U3R5
bGUgPSBtYWtlQmxvY2tTdHlsZSgpOworICAgIAorICAgIHJvd1N0eWxlLT5zZXRUZXh0QWxpZ24o
Q0VOVEVSKTsKKyAgICBMZW5ndGggcGFkKHN0YXRpY19jYXN0PGludD4ocm93U3R5bGUtPmZvbnRT
aXplKCkgKiBnSG9yaXpvbnRhbFBhZCksIEZpeGVkKTsKKyAgICByb3dTdHlsZS0+c2V0UGFkZGlu
Z0xlZnQocGFkKTsKKyAgICByb3dTdHlsZS0+c2V0UGFkZGluZ1JpZ2h0KHBhZCk7CisgICAgCisg
ICAgLy8gT25seSBhZGQgcGFkZGluZyBmb3Igcm93cyBhcyBkZW5vbWluYXRvcnMKKyAgICBib29s
IGlzTnVtZXJhdG9yID0gaXNFbXB0eSgpOworICAgIGlmICghaXNOdW1lcmF0b3IpIAorICAgICAg
ICByb3dTdHlsZS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoMiwgRml4ZWQpKTsKKyAgICAKKyAgICBy
b3ctPnNldFN0eWxlKHJvd1N0eWxlLnJlbGVhc2UoKSk7CisgICAgUmVuZGVyQmxvY2s6OmFkZENo
aWxkKHJvdywgYmVmb3JlQ2hpbGQpOworICAgIHJvdy0+YWRkQ2hpbGQoY2hpbGQpOworICAgIHVw
ZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OmxheW91
dCgpCit7CisgICAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKworICAgIC8vIEFkanVzdCB0aGUgZnJh
Y3Rpb24gbGluZSB0aGlja25lc3MgZm9yIHRoZSB6b29tCisgICAgaWYgKGxhc3RDaGlsZCgpICYm
IGxhc3RDaGlsZCgpLT5pc1JlbmRlckJsb2NrKCkpCisgICAgICAgIG1fbGluZVRoaWNrbmVzcyA9
IHN0YXRpY19jYXN0PGludD4obV9saW5lVGhpY2tuZXNzICogY2VpbChnRnJhY3Rpb25CYXJXaWR0
aCAqIHN0eWxlKCktPmZvbnRTaXplKCkpKTsKKworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsK
KworfQorCit2b2lkIFJlbmRlck1hdGhNTEZyYWN0aW9uOjpwYWludChQYWludEluZm8mIGluZm8s
IGludCB0eCwgaW50IHR5KQoreworICAgIFJlbmRlck1hdGhNTEJsb2NrOjpwYWludChpbmZvLCB0
eCwgdHkpOworICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSB8fCBpbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKCFmaXJzdENoaWxkKCkgfHwhbV9saW5lVGhpY2tuZXNzKQorICAgICAgICByZXR1cm47
CisKKyAgICBpbnQgdmVydGljYWxPZmZzZXQgPSAwOworICAgIC8vIFRoZSBjaGlsZHJlbiBhcmUg
YWx3YXlzIFJlbmRlck1hdGhNTEJsb2NrIGluc3RhbmNlcworICAgIGlmIChmaXJzdENoaWxkKCkt
PmlzUmVuZGVyTWF0aE1MQmxvY2soKSkgeworICAgICAgICBpbnQgYWRqdXN0Rm9yVGhpY2tuZXNz
ID0gbV9saW5lVGhpY2tuZXNzID4gMSA/IG1fbGluZVRoaWNrbmVzcyAvIDIgOiAxOworICAgICAg
ICBpZiAobV9saW5lVGhpY2tuZXNzICUgMiA9PSAxKQorICAgICAgICAgICAgYWRqdXN0Rm9yVGhp
Y2tuZXNzKys7CisgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBudW1lcmF0b3IgPSB0b1JlbmRl
ck1hdGhNTEJsb2NrKGZpcnN0Q2hpbGQoKSk7CisgICAgICAgIGlmIChudW1lcmF0b3ItPmlzUmVu
ZGVyTWF0aE1MUm93KCkpCisgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IG51bWVyYXRvci0+
b2Zmc2V0SGVpZ2h0KCkgKyBhZGp1c3RGb3JUaGlja25lc3M7CisgICAgICAgIGVsc2UgCisgICAg
ICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9IG51bWVyYXRvci0+b2Zmc2V0SGVpZ2h0KCk7ICAgICAg
ICAKKyAgICB9CisgICAgCisgICAgdHggKz0geCgpOworICAgIHR5ICs9IHkoKSArIHZlcnRpY2Fs
T2Zmc2V0OworICAgIAorICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOworICAgIAorICAgIGluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHN0YXRpY19jYXN0PGZsb2F0PihtX2xpbmVUaGlj
a25lc3MpKTsKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsK
KyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0eWxlKCktPnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFjZVNSR0IpOworICAgIAorICAgIGlu
Zm8uY29udGV4dC0+ZHJhd0xpbmUoSW50UG9pbnQodHgsIHR5KSwgSW50UG9pbnQodHggKyBvZmZz
ZXRXaWR0aCgpLCB0eSkpOworICAgIAorICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOworfQor
CitpbnQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGlvbiwgTGluZVBv
c2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAoreworICAgIGlmIChmaXJzdENoaWxk
KCkgJiYgZmlyc3RDaGlsZCgpLT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKKyAgICAgICAgUmVu
ZGVyTWF0aE1MQmxvY2sqIG51bWVyYXRvciA9IHRvUmVuZGVyTWF0aE1MQmxvY2soZmlyc3RDaGls
ZCgpKTsKKyAgICAgICAgLy8gRklYTUU6IHRoZSBiYXNlbGluZSBzaG91bGQgYWRqdXN0IHNvIHRo
ZSBmcmFjdGlvbiBsaW5lIGFsaWducworICAgICAgICAvLyByZWxhdGl2ZSBjZXJ0YWluIG9wZXJh
dG9ycyAoZS5nLiBhbGlnbnMgd2l0aCB0aGUgaG9yaXpvbnRhbAorICAgICAgICAvLyBzdHJva2Ug
b2YgdGhlIHBsdXMpLiAgMS8zIG9mIHRoZSBjdXJyZW50IGZvbnQgc2l6ZSBpcyBqdXN0CisgICAg
ICAgIC8vIGEgZ29vZCBndWVzcy4KKyAgICAgICAgcmV0dXJuIG51bWVyYXRvci0+b2Zmc2V0SGVp
Z2h0KCkgKyBzdHlsZSgpLT5mb250U2l6ZSgpIC8gMzsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRl
ckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBs
aW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2RlKTsKK30KKworfQorCisKKyNlbmRpZiAvLyBF
TkFCTEUoTUFUSE1MKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxGcmFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uaAkocmV2aXNpb24gNzUzNTApCShmcm9tIFNv
dXJjZS9XZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oOjc1MzUwKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxl
eCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEZyYW7Dp29pcyBTYXVzc2V0IChzYXVzc2V0QGdtYWlsLmNvbSku
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRl
ck1hdGhNTEZyYWN0aW9uX2gKKyNkZWZpbmUgUmVuZGVyTWF0aE1MRnJhY3Rpb25faAorCisjaWYg
RU5BQkxFKE1BVEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVuZGVyTWF0aE1MRnJhY3Rpb24gOiBwdWJsaWMgUmVu
ZGVyTWF0aE1MQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlck1hdGhNTEZyYWN0aW9uKEVsZW1l
bnQqIGZyYWN0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVGcm9tRWxlbWVudCgpOworICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9u
dEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlv
bk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OyAKKyAgICB2aXJ0dWFsIHZv
aWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBsYXlvdXQoKTsKK3ByaXZhdGU6CisgICAgaW50IG1fbGluZVRoaWNrbmVzczsK
K307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisKKyNlbmRpZiAvLyBSZW5kZXJN
YXRoTUxGcmFjdGlvbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE1hdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHAJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MTWF0aC5jcHA6NzUzNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE1hdGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxv
d3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKwor
I2luY2x1ZGUgIlJlbmRlck1hdGhNTE1hdGguaCIKKworI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5hbWVzOwor
CitSZW5kZXJNYXRoTUxNYXRoOjpSZW5kZXJNYXRoTUxNYXRoKE5vZGUqIG1hdGgpCisgICAgOiBS
ZW5kZXJNYXRoTUxSb3cobWF0aCkKK3sKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BVEhN
TCkKKwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxN
YXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxNYXRoLmgJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRo
bWwvUmVuZGVyTWF0aE1MTWF0aC5oOjc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxNYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tp
LmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFJlbmRlck1hdGhNTE1hdGhfaAorI2RlZmluZSBSZW5kZXJNYXRoTUxNYXRoX2gKKworI2lmIEVO
QUJMRShNQVRITUwpCisKKyNpbmNsdWRlICJSZW5kZXJNYXRoTUxSb3cuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAorY2xhc3MgUmVuZGVyTWF0aE1MTWF0aCA6IHB1YmxpYyBSZW5kZXJN
YXRoTUxSb3cgeworcHVibGljOgorICAgIFJlbmRlck1hdGhNTE1hdGgoTm9kZSogY29udGFpbmVy
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNYXRoTUxNYXRoKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorfTsKKyAgICAKK30KKworCisjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKKyNlbmRp
ZiAvLyBSZW5kZXJNYXRoTUxNYXRoX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwCShyZXZpc2lvbiA3
NTM1MCkJKGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNw
cDo3NTM1MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
T3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBGcmFuw6dvaXMgU2F1c3NldCAo
c2F1c3NldEBnbWFpbC5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKworI2luY2x1
ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCisKKyNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworICAgIAordXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5hbWVzOworCitS
ZW5kZXJNYXRoTUxPcGVyYXRvcjo6UmVuZGVyTWF0aE1MT3BlcmF0b3IoTm9kZSogY29udGFpbmVy
KQorICAgIDogUmVuZGVyTWF0aE1MQmxvY2soY29udGFpbmVyKQorICAgICwgbV9zdHJldGNoSGVp
Z2h0KDApCisgICAgLCBtX29wZXJhdG9yKDApCit7Cit9CisKK1JlbmRlck1hdGhNTE9wZXJhdG9y
OjpSZW5kZXJNYXRoTUxPcGVyYXRvcihOb2RlKiBjb250YWluZXIsIFVDaGFyIG9wZXJhdG9yQ2hh
cikKKyAgICA6IFJlbmRlck1hdGhNTEJsb2NrKGNvbnRhaW5lcikKKyAgICAsIG1fc3RyZXRjaEhl
aWdodCgwKQorICAgICwgbV9vcGVyYXRvcihjb252ZXJ0SHlwaGVuTWludXNUb01pbnVzU2lnbihv
cGVyYXRvckNoYXIpKQoreworfQorCitib29sIFJlbmRlck1hdGhNTE9wZXJhdG9yOjppc0NoaWxk
QWxsb3dlZChSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSopIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgZmxvYXQgZ09wZXJhdG9yU3BhY2VyID0gMC4xZjsK
K3N0YXRpYyBjb25zdCBmbG9hdCBnT3BlcmF0b3JFeHBhbnNpb24gPSAxLjJmOworCit2b2lkIFJl
bmRlck1hdGhNTE9wZXJhdG9yOjpzdHJldGNoVG9IZWlnaHQoaW50IGhlaWdodCkKK3sKKyAgICBp
ZiAoaGVpZ2h0ID09IG1fc3RyZXRjaEhlaWdodCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3Ry
ZXRjaEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oaGVpZ2h0ICogZ09wZXJhdG9yRXhwYW5zaW9u
KTsKKyAgICAKKyAgICB1cGRhdGVCb3hNb2RlbEluZm9Gcm9tU3R5bGUoKTsKKyAgICBzZXROZWVk
c0xheW91dCh0cnVlKTsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxPcGVyYXRvcjo6bGF5b3V0KCkg
Cit7CisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIGNhbGxlZCBoZXJl
IGJ1dCB3aGVuIHRoZSBvcGVyYXRvcgorICAgIC8vIGlzbid0IHN0cmV0Y2hlZCAoZS5nLiBvdXRz
aWRlIG9mIGEgbXJvdyksIGl0IG5lZWRzIHRvIGJlIGNhbGxlZCBzb21laG93CisgICAgdXBkYXRl
RnJvbUVsZW1lbnQoKTsKKyAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7Cit9CisKKy8vIFRoaXMg
aXMgYSB0YWJsZSBvZiBzdHJldGNoeSBjaGFyYWN0ZXJzLgorLy8gRklYTUU6IFNob3VsZCB0aGlz
IGJlIHJlYWQgZnJvbSB0aGUgdW5pY29kZSBjaGFyYWN0ZXJpc3RpY3Mgc29tZWhvdz8KKy8vIHRh
YmxlOiAgc3RyZXRjaHkgb3BlcmF0b3IsIHRvcCBjaGFyLCBleHRlbnNpb24gY2hhciwgYm90dG9t
IGNoYXIsIG1pZGRsZSBjaGFyCitzdGF0aWMgc3RydWN0IFN0cmV0Y2h5Q2hhcmFjdGVyIHsKKyAg
ICBVQ2hhciBjaGFyYWN0ZXI7CisgICAgVUNoYXIgdG9wR2x5cGg7CisgICAgVUNoYXIgZXh0ZW5z
aW9uR2x5cGg7CisgICAgVUNoYXIgYm90dG9tR2x5cGg7CisgICAgVUNoYXIgbWlkZGxlR2x5cGg7
Cit9IHN0cmV0Y2h5Q2hhcmFjdGVyc1sxM10gPSB7CisgICAgeyAweDI4ICAsIDB4MjM5YiwgMHgy
MzljLCAweDIzOWQsIDB4MCAgICB9LCAvLyBsZWZ0IHBhcmVudGhlc2lzCisgICAgeyAweDI5ICAs
IDB4MjM5ZSwgMHgyMzlmLCAweDIzYTAsIDB4MCAgICB9LCAvLyByaWdodCBwYXJlbnRoZXNpcwor
ICAgIHsgMHg1YiAgLCAweDIzYTEsIDB4MjNhMiwgMHgyM2EzLCAweDAgICAgfSwgLy8gbGVmdCBz
cXVhcmUgYnJhY2tldAorICAgIHsgMHgyMzA4LCAweDIzYTEsIDB4MjNhMiwgMHgyM2EyLCAweDAg
ICAgfSwgLy8gbGVmdCBjZWlsaW5nCisgICAgeyAweDIzMGEsIDB4MjNhMiwgMHgyM2EyLCAweDIz
YTMsIDB4MCAgICB9LCAvLyBsZWZ0IGZsb29yCisgICAgeyAweDVkICAsIDB4MjNhNCwgMHgyM2E1
LCAweDIzYTYsIDB4MCAgICB9LCAvLyByaWdodCBzcXVhcmUgYnJhY2tldAorICAgIHsgMHgyMzA5
LCAweDIzYTQsIDB4MjNhNSwgMHgyM2E1LCAweDAgICAgfSwgLy8gcmlnaHQgY2VpbGluZworICAg
IHsgMHgyMzBiLCAweDIzYTUsIDB4MjNhNSwgMHgyM2E2LCAweDAgICAgfSwgLy8gcmlnaHQgZmxv
b3IKKyAgICB7IDB4N2IgICwgMHgyM2E3LCAweDIzYWEsIDB4MjNhOSwgMHgyM2E4IH0sIC8vIGxl
ZnQgY3VybHkgYnJhY2tldAorICAgIHsgMHg3YyAgLCAweDIzZDAsIDB4MjNkMCwgMHgyM2QwLCAw
eDAgICAgfSwgLy8gdmVydGljYWwgYmFyCisgICAgeyAweDIwMTYsIDB4MjAxNiwgMHgyMDE2LCAw
eDIwMTYsIDB4MCAgICB9LCAvLyBkb3VibGUgdmVydGljYWwgbGluZQorICAgIHsgMHg3ZCAgLCAw
eDIzYWIsIDB4MjNhYSwgMHgyM2FkLCAweDIzYWMgfSwgLy8gcmlnaHQgY3VybHkgYnJhY2tldAor
ICAgIHsgMHgyMjJiLCAweDIzMjAsIDB4MjNhZSwgMHgyMzIxLCAweDAgICAgfSAvLyBpbnRlZ3Jh
bCBzaWduCit9OworCisvLyBXZSBzdGFjayBnbHlwaHMgdXNpbmcgYSAxNHB4IGhlaWdodCB3aXRo
IGEgZGlzcGxheWVkIGdseXBoIGhlaWdodAorLy8gb2YgMTBweC4gIFRoZSBsaW5lIGhlaWdodCBp
cyBzZXQgdG8gbGVzcyB0aGFuIHRoZSAxNHB4IHNvIHRoYXQgdGhlcmUKKy8vIGFyZSBubyBibGFu
ayBzcGFjZXMgYmV0d2VlbiB0aGUgc3RhY2tlZCBnbHlwaHMuCisvLworLy8gQ2VydGFpbiBnbHlw
aHMgKGUuZy4gbWlkZGxlIGFuZCBib3R0b20pIG5lZWQgdG8gYmUgYWRqdXN0ZWQgdXB3YXJkcwor
Ly8gaW4gdGhlIHN0YWNrIHNvIHRoYXQgdGhlcmUgaXNuJ3QgYSBnYXAuCisvLworLy8gQWxsIG9m
IHRoZXNlIHNldHRpbmdzIGFyZSByZXByZXNlbnRlZCBpbiB0aGUgY29uc3RhbnRzIGJlbG93Lgor
CisvLyBGSVhNRTogdXNlIGZyYWN0aW9ucyBvZiBzdHlsZSgpLT5mb250U2l6ZSgpIGZvciBwcm9w
ZXIgem9vbWluZy9yZXNpemluZy4KK3N0YXRpYyBjb25zdCBpbnQgZ0dseXBoRm9udFNpemUgPSAx
NDsKK3N0YXRpYyBjb25zdCBpbnQgZ0dseXBoTGluZUhlaWdodCA9IDExOworc3RhdGljIGNvbnN0
IGludCBnTWluaW11bVN0cmV0Y2hIZWlnaHQgPSAyNDsKK3N0YXRpYyBjb25zdCBpbnQgZ0dseXBo
SGVpZ2h0ID0gMTA7CitzdGF0aWMgY29uc3QgaW50IGdUb3BHbHlwaFRvcEFkanVzdCA9IDE7Citz
dGF0aWMgY29uc3QgaW50IGdNaWRkbGVHbHlwaFRvcEFkanVzdCA9IC0xOworc3RhdGljIGNvbnN0
IGludCBnQm90dG9tR2x5cGhUb3BBZGp1c3QgPSAtMzsKK3N0YXRpYyBjb25zdCBmbG9hdCBnTWlu
aW11bVJhdGlvRm9yU3RyZXRjaCA9IDAuMTBmOworCit2b2lkIFJlbmRlck1hdGhNTE9wZXJhdG9y
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCit7CisgICAgLy8gRGVzdHJveSBvdXIgY3VycmVudCBjaGls
ZHJlbgorICAgIGNoaWxkcmVuKCktPmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CisKKyAgICAv
LyBTaW5jZSB3ZSBzaGFyZSBhIG5vZGUgd2l0aCBvdXIgY2hpbGRyZW4sIGRlc3Ryb3lpbmcgb3Vy
IGNoaWxkcmVuIHdpbGwgc2V0IG91ciBub2RlJ3MKKyAgICAvLyByZW5kZXJlciB0byAwLCBzbyB3
ZSBuZWVkIHRvIHJlLXNldCBpdCBiYWNrIHRvIHRoaXMuCisgICAgbm9kZSgpLT5zZXRSZW5kZXJl
cih0aGlzKTsKKyAgICAKKyAgICAvLyBJZiB0aGUgb3BlcmF0b3IgaXMgZml4ZWQsIGl0IHdpbGwg
YmUgY29udGFpbmVkIGluIG1fb3BlcmF0b3IKKyAgICBVQ2hhciBmaXJzdENoYXIgPSBtX29wZXJh
dG9yOworICAgIAorICAgIC8vIFRoaXMgYm9vbGVhbiBpbmRpY2F0ZXMgd2hldGhlciBzdHJldGNo
aW5nIGlzIGRpc2FibGVkIHZpYSB0aGUgbWFya3VwLgorICAgIGJvb2wgc3RyZXRjaERpc2FibGVk
ID0gZmFsc2U7CisgICAgCisgICAgLy8gV2UgbWFkZSBuZWVkIHRoZSBlbGVtZW50IGxhdGVyIGlm
IHdlIGNhbid0IHN0cmV0Y2guCisgICAgaWYgKG5vZGUoKS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpF
TEVNRU5UX05PREUpIHsKKyAgICAgICAgaWYgKEVsZW1lbnQqIG1vID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUoKSkpIHsKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBzdHJldGNoeUF0dHIg
PSBtby0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzdHJldGNoeUF0dHIpOworICAgICAgICAg
ICAgc3RyZXRjaERpc2FibGVkID0gZXF1YWxJZ25vcmluZ0Nhc2Uoc3RyZXRjaHlBdHRyLCAiZmFs
c2UiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgc3RyZXRjaGluZyBpc24ndCBk
aXNhYmxlZCwgZ2V0IHRoZSBjaGFyYWN0ZXIgZnJvbSB0aGUgdGV4dCBjb250ZW50LgorICAgICAg
ICAgICAgaWYgKCFzdHJldGNoRGlzYWJsZWQgJiYgIWZpcnN0Q2hhcikgeworICAgICAgICAgICAg
ICAgIFN0cmluZyBvcFRleHQgPSBtby0+dGV4dENvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgIWZpcnN0Q2hhciAmJiBpIDwgb3BUZXh0Lmxlbmd0aCgp
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKG9wVGV4
dFtpXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoYXIgPSBvcFRleHRbaV07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIC8vIFRoZSAnaW5kZXgnIGhvbGRzIHRoZSBzdHJldGNoYWJsZSBjaGFyYWN0ZXIncyBnbHlw
aCBpbmZvcm1hdGlvbgorICAgIGludCBpbmRleCA9IC0xOworICAgIAorICAgIC8vIGlzU3RyZXRj
aHkgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNoYXJhY3RlciBpcyBzdHJlYXRjaGFibGUgdmlhIGEg
bnVtYmVyIG9mIGZhY3RvcnMuCisgICAgYm9vbCBpc1N0cmV0Y2h5ID0gZmFsc2U7CisgICAgCisg
ICAgLy8gQ2hlY2sgZm9yIGEgc3RyZXRjaGFibGUgY2hhcmFjdGVyLgorICAgIGlmICghc3RyZXRj
aERpc2FibGVkICYmIGZpcnN0Q2hhcikgeworICAgICAgICBjb25zdCBpbnQgbWF4SW5kZXggPSBX
VEZfQVJSQVlfTEVOR1RIKHN0cmV0Y2h5Q2hhcmFjdGVycyk7CisgICAgICAgIGZvciAoaW5kZXgr
KzsgaW5kZXggPCBtYXhJbmRleDsgaW5kZXgrKykgeworICAgICAgICAgICAgaWYgKHN0cmV0Y2h5
Q2hhcmFjdGVyc1tpbmRleF0uY2hhcmFjdGVyID09IGZpcnN0Q2hhcikgeworICAgICAgICAgICAg
ICAgIGlzU3RyZXRjaHkgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgc3RyZXRjaCBjaGFy
YWN0ZXIgaWYgdGhlIHN0cmV0Y2ggaGVpZ2h0IGlzIGxhcmdlciB0aGFuIGEgbWluaW11bSBzaXpl
IChlLmcuIDI0cHgpLgorICAgIGJvb2wgc2hvdWxkU3RyZXRjaCA9IGlzU3RyZXRjaHkgJiYgbV9z
dHJldGNoSGVpZ2h0PmdNaW5pbXVtU3RyZXRjaEhlaWdodDsKKyAgICAKKyAgICAvLyBFaXRoZXIg
c3RyZXRjaCBpcyBkaXNhYmxlZCBvciB3ZSBkb24ndCBoYXZlIGEgc3RyZXRjaGFibGUgY2hhcmFj
dGVyIG92ZXIgdGhlIG1pbmltdW0gaGVpZ2h0CisgICAgaWYgKHN0cmV0Y2hEaXNhYmxlZCB8fCAh
c2hvdWxkU3RyZXRjaCkgeworICAgICAgICBtX2lzU3RhY2tlZCA9IGZhbHNlOworICAgICAgICBS
ZW5kZXJCbG9jayogY29udGFpbmVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJNYXRoTUxC
bG9jayhub2RlKCkpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBuZXdT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgbmV3U3R5bGUtPmluaGVyaXRG
cm9tKHN0eWxlKCkpOworICAgICAgICBuZXdTdHlsZS0+c2V0RGlzcGxheShJTkxJTkVfQkxPQ0sp
OworICAgICAgICBuZXdTdHlsZS0+c2V0VmVydGljYWxBbGlnbihCQVNFTElORSk7CisgICAgICAg
IAorICAgICAgICAvLyBDaGVjayBmb3IgYSBzdHJldGNoYWJsZSBjaGFyYWN0ZXIgdGhhdCBpcyB1
bmRlciB0aGUgbWluaW11bSBoZWlnaHQgYW5kIHVzZSB0aGUKKyAgICAgICAgLy8gZm9udCBzaXpl
IHRvIGFkanVzdCB0aGUgZ2x5cGggc2l6ZS4KKyAgICAgICAgaW50IGN1cnJlbnRGb250U2l6ZSA9
IHN0eWxlKCktPmZvbnRTaXplKCk7CisgICAgICAgIGlmICghc3RyZXRjaERpc2FibGVkICYmIGlz
U3RyZXRjaHkgJiYgbV9zdHJldGNoSGVpZ2h0ID4gMCAmJiBtX3N0cmV0Y2hIZWlnaHQgPD0gZ01p
bmltdW1TdHJldGNoSGVpZ2h0ICAmJiBtX3N0cmV0Y2hIZWlnaHQgPiBjdXJyZW50Rm9udFNpemUp
IHsKKyAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjOworICAgICAgICAgICAgZGVzYy5z
ZXRJc0Fic29sdXRlU2l6ZSh0cnVlKTsKKyAgICAgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6
ZShtX3N0cmV0Y2hIZWlnaHQpOworICAgICAgICAgICAgZGVzYy5zZXRDb21wdXRlZFNpemUobV9z
dHJldGNoSGVpZ2h0KTsKKyAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24o
ZGVzYyk7CisgICAgICAgICAgICBuZXdTdHlsZS0+Zm9udCgpLnVwZGF0ZShuZXdTdHlsZS0+Zm9u
dCgpLmZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRhaW5lci0+c2V0
U3R5bGUobmV3U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgYWRkQ2hpbGQoY29udGFpbmVyKTsK
KyAgICAgICAgCisgICAgICAgIC8vIEJ1aWxkIHRoZSB0ZXh0IG9mIHRoZSBvcGVyYXRvci4KKyAg
ICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IDA7CisgICAgICAgIGlmIChtX29wZXJhdG9yKSAKKyAg
ICAgICAgICAgIHRleHQgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHQobm9kZSgpLCBT
dHJpbmdJbXBsOjpjcmVhdGUoJm1fb3BlcmF0b3IsIDEpKTsKKyAgICAgICAgZWxzZSBpZiAobm9k
ZSgpLT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkKKyAgICAgICAgICAgIGlmIChF
bGVtZW50KiBtbyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKQorICAgICAgICAgICAg
ICAgIHRleHQgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRlclRleHQobm9kZSgpLCBtby0+dGV4
dENvbnRlbnQoKS5yZXBsYWNlKGh5cGhlbk1pbnVzLCBtaW51c1NpZ24pLmltcGwoKSk7CisgICAg
ICAgIC8vIElmIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIHRleHQsIGxlYXZlIGl0IGJsYW5rLgor
ICAgICAgICBpZiAodGV4dCkgeworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiB0ZXh0
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICB0ZXh0U3R5bGUtPmlu
aGVyaXRGcm9tKGNvbnRhaW5lci0+c3R5bGUoKSk7CisgICAgICAgICAgICB0ZXh0LT5zZXRTdHls
ZSh0ZXh0U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGNvbnRhaW5lci0+YWRkQ2hpbGQo
dGV4dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBCdWlsZCBzdHJldGNo
YWJsZSBjaGFyYWN0ZXJzIGFzIGEgc3RhY2sgb2YgZ2x5cGhzLgorICAgICAgICBtX2lzU3RhY2tl
ZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4
XS5taWRkbGVHbHlwaCkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIG1pZGRsZSBnbHlwaCAo
ZS5nLiBhIGN1cmx5IGJyYWNrZXQpIHRoYXQgcmVxdWlyZXMgc3BlY2lhbCBwcm9jZXNzaW5nLgor
ICAgICAgICAgICAgaW50IGhhbGYgPSAobV9zdHJldGNoSGVpZ2h0IC0gZ0dseXBoSGVpZ2h0KSAv
IDI7CisgICAgICAgICAgICBpZiAoaGFsZiA8PSBnR2x5cGhIZWlnaHQpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBvbmx5IGhhdmUgZW5vdWdoIHNwYWNlIGZvciBhIHNpbmdsZSBtaWRkbGUgZ2x5
cGguCisgICAgICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4
XS50b3BHbHlwaCwgaGFsZiwgZ1RvcEdseXBoVG9wQWRqdXN0KTsKKyAgICAgICAgICAgICAgICBj
cmVhdGVHbHlwaChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLm1pZGRsZUdseXBoLCBnR2x5cGhI
ZWlnaHQsIGdNaWRkbGVHbHlwaFRvcEFkanVzdCk7CisgICAgICAgICAgICAgICAgY3JlYXRlR2x5
cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5ib3R0b21HbHlwaCwgMCwgZ0JvdHRvbUdseXBo
VG9wQWRqdXN0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBleHRlbmQgYm90aCB0aGUgdG9wIGFuZCBib3R0b20gdG8gdGhlIG1pZGRsZS4KKyAg
ICAgICAgICAgICAgICBjcmVhdGVHbHlwaChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLnRvcEds
eXBoLCBnR2x5cGhIZWlnaHQsIGdUb3BHbHlwaFRvcEFkanVzdCk7CisgICAgICAgICAgICAgICAg
aW50IHJlbWFpbmluZyA9IGhhbGYgLSBnR2x5cGhIZWlnaHQ7CisgICAgICAgICAgICAgICAgd2hp
bGUgKHJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZyA8
IGdHbHlwaEhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3Ry
ZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5leHRlbnNpb25HbHlwaCwgcmVtYWluaW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVHbHlwaChzdHJldGNoeUNoYXJh
Y3RlcnNbaW5kZXhdLmV4dGVuc2lvbkdseXBoLCBnR2x5cGhIZWlnaHQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nIC09IGdHbHlwaEhlaWdodDsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAvLyBUaGUgbWlkZGxlIGdseXBoIGluIHRoZSBzdGFjay4KKyAgICAgICAgICAgICAgICBjcmVh
dGVHbHlwaChzdHJldGNoeUNoYXJhY3RlcnNbaW5kZXhdLm1pZGRsZUdseXBoLCBnR2x5cGhIZWln
aHQsIGdNaWRkbGVHbHlwaFRvcEFkanVzdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gVGhlIHJlbWFpbmluZyBpcyB0aGUgdG9wIGhhbGYgbWludXMgdGhlIG1pZGRsZSBn
bHlwaCBoZWlnaHQuCisgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gaGFsZiAtIGdHbHlwaEhl
aWdodDsKKyAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRo
ZSBmdWxsIGhlaWdodCBpbiBjYXNlIHRoZSBoZWlnaHQgaXMgb2RkLgorICAgICAgICAgICAgICAg
IGlmIChtX3N0cmV0Y2hIZWlnaHQgJSAyID09IDEpCisgICAgICAgICAgICAgICAgICAgIHJlbWFp
bmluZysrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEV4dGVuZCB0byB0
aGUgYm90dG9tIGdseXBoLgorICAgICAgICAgICAgICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPCBnR2x5cGhIZWlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRl
eF0uZXh0ZW5zaW9uR2x5cGgsIHJlbWFpbmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZW1haW5pbmcgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFyYWN0ZXJzW2luZGV4XS5leHRlbnNp
b25HbHlwaCwgZ0dseXBoSGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmlu
ZyAtPSBnR2x5cGhIZWlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIGJvdHRvbSBnbHlw
aCBpbiB0aGUgc3RhY2suCisgICAgICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlDaGFy
YWN0ZXJzW2luZGV4XS5ib3R0b21HbHlwaCwgMCwgZ0JvdHRvbUdseXBoVG9wQWRqdXN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBo
YXZlIGEgbWlkZGxlIGdseXBoIGFuZCBzbyB3ZSBqdXN0IGV4dGVuZCBmcm9tIHRoZSB0b3AgdG8g
dGhlIGJvdHRvbSBnbHlwaC4KKyAgICAgICAgICAgIGludCByZW1haW5pbmcgPSBtX3N0cmV0Y2hI
ZWlnaHQgLSAyICogZ0dseXBoSGVpZ2h0OworICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRj
aHlDaGFyYWN0ZXJzW2luZGV4XS50b3BHbHlwaCwgZ0dseXBoSGVpZ2h0LCBnVG9wR2x5cGhUb3BB
ZGp1c3QpOworICAgICAgICAgICAgd2hpbGUgKHJlbWFpbmluZyA+IDApIHsKKyAgICAgICAgICAg
ICAgICBpZiAocmVtYWluaW5nIDwgZ0dseXBoSGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IGNyZWF0ZUdseXBoKHN0cmV0Y2h5Q2hhcmFjdGVyc1tpbmRleF0uZXh0ZW5zaW9uR2x5cGgsIHJl
bWFpbmluZyk7CisgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZyA9IDA7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY3JlYXRlR2x5cGgoc3RyZXRjaHlD
aGFyYWN0ZXJzW2luZGV4XS5leHRlbnNpb25HbHlwaCwgZ0dseXBoSGVpZ2h0KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVtYWluaW5nIC09IGdHbHlwaEhlaWdodDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjcmVhdGVHbHlwaChzdHJldGNoeUNoYXJhY3Rl
cnNbaW5kZXhdLmJvdHRvbUdseXBoLCAwLCBnQm90dG9tR2x5cGhUb3BBZGp1c3QpOworICAgICAg
ICB9CisgICAgfQorfQorCitSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck1hdGhNTE9wZXJhdG9y
OjpjcmVhdGVTdGFja2FibGVTdHlsZShpbnQgc2l6ZSwgaW50IHRvcFJlbGF0aXZlKQoreworICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlKCk7Cisg
ICAgbmV3U3R5bGUtPmluaGVyaXRGcm9tKHN0eWxlKCkpOworICAgIG5ld1N0eWxlLT5zZXREaXNw
bGF5KEJMT0NLKTsKKyAgICAKKyAgICBGb250RGVzY3JpcHRpb24gZGVzYzsKKyAgICBkZXNjLnNl
dElzQWJzb2x1dGVTaXplKHRydWUpOworICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZShnR2x5cGhG
b250U2l6ZSk7CisgICAgZGVzYy5zZXRDb21wdXRlZFNpemUoZ0dseXBoRm9udFNpemUpOworICAg
IG5ld1N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oZGVzYyk7CisgICAgbmV3U3R5bGUtPmZvbnQo
KS51cGRhdGUobmV3U3R5bGUtPmZvbnQoKS5mb250U2VsZWN0b3IoKSk7CisgICAgbmV3U3R5bGUt
PnNldExpbmVIZWlnaHQoTGVuZ3RoKGdHbHlwaExpbmVIZWlnaHQsIEZpeGVkKSk7CisgICAgbmV3
U3R5bGUtPnNldFZlcnRpY2FsQWxpZ24oVE9QKTsKKworICAgIGlmIChzaXplID4gMCkKKyAgICAg
ICAgbmV3U3R5bGUtPnNldE1heEhlaWdodChMZW5ndGgoc2l6ZSwgRml4ZWQpKTsKKyAgICAKKyAg
ICBuZXdTdHlsZS0+c2V0T3ZlcmZsb3dZKE9ISURERU4pOworICAgIG5ld1N0eWxlLT5zZXRPdmVy
Zmxvd1goT0hJRERFTik7CisgICAgaWYgKHRvcFJlbGF0aXZlKSB7CisgICAgICAgIG5ld1N0eWxl
LT5zZXRUb3AoTGVuZ3RoKHRvcFJlbGF0aXZlLCBGaXhlZCkpOworICAgICAgICBuZXdTdHlsZS0+
c2V0UG9zaXRpb24oUmVsYXRpdmVQb3NpdGlvbik7CisgICAgfQorCisgICAgcmV0dXJuIG5ld1N0
eWxlOworfQorCitSZW5kZXJCbG9jayogUmVuZGVyTWF0aE1MT3BlcmF0b3I6OmNyZWF0ZUdseXBo
KFVDaGFyIGdseXBoLCBpbnQgc2l6ZSwgaW50IGNoYXJSZWxhdGl2ZSwgaW50IHRvcFJlbGF0aXZl
KQoreworICAgIFJlbmRlckJsb2NrKiBjb250YWluZXIgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJl
bmRlck1hdGhNTEJsb2NrKG5vZGUoKSk7CisgICAgY29udGFpbmVyLT5zZXRTdHlsZShjcmVhdGVT
dGFja2FibGVTdHlsZShzaXplLCB0b3BSZWxhdGl2ZSkucmVsZWFzZSgpKTsKKyAgICBhZGRDaGls
ZChjb250YWluZXIpOworICAgIFJlbmRlckJsb2NrKiBwYXJlbnQgPSBjb250YWluZXI7CisgICAg
aWYgKGNoYXJSZWxhdGl2ZSkgeworICAgICAgICBSZW5kZXJCbG9jayogY2hhckJsb2NrID0gbmV3
IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJCbG9jayhub2RlKCkpOworICAgICAgICBSZWZQdHI8UmVu
ZGVyU3R5bGU+IGNoYXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgY2hh
clN0eWxlLT5pbmhlcml0RnJvbShjb250YWluZXItPnN0eWxlKCkpOworICAgICAgICBjaGFyU3R5
bGUtPnNldERpc3BsYXkoSU5MSU5FX0JMT0NLKTsKKyAgICAgICAgY2hhclN0eWxlLT5zZXRUb3Ao
TGVuZ3RoKGNoYXJSZWxhdGl2ZSwgRml4ZWQpKTsKKyAgICAgICAgY2hhclN0eWxlLT5zZXRQb3Np
dGlvbihSZWxhdGl2ZVBvc2l0aW9uKTsKKyAgICAgICAgY2hhckJsb2NrLT5zZXRTdHlsZShjaGFy
U3R5bGUpOworICAgICAgICBwYXJlbnQtPmFkZENoaWxkKGNoYXJCbG9jayk7CisgICAgICAgIHBh
cmVudCA9IGNoYXJCbG9jazsKKyAgICB9CisgICAgCisgICAgUmVuZGVyVGV4dCogdGV4dCA9IG5l
dyAocmVuZGVyQXJlbmEoKSkgUmVuZGVyVGV4dChub2RlKCksIFN0cmluZ0ltcGw6OmNyZWF0ZSgm
Z2x5cGgsIDEpKTsKKyAgICB0ZXh0LT5zZXRTdHlsZShjb250YWluZXItPnN0eWxlKCkpOworICAg
IHBhcmVudC0+YWRkQ2hpbGQodGV4dCk7CisgICAgcmV0dXJuIGNvbnRhaW5lcjsKK30KKworaW50
IFJlbmRlck1hdGhNTE9wZXJhdG9yOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSwgYm9v
bCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3Rpb24sIExpbmVQb3NpdGlv
bk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKK3sKKyAgICBpZiAobV9pc1N0YWNrZWQpCisg
ICAgICAgIHJldHVybiBtX3N0cmV0Y2hIZWlnaHQgKiAyIC8gMyAtIChtX3N0cmV0Y2hIZWlnaHQg
LSBzdGF0aWNfY2FzdDxpbnQ+KG1fc3RyZXRjaEhlaWdodCAvIGdPcGVyYXRvckV4cGFuc2lvbikp
IC8gMjsgICAgCisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEFscGhh
YmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBsaW5lRGlyZWN0aW9uLCBsaW5lUG9zaXRpb25Nb2Rl
KTsKK30KKyAgICAKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
bWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5oCShyZXZpc2lvbiA3NTM1
MCkJKGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmg6NzUz
NTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJlbmRlck1hdGhNTE9wZXJhdG9y
X2gKKyNkZWZpbmUgUmVuZGVyTWF0aE1MT3BlcmF0b3JfaAorCisjaWYgRU5BQkxFKE1BVEhNTCkK
KworI2luY2x1ZGUgIkNoYXJhY3Rlck5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxv
Y2suaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgUmVuZGVyTWF0aE1MT3Bl
cmF0b3IgOiBwdWJsaWMgUmVuZGVyTWF0aE1MQmxvY2sgeworcHVibGljOgorICAgIFJlbmRlck1h
dGhNTE9wZXJhdG9yKE5vZGUqIGNvbnRhaW5lcik7CisgICAgUmVuZGVyTWF0aE1MT3BlcmF0b3Io
Tm9kZSogY29udGFpbmVyLCBVQ2hhciBvcGVyYXRvckNoYXIpOworICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlck1hdGhNTE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1
YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IHBpeGVsSGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsgCisgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2Vk
KFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7
CisgICAgICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3JlYXRlU3RhY2thYmxlU3R5bGUoaW50IHNpemUs
IGludCB0b3BSZWxhdGl2ZSk7CisgICAgdmlydHVhbCBSZW5kZXJCbG9jayogY3JlYXRlR2x5cGgo
VUNoYXIgZ2x5cGgsIGludCBzaXplID0gMCwgaW50IGNoYXJSZWxhdGl2ZSA9IDAsIGludCB0b3BS
ZWxhdGl2ZSA9IDApOworICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV9zdHJldGNoSGVpZ2h0Owor
ICAgIGJvb2wgbV9pc1N0YWNrZWQ7CisgICAgVUNoYXIgbV9vcGVyYXRvcjsKK307CisKK2lubGlu
ZSBSZW5kZXJNYXRoTUxPcGVyYXRvciogdG9SZW5kZXJNYXRoTUxPcGVyYXRvcihSZW5kZXJNYXRo
TUxCbG9jayogYmxvY2spCit7IAorICAgIEFTU0VSVCghYmxvY2sgfHwgYmxvY2stPmlzUmVuZGVy
TWF0aE1MT3BlcmF0b3IoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlck1hdGhNTE9w
ZXJhdG9yKj4oYmxvY2spOworfQorCitpbmxpbmUgY29uc3QgUmVuZGVyTWF0aE1MT3BlcmF0b3Iq
IHRvUmVuZGVyTWF0aE1MT3BlcmF0b3IoY29uc3QgUmVuZGVyTWF0aE1MQmxvY2sqIGJsb2NrKQor
eyAKKyAgICBBU1NFUlQoIWJsb2NrIHx8IGJsb2NrLT5pc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkp
OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJNYXRoTUxPcGVyYXRvcio+KGJs
b2NrKTsKK30KKworaW5saW5lIFVDaGFyIGNvbnZlcnRIeXBoZW5NaW51c1RvTWludXNTaWduKFVD
aGFyIGdseXBoKQoreworICAgIC8vIFdoZW4gcmVuZGVyZWQgYXMgYSBtYXRoZW1hdGljYWwgb3Bl
cmF0b3IsIG1pbnVzIGdseXBoIHNob3VsZCBiZSBsYXJnZXIuCisgICAgaWYgKGdseXBoID09IGh5
cGhlbk1pbnVzKQorICAgICAgICByZXR1cm4gbWludXNTaWduOworICAgIAorICAgIHJldHVybiBn
bHlwaDsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKKyNlbmRpZiAvLyBSZW5k
ZXJNYXRoTUxPcGVyYXRvcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFJvb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHAJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm9vdC5jcHA6NzUzNTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXgg
TWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBGcmFuw6dvaXMgU2F1c3NldCAoc2F1c3NldEBnbWFpbC5jb20pLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTFJvb3Qu
aCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIk1hdGhNTE5hbWVz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3VzaW5nIG5hbWVzcGFjZSBNYXRoTUxO
YW1lczsKKworLy8gTGVmdCBtYXJnaW4gb2YgdGhlIHJhZGljYWwgKHB4KQorY29uc3QgaW50IGdS
YWRpY2FsTGVmdE1hcmdpbiA9IDM7CisvLyBCb3R0b20gcGFkZGluZyBvZiB0aGUgcmFkaWNhbCAo
cHgpCitjb25zdCBpbnQgZ1JhZGljYWxCYXNlUGFkID0gMzsKKy8vIFRocmVzaG9sZCBhYm92ZSB3
aGljaCB0aGUgcmFkaWNhbCBzaGFwZSBpcyBtb2RpZmllZCB0byBsb29rIG5pY2Ugd2l0aCBiaWcg
YmFzZXMgKCUpCitjb25zdCBmbG9hdCBnVGhyZXNob2xkQmFzZUhlaWdodCA9IDEuNWY7CisvLyBS
YWRpY2FsIHdpZHRoICglKQorY29uc3QgZmxvYXQgZ1JhZGljYWxXaWR0aCA9IDAuNzVmOworLy8g
SG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgYm90dG9tIHBvaW50IG9mIHRoZSByYWRpY2FsICgl
KQorY29uc3QgZmxvYXQgZ1JhZGljYWxCb3R0b21Qb2ludFhQb3M9IDAuNWY7CisvLyBIb3Jpem9u
dGFsIHBvc2l0aW9uIG9mIHRoZSB0b3AgbGVmdCBwb2ludCBvZiB0aGUgcmFkaWNhbCAoJSkKK2Nv
bnN0IGZsb2F0IGdSYWRpY2FsVG9wTGVmdFBvaW50WFBvcyA9IDAuOGY7CisvLyBWZXJ0aWNhbCBw
b3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgcG9pbnQgb2YgdGhlIHJhZGljYWwgKCUpCitjb25zdCBm
bG9hdCBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgPSAwLjYyNWY7IAorLy8gVmVydGljYWwgc2hp
ZnQgb2YgdGhlIGxlZnQgZW5kIHBvaW50IG9mIHRoZSByYWRpY2FsICglKQorY29uc3QgZmxvYXQg
Z1JhZGljYWxMZWZ0RW5kWVNoaWZ0ID0gMC4wNWY7CisvLyBSb290IHBhZGRpbmcgYXJvdW5kIHRo
ZSBiYXNlICglKQorY29uc3QgZmxvYXQgZ1Jvb3RQYWRkaW5nID0gMC4yZjsKKy8vIEFkZGl0aW9u
YWwgYm90dG9tIHJvb3QgcGFkZGluZyAoJSkKK2NvbnN0IGZsb2F0IGdSb290Qm90dG9tUGFkZGlu
ZyA9IDAuMmY7CisgICAgCisvLyBSYWRpY2FsIGxpbmUgdGhpY2tuZXNzICglKQorY29uc3QgZmxv
YXQgZ1JhZGljYWxMaW5lVGhpY2tuZXNzID0gMC4wMmY7CisvLyBSYWRpY2FsIHRoaWNrIGxpbmUg
dGhpY2tuZXNzICglKQorY29uc3QgZmxvYXQgZ1JhZGljYWxUaGlja0xpbmVUaGlja25lc3MgPSAw
LjFmOworICAgIAorUmVuZGVyTWF0aE1MUm9vdDo6UmVuZGVyTWF0aE1MUm9vdChOb2RlICpleHBy
ZXNzaW9uKSAKKzogUmVuZGVyTWF0aE1MQmxvY2soZXhwcmVzc2lvbikgCit7Cit9CisKK3ZvaWQg
UmVuZGVyTWF0aE1MUm9vdDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiApCit7CisgICAgaWYgKGlzRW1wdHkoKSkgeworICAgICAgICAvLyBBZGQgYSBibG9jayBm
b3IgdGhlIGluZGV4CisgICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgUmVuZGVyQmxvY2sobm9kZSgpKTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBp
bmRleFN0eWxlID0gbWFrZUJsb2NrU3R5bGUoKTsKKyAgICAgICAgaW5kZXhTdHlsZS0+c2V0RGlz
cGxheShJTkxJTkVfQkxPQ0spOworICAgICAgICBibG9jay0+c2V0U3R5bGUoaW5kZXhTdHlsZS5y
ZWxlYXNlKCkpOworICAgICAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoYmxvY2spOworICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IHRoZSB3cmFwcGluZyBkb2VzIG5vdCBzZWVtIHRvIGJlIG5l
ZWRlZCBhbnltb3JlLgorICAgICAgICAvLyB0aGlzIGlzIHRoZSBiYXNlLCBzbyB3cmFwIGl0IHNv
IHdlIGNhbiBwYWQgaXQKKyAgICAgICAgYmxvY2sgPSBuZXcgKHJlbmRlckFyZW5hKCkpIFJlbmRl
ckJsb2NrKG5vZGUoKSk7CisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gYmFzZVN0eWxlID0g
bWFrZUJsb2NrU3R5bGUoKTsKKyAgICAgICAgYmFzZVN0eWxlLT5zZXREaXNwbGF5KElOTElORV9C
TE9DSyk7CisgICAgICAgIGJhc2VTdHlsZS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKDUgKiBnUmFk
aWNhbFdpZHRoICwgUGVyY2VudCkpOworICAgICAgICBibG9jay0+c2V0U3R5bGUoYmFzZVN0eWxl
LnJlbGVhc2UoKSk7CisgICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChibG9jayk7CisgICAg
ICAgIGJsb2NrLT5hZGRDaGlsZChjaGlsZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gYWx3
YXlzIGFkZCB0byB0aGUgaW5kZXgKKyAgICAgICAgZmlyc3RDaGlsZCgpLT5hZGRDaGlsZChjaGls
ZCk7CisgICAgfQorfQorICAgIAordm9pZCBSZW5kZXJNYXRoTUxSb290OjpwYWludChQYWludElu
Zm8mIGluZm8sIGludCB0eCwgaW50IHR5KQoreworICAgIFJlbmRlck1hdGhNTEJsb2NrOjpwYWlu
dChpbmZvICwgdHggLCB0eSk7CisgICAgCisgICAgaWYgKGluZm8uY29udGV4dC0+cGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAh
bGFzdENoaWxkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHR4ICs9IHgoKTsKKyAgICB0eSAr
PSB5KCk7CisgICAgCisgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGluZGV4Qm94ID0gdG9SZW5k
ZXJCb3hNb2RlbE9iamVjdChsYXN0Q2hpbGQoKSk7CisgICAgCisgICAgaW50IG1heEhlaWdodCA9
IGluZGV4Qm94LT5vZmZzZXRIZWlnaHQoKTsKKyAgICAvLyBkZWZhdWx0IHRvIHRoZSBmb250IHNp
emUgaW4gcGl4ZWxzIGlmIHdlJ3JlIGVtcHR5CisgICAgaWYgKCFtYXhIZWlnaHQpCisgICAgICAg
IG1heEhlaWdodCA9IHN0eWxlKCktPmZvbnRTaXplKCk7CisgICAgaW50IHdpZHRoID0gaW5kZXhC
b3gtPm9mZnNldFdpZHRoKCk7CisgICAgCisgICAgaW50IGluZGV4V2lkdGggPSAwOworICAgIFJl
bmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoY3VycmVudCAh
PSBsYXN0Q2hpbGQoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgp
KSB7CisgICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hN
b2RlbE9iamVjdChjdXJyZW50KTsKKyAgICAgICAgICAgIGluZGV4V2lkdGggKz0gYm94LT5vZmZz
ZXRXaWR0aCgpOworICAgICAgICB9CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2li
bGluZygpOworICAgIH0KKyAgICAKKyAgICBpbnQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4oc3R5bGUoKS0+Zm9udFNpemUoKSAqIGdSYWRpY2FsV2lkdGgpOworICAgIGludCB0b3BTdGFy
dFNoaWZ0ID0gMDsKKyAgICAvLyBCYXNlIGhlaWdodCBhYm92ZSB3aGljaCB0aGUgc2hhcGUgb2Yg
dGhlIHJvb3QgY2hhbmdlcworICAgIGludCB0aHJlc2hvbGRIZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KGdUaHJlc2hvbGRCYXNlSGVpZ2h0ICogc3R5bGUoKS0+Zm9udFNpemUoKSk7CisgICAgCisg
ICAgaWYgKG1heEhlaWdodCA+IHRocmVzaG9sZEhlaWdodCAmJiB0aHJlc2hvbGRIZWlnaHQpIHsK
KyAgICAgICAgZmxvYXQgc2hpZnQgPSAobWF4SGVpZ2h0IC0gdGhyZXNob2xkSGVpZ2h0KSAvIHN0
YXRpY19jYXN0PGZsb2F0Pih0aHJlc2hvbGRIZWlnaHQpOworICAgICAgICBpZiAoc2hpZnQgPiAx
LikKKyAgICAgICAgICAgIHNoaWZ0ID0gMS4wZjsKKyAgICAgICAgdG9wU3RhcnRTaGlmdCA9IHN0
YXRpY19jYXN0PGludD4oZ1JhZGljYWxCb3R0b21Qb2ludFhQb3MgKiBmcm9udFdpZHRoICogc2hp
ZnQpOworICAgIH0KKyAgICAKKyAgICB3aWR0aCArPSB0b3BTdGFydFNoaWZ0OworICAgIAorICAg
IGludCByb290UGFkID0gc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5m
b250U2l6ZSgpKTsKKyAgICBpbnQgc3RhcnQgPSB0eCArIGluZGV4V2lkdGggKyBnUmFkaWNhbExl
ZnRNYXJnaW4gKyBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpLnZhbHVlKCkgLSByb290UGFkOworICAg
IHR5ICs9IHN0eWxlKCktPnBhZGRpbmdUb3AoKS52YWx1ZSgpIC0gcm9vdFBhZDsKKyAgICAKKyAg
ICBGbG9hdFBvaW50IHRvcFN0YXJ0KHN0YXJ0IC0gdG9wU3RhcnRTaGlmdCwgdHkpOworICAgIEZs
b2F0UG9pbnQgYm90dG9tTGVmdChzdGFydCAtIGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zICogZnJv
bnRXaWR0aCAsIHR5ICsgbWF4SGVpZ2h0ICsgZ1JhZGljYWxCYXNlUGFkKTsKKyAgICBGbG9hdFBv
aW50IHRvcExlZnQoc3RhcnQgLSBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgKiBmcm9udFdpZHRo
ICwgdHkgKyBnUmFkaWNhbFRvcExlZnRQb2ludFlQb3MgKiBtYXhIZWlnaHQpOworICAgIEZsb2F0
UG9pbnQgbGVmdEVuZChzdGFydCAtIGZyb250V2lkdGggLCB0b3BMZWZ0LnkoKSArIGdSYWRpY2Fs
TGVmdEVuZFlTaGlmdCAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIAorICAgIGluZm8uY29u
dGV4dC0+c2F2ZSgpOworICAgIAorICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNz
KGdSYWRpY2FsTGluZVRoaWNrbmVzcyAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIGluZm8u
Y29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOworICAgIGluZm8uY29udGV4dC0+
c2V0U3Ryb2tlQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5
Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKKyAgICBpbmZvLmNvbnRleHQtPnNldExpbmVK
b2luKE1pdGVySm9pbik7CisgICAgaW5mby5jb250ZXh0LT5zZXRNaXRlckxpbWl0KHN0eWxlKCkt
PmZvbnRTaXplKCkpOworICAgIAorICAgIFBhdGggcm9vdDsKKyAgICAKKyAgICByb290Lm1vdmVU
byhGbG9hdFBvaW50KHRvcFN0YXJ0LngoKSArIHdpZHRoLCB0eSkpOworICAgIC8vIGRyYXcgdG9w
CisgICAgcm9vdC5hZGRMaW5lVG8odG9wU3RhcnQpOworICAgIC8vIGRyYXcgZnJvbSB0b3AgbGVm
dCBjb3JuZXIgdG8gYm90dG9tIHBvaW50IG9mIHJhZGljYWwKKyAgICByb290LmFkZExpbmVUbyhi
b3R0b21MZWZ0KTsKKyAgICAvLyBkcmF3IGZyb20gYm90dG9tIHBvaW50IHRvIHRvcCBvZiBsZWZ0
IHBhcnQgb2YgcmFkaWNhbCBiYXNlICJwb2NrZXQiCisgICAgcm9vdC5hZGRMaW5lVG8odG9wTGVm
dCk7CisgICAgLy8gZHJhdyB0byBlbmQKKyAgICByb290LmFkZExpbmVUbyhsZWZ0RW5kKTsKKyAg
ICAKKyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgocm9vdCk7CisgICAgCisgICAgaW5mby5j
b250ZXh0LT5zYXZlKCk7CisgICAgCisgICAgLy8gQnVpbGQgYSBtYXNrIHRvIGRyYXcgdGhlIHRo
aWNrIHBhcnQgb2YgdGhlIHJvb3QuCisgICAgUGF0aCBtYXNrOworICAgIAorICAgIG1hc2subW92
ZVRvKHRvcFN0YXJ0KTsKKyAgICBtYXNrLmFkZExpbmVUbyhib3R0b21MZWZ0KTsKKyAgICBtYXNr
LmFkZExpbmVUbyh0b3BMZWZ0KTsKKyAgICBtYXNrLmFkZExpbmVUbyhGbG9hdFBvaW50KDIgKiB0
b3BMZWZ0LngoKSAtIGxlZnRFbmQueCgpLCAyICogdG9wTGVmdC55KCkgLSBsZWZ0RW5kLnkoKSkp
OworICAgIAorICAgIGluZm8uY29udGV4dC0+Y2xpcChtYXNrKTsKKyAgICAKKyAgICAvLyBEcmF3
IHRoZSB0aGljayBwYXJ0IG9mIHRoZSByb290LgorICAgIGluZm8uY29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKGdSYWRpY2FsVGhpY2tMaW5lVGhpY2tuZXNzICogc3R5bGUoKS0+Zm9udFNpemUo
KSk7CisgICAgaW5mby5jb250ZXh0LT5zZXRMaW5lQ2FwKFNxdWFyZUNhcCk7CisgICAgCisgICAg
UGF0aCBsaW5lOworICAgIGxpbmUubW92ZVRvKGJvdHRvbUxlZnQpOworICAgIGxpbmUuYWRkTGlu
ZVRvKHRvcExlZnQpOworCisgICAgaW5mby5jb250ZXh0LT5zdHJva2VQYXRoKGxpbmUpOworICAg
IAorICAgIGluZm8uY29udGV4dC0+cmVzdG9yZSgpOworICAgIAorICAgIGluZm8uY29udGV4dC0+
cmVzdG9yZSgpOworCit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MUm9vdDo6bGF5b3V0KCkKK3sKKyAg
ICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CisKKyAgICBpZiAoIWZpcnN0Q2hpbGQoKSB8fCAhbGFz
dENoaWxkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBtYXhIZWlnaHQgPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KGxhc3RDaGlsZCgpKS0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgCisgICAg
UmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gbGFzdENoaWxkKCktPmZpcnN0Q2hpbGQoKTsKKyAgICBp
ZiAoY3VycmVudCkKKyAgICAgICAgY3VycmVudC0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihC
QVNFTElORSk7CisgICAgCisgICAgaWYgKCFtYXhIZWlnaHQpCisgICAgICAgIG1heEhlaWdodCA9
IHN0eWxlKCktPmZvbnRTaXplKCk7CisgICAgCisgICAgLy8gQmFzZSBoZWlnaHQgYWJvdmUgd2hp
Y2ggdGhlIHNoYXBlIG9mIHRoZSByb290IGNoYW5nZXMKKyAgICBpbnQgdGhyZXNob2xkSGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihnVGhyZXNob2xkQmFzZUhlaWdodCAqIHN0eWxlKCktPmZvbnRT
aXplKCkpOworICAgIGludCB0b3BTdGFydFNoaWZ0ID0gMDsKKyAgICAKKyAgICBpZiAobWF4SGVp
Z2h0ID4gdGhyZXNob2xkSGVpZ2h0ICYmIHRocmVzaG9sZEhlaWdodCkgeworICAgICAgICBmbG9h
dCBzaGlmdCA9IChtYXhIZWlnaHQgLSB0aHJlc2hvbGRIZWlnaHQpIC8gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRocmVzaG9sZEhlaWdodCk7CisgICAgICAgIGlmIChzaGlmdCA+IDEuKQorICAgICAgICAg
ICAgc2hpZnQgPSAxLjBmOworICAgICAgICBpbnQgZnJvbnRXaWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4oc3R5bGUoKS0+Zm9udFNpemUoKSAqIGdSYWRpY2FsV2lkdGgpOworICAgICAgICB0b3BTdGFy
dFNoaWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250
V2lkdGggKiBzaGlmdCk7CisgICAgICAgIAorICAgICAgICBzdHlsZSgpLT5zZXRQYWRkaW5nQm90
dG9tKExlbmd0aChzdGF0aWNfY2FzdDxpbnQ+KGdSb290Qm90dG9tUGFkZGluZyAqIHN0eWxlKCkt
PmZvbnRTaXplKCkpLCBGaXhlZCkpOworICAgIH0KKyAgICAKKyAgICAvLyBQb3NpdGlvbmluZyBv
ZiB0aGUgaW5kZXgKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogaW5kZXhCb3ggPSB0b1JlbmRl
ckJveE1vZGVsT2JqZWN0KGZpcnN0Q2hpbGQoKS0+Zmlyc3RDaGlsZCgpKTsKKyAgICBpZiAoIWlu
ZGV4Qm94KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IGluZGV4U2hpZnQgPSBpbmRl
eEJveC0+b2Zmc2V0V2lkdGgoKSArIHRvcFN0YXJ0U2hpZnQ7CisgICAgaW50IHJhZGljYWxIZWln
aHQgPSBzdGF0aWNfY2FzdDxpbnQ+KCgxIC0gZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zKSAqIG1h
eEhlaWdodCk7CisgICAgaW50IHJvb3RNYXJnaW5Ub3AgPSByYWRpY2FsSGVpZ2h0ICsgc3R5bGUo
KS0+cGFkZGluZ0JvdHRvbSgpLnZhbHVlKCkgKyBpbmRleEJveC0+b2Zmc2V0SGVpZ2h0KCkgLSAo
bWF4SGVpZ2h0ICsgc3RhdGljX2Nhc3Q8aW50PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250
U2l6ZSgpKSk7CisgICAgCisgICAgc3R5bGUoKS0+c2V0UGFkZGluZ0xlZnQoTGVuZ3RoKGluZGV4
U2hpZnQsIEZpeGVkKSk7CisgICAgaWYgKHJvb3RNYXJnaW5Ub3AgPiAwKQorICAgICAgICBzdHls
ZSgpLT5zZXRQYWRkaW5nVG9wKExlbmd0aChyb290TWFyZ2luVG9wICsgc3RhdGljX2Nhc3Q8aW50
PihnUm9vdFBhZGRpbmcgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsKKyAgICAKKyAg
ICBzZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGly
dHkodHJ1ZSwgZmFsc2UpOworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKworICAgIGluZGV4
Qm94LT5zdHlsZSgpLT5zZXRCb3R0b20oTGVuZ3RoKHJhZGljYWxIZWlnaHQgKyBzdHlsZSgpLT5w
YWRkaW5nQm90dG9tKCkudmFsdWUoKSwgRml4ZWQpKTsKKworICAgIC8vIE5vdyB0aGF0IHdlJ3Zl
IHBvdGVudGlhbGx5IGNoYW5nZWQgaXRzIHBvc2l0aW9uLCB3ZSBuZWVkIGxheW91dCB0aGUgaW5k
ZXggYWdhaW4uCisgICAgaW5kZXhCb3gtPnNldE5lZWRzTGF5b3V0KHRydWUpOworICAgIGluZGV4
Qm94LT5sYXlvdXQoKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisK
KwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxSb290
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJN
YXRoTUxSb290LmgJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwv
UmVuZGVyTWF0aE1MUm9vdC5oOjc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBbGV4IE1pbG93c2tpIChhbGV4QG1pbG93c2tpLmNv
bSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFJl
bmRlck1hdGhNTFJvb3RfaAorI2RlZmluZSBSZW5kZXJNYXRoTUxSb290X2gKKworI2lmIEVOQUJM
RShNQVRITUwpCisKKyNpbmNsdWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisgICAgCitjbGFzcyBSZW5kZXJNYXRoTUxSb290IDogcHVibGljIFJlbmRlck1h
dGhNTEJsb2NrIHsKK3B1YmxpYzoKKyAgICBSZW5kZXJNYXRoTUxSb290KE5vZGUqIGZyYWN0aW9u
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludElu
Zm8mLCBpbnQgdHgsIGludCB0eSk7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOworfTsKKyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisKKyNlbmRpZiAv
LyBSZW5kZXJNYXRoTUxSb290X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MUm93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJvdy5jcHAJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBT
b3VyY2UvV2ViQ29yZS9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcDo3NTM1MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MUm93LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4IE1p
bG93c2tpIChhbGV4QG1pbG93c2tpLmNvbSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQor
CisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MUm93LmgiCisKKyNpbmNsdWRlICJNYXRoTUxOYW1lcy5o
IgorI2luY2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIE1hdGhNTE5hbWVzOworCitSZW5kZXJNYXRoTUxSb3c6OlJl
bmRlck1hdGhNTFJvdyhOb2RlKiByb3cpCisgICAgOiBSZW5kZXJNYXRoTUxCbG9jayhyb3cpCit7
Cit9CisKK2ludCBSZW5kZXJNYXRoTUxSb3c6Om5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3QKK3sK
KyAgICBpbnQgbWF4SGVpZ2h0ID0gMDsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9
IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzUmVuZGVyTWF0aE1MQmxvY2soKSkgeworICAgICAg
ICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIGJsb2NrID0gdG9SZW5kZXJNYXRoTUxCbG9jayhjdXJy
ZW50KTsKKyAgICAgICAgICAgIGludCBibG9ja0hlaWdodCA9IGJsb2NrLT5ub25PcGVyYXRvckhl
aWdodCgpOworICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgYm94IGhhcyBhIGxh
cmdlciBoZWlnaHQKKyAgICAgICAgICAgIGlmIChibG9ja0hlaWdodCA+IG1heEhlaWdodCkKKyAg
ICAgICAgICAgICAgICBtYXhIZWlnaHQgPSBibG9ja0hlaWdodDsKKyAgICAgICAgfSBlbHNlIGlm
IChjdXJyZW50LT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGN1cnJlbnQpOworICAgICAg
ICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgYm94IGhhcyBhIGxhcmdlciBoZWlnaHQKKyAg
ICAgICAgICAgIGlmIChib3gtPm9mZnNldEhlaWdodCgpID4gbWF4SGVpZ2h0KQorICAgICAgICAg
ICAgICAgIG1heEhlaWdodCA9IGJveC0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgfQorICAgIHJldHVybiBtYXhIZWlnaHQ7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1M
Um93OjpsYXlvdXQoKSAKK3sKKyAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CisgICAgCisgICAg
aW50IG1heEhlaWdodCA9IDA7CisgICAgaW50IGNoaWxkQ291bnQgPSAwOworICAgIGludCBvcGVy
YXRvckNvdW50ID0gMDsKKworICAgIC8vIENhbGN1bGF0ZSB0aGUgbm9uLW9wZXJhdG9yIG1heCBo
ZWlnaHQgb2YgdGhlIHJvdy4KKyAgICBpbnQgb3BlcmF0b3JIZWlnaHQgPSAwOworICAgIGZvciAo
UmVuZGVyT2JqZWN0KiBjdXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBjaGlsZENvdW50Kys7CisgICAgICAg
IGlmIChjdXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKKyAgICAgICAgICAgIFJlbmRl
ck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1MQmxvY2soY3VycmVudCk7CisgICAg
ICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhlIG5vbi1vcGVyYXRvciBibG9jayBoYXMgYSBn
cmVhdGVyIGhlaWdodC4KKyAgICAgICAgICAgIGlmICghYmxvY2stPmhhc0Jhc2UoKSAmJiAhYmxv
Y2stPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSAmJiBibG9jay0+b2Zmc2V0SGVpZ2h0KCkgPiBt
YXhIZWlnaHQpCisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYmxvY2stPm9mZnNldEhlaWdo
dCgpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5oYXNCYXNlKCkgJiYgYmxvY2stPm5vbk9wZXJh
dG9ySGVpZ2h0KCkgPiBtYXhIZWlnaHQpIAorICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGJs
b2NrLT5ub25PcGVyYXRvckhlaWdodCgpOworICAgICAgICAgICAgLy8gSWYgdGhlIGJsb2NrIGlz
IGFuIG9wZXJhdG9yLCBjYXB0dXJlIHRoZSBtYXhpbXVtIGhlaWdodCBhbmQgaW5jcmVtZW50IHRo
ZSBjb3VudC4KKyAgICAgICAgICAgIGlmIChibG9jay0+aXNSZW5kZXJNYXRoTUxPcGVyYXRvcigp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5vZmZzZXRIZWlnaHQoKSA+IG9wZXJhdG9y
SGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckhlaWdodCA9IGJsb2NrLT5vZmZz
ZXRIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRvckNvdW50Kys7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7Cisg
ICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogYm94ID0gdG9SZW5kZXJCb3hNb2RlbE9i
amVjdChjdXJyZW50KTsKKyAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGJveCBo
YXMgYSBsYXJnZXIgaGVpZ2h0LgorICAgICAgICAgICAgaWYgKGJveC0+b2Zmc2V0SGVpZ2h0KCkg
PiBtYXhIZWlnaHQpCisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5vZmZzZXRIZWln
aHQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoY2hpbGRDb3VudCA+IDAgJiYg
Y2hpbGRDb3VudCA9PSBvcGVyYXRvckNvdW50KSB7CisgICAgICAgIC8vIFdlIGhhdmUgb25seSBv
cGVyYXRvcnMgYW5kIHNvIHNldCB0aGUgbWF4IGhlaWdodCB0byB0aGUgb3BlcmF0b3IgaGVpZ2h0
LgorICAgICAgICBtYXhIZWlnaHQgPSBvcGVyYXRvckhlaWdodDsKKyAgICB9CisgICAgCisgICAg
Ly8gU3RyZXRjaCBldmVyeXRoaW5nIHRvIHRoZSBzYW1lIGhlaWdodCAoYmxvY2tzIGNhbiBpZ25v
cmUgdGhlIHJlcXVlc3QpLgorICAgIGlmIChtYXhIZWlnaHQgPiAwKSB7CisgICAgICAgIGJvb2wg
ZGlkU3RyZXRjaCA9IGZhbHNlOworICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9
IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkp
IHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5pc1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKKyAg
ICAgICAgICAgICAgICBSZW5kZXJNYXRoTUxCbG9jayogYmxvY2sgPSB0b1JlbmRlck1hdGhNTEJs
b2NrKGN1cnJlbnQpOworICAgICAgICAgICAgICAgIGJsb2NrLT5zdHJldGNoVG9IZWlnaHQobWF4
SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBkaWRTdHJldGNoID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZGlkU3RyZXRjaCkgeworICAgICAgICAgICAgc2V0
TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
RGlydHkodHJ1ZSwgZmFsc2UpOworICAgICAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorfSAgICAKKworaW50IFJlbmRlck1hdGhNTFJvdzo6YmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QK
K3sKKyAgICBpZiAoZmlyc3RDaGlsZCgpICYmIGZpcnN0Q2hpbGQoKS0+aXNSZW5kZXJNYXRoTUxC
bG9jaygpKSB7CisgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0
aE1MQmxvY2soZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgaWYgKGJsb2NrLT5pc1JlbmRlck1hdGhN
TE9wZXJhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gYmxvY2stPnkoKSArIGJsb2NrLT5iYXNl
bGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxp
bmVQb3NpdGlvbk1vZGUpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmJh
c2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBmaXJzdExpbmUsIGRpcmVjdGlvbiwg
bGluZVBvc2l0aW9uTW9kZSk7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1M
KQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFJv
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MUm93LmgJKHJldmlzaW9uIDc1MzUwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9tYXRobWwv
UmVuZGVyTWF0aE1MUm93Lmg6NzUzNTApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTFJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20p
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZW5k
ZXJNYXRoTUxSb3dfaAorI2RlZmluZSBSZW5kZXJNYXRoTUxSb3dfaAorCisjaWYgRU5BQkxFKE1B
VEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKK2NsYXNzIFJlbmRlck1hdGhNTFJvdyA6IHB1YmxpYyBSZW5kZXJNYXRoTUxC
bG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyTWF0aE1MUm93KE5vZGUqIGNvbnRhaW5lcik7Cisg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyTWF0aE1MUm93KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGlu
ZSkgY29uc3Q7ICAgIAorICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50KSB7fQor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisgICAgCit9CisKKwor
I2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisjZW5kaWYgLy8gUmVuZGVyTWF0aE1MUm93X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9v
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTcXVhcmVSb290LmNwcAkocmV2aXNpb24gNzUzNTApCShmcm9tIFNvdXJjZS9XZWJD
b3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290LmNwcDo3NTM1MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU3F1YXJlUm9vdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWxl
eCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEZyYW7Dp29pcyBTYXVzc2V0IChzYXVzc2V0QGdtYWlsLmNvbSku
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorCisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MU3F1
YXJlUm9vdC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiTWF0
aE1MTmFtZXMuaCIKKyNpbmNsdWRlICJQYXRoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKK3VzaW5nIG5hbWVzcGFjZSBNYXRoTUxOYW1lczsKKworLy8gQm90dG9tIHBhZGRpbmcgb2Yg
dGhlIHJhZGljYWwgKHB4KQorY29uc3QgaW50IGdSYWRpY2FsQmFzZVBhZCA9IDM7CisvLyBUaHJl
c2hvbGQgYWJvdmUgd2hpY2ggdGhlIHJhZGljYWwgc2hhcGUgaXMgbW9kaWZpZWQgdG8gbG9vayBu
aWNlIHdpdGggYmlnIGJhc2VzICglKQorY29uc3QgZmxvYXQgZ1RocmVzaG9sZEJhc2VIZWlnaHQg
PSAxLjVmOworLy8gUmFkaWNhbCB3aWR0aCAoJSkKK2NvbnN0IGZsb2F0IGdSYWRpY2FsV2lkdGgg
PSAwLjc1ZjsKKy8vIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGJvdHRvbSBwb2ludCBvZiB0
aGUgcmFkaWNhbCAoJSkKK2NvbnN0IGZsb2F0IGdSYWRpY2FsQm90dG9tUG9pbnRYUG9zPSAwLjVm
OworLy8gSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiB0aGUgdG9wIGxlZnQgcG9pbnQgb2YgdGhlIHJh
ZGljYWwgKCUpCitjb25zdCBmbG9hdCBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3MgPSAwLjJmOwor
Ly8gVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHRvcCBsZWZ0IHBvaW50IG9mIHRoZSByYWRpY2Fs
ICglKQorY29uc3QgZmxvYXQgZ1JhZGljYWxUb3BMZWZ0UG9pbnRZUG9zID0gMC41ZjsgCisvLyBW
ZXJ0aWNhbCBzaGlmdCBvZiB0aGUgbGVmdCBlbmQgcG9pbnQgb2YgdGhlIHJhZGljYWwgKCUpCitj
b25zdCBmbG9hdCBnUmFkaWNhbExlZnRFbmRZU2hpZnQgPSAwLjA1ZjsKKy8vIEFkZGl0aW9uYWwg
Ym90dG9tIHJvb3QgcGFkZGluZyAoJSkKK2NvbnN0IGZsb2F0IGdSb290Qm90dG9tUGFkZGluZyA9
IDAuMmY7CisKKy8vIFJhZGljYWwgbGluZSB0aGlja25lc3MgKCUpCitjb25zdCBmbG9hdCBnUmFk
aWNhbExpbmVUaGlja25lc3MgPSAwLjAyZjsKKy8vIFJhZGljYWwgdGhpY2sgbGluZSB0aGlja25l
c3MgKCUpCitjb25zdCBmbG9hdCBnUmFkaWNhbFRoaWNrTGluZVRoaWNrbmVzcyA9IDAuMWY7Cisg
ICAgCitSZW5kZXJNYXRoTUxTcXVhcmVSb290OjpSZW5kZXJNYXRoTUxTcXVhcmVSb290KE5vZGUg
KmV4cHJlc3Npb24pIAorICAgIDogUmVuZGVyTWF0aE1MQmxvY2soZXhwcmVzc2lvbikgCit7Cit9
CisKK3ZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6cGFpbnQoUGFpbnRJbmZvJiBpbmZvLCBp
bnQgdHgsIGludCB0eSkKK3sKKyAgICBSZW5kZXJNYXRoTUxCbG9jazo6cGFpbnQoaW5mbywgdHgs
IHR5KTsKKyAgIAorICAgIGlmIChpbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIHR4ICs9IHgoKTsKKyAgICB0eSArPSB5KCk7CisKKyAg
ICBpbnQgbWF4SGVpZ2h0ID0gMDsKKyAgICBpbnQgd2lkdGggPSAwOworICAgIFJlbmRlck9iamVj
dCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoY3VycmVudCkgeworICAgICAg
ICBpZiAoY3VycmVudC0+aXNCb3hNb2RlbE9iamVjdCgpKSB7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0
KGN1cnJlbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYg
dGhpcyBib3ggaGFzIGEgbGFyZ2VyIGhlaWdodAorICAgICAgICAgICAgaWYgKGJveC0+b2Zmc2V0
SGVpZ2h0KCkgPiBtYXhIZWlnaHQpCisgICAgICAgICAgICAgICAgbWF4SGVpZ2h0ID0gYm94LT5v
ZmZzZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIHdpZHRoICs9IGJveC0+b2Zmc2V0V2lkdGgoKTsK
KyAgICAgICAgfQorICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAg
ICB9CisgICAgLy8gZGVmYXVsdCB0byB0aGUgZm9udCBzaXplIGluIHBpeGVscyBpZiB3ZSdyZSBl
bXB0eQorICAgIGlmICghbWF4SGVpZ2h0KQorICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgpLT5m
b250U2l6ZSgpOworICAgIAorICAgIGludCBmcm9udFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50Pihz
dHlsZSgpLT5mb250U2l6ZSgpICogZ1JhZGljYWxXaWR0aCk7CisgICAgaW50IHRvcFN0YXJ0U2hp
ZnQgPSAwOworICAgIC8vIEJhc2UgaGVpZ2h0IGFib3ZlIHdoaWNoIHRoZSBzaGFwZSBvZiB0aGUg
cm9vdCBjaGFuZ2VzCisgICAgaW50IHRocmVzaG9sZEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4o
Z1RocmVzaG9sZEJhc2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAobWF4SGVpZ2h0ID4gdGhyZXNob2xkSGVpZ2h0ICYmIHRocmVzaG9sZEhlaWdodCkgeworICAg
ICAgICBmbG9hdCBzaGlmdCA9IChtYXhIZWlnaHQgLSB0aHJlc2hvbGRIZWlnaHQpIC8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHRocmVzaG9sZEhlaWdodCk7CisgICAgICAgIGlmIChzaGlmdCA+IDEuKQor
ICAgICAgICAgICAgc2hpZnQgPSAxLjBmOworICAgICAgICB0b3BTdGFydFNoaWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihnUmFkaWNhbEJvdHRvbVBvaW50WFBvcyAqIGZyb250V2lkdGggKiBzaGlmdCk7
CisgICAgfQorICAgIAorICAgIHdpZHRoICs9IHRvcFN0YXJ0U2hpZnQ7CisgICAgCisgICAgRmxv
YXRQb2ludCB0b3BTdGFydCh0eCArIGZyb250V2lkdGggLSB0b3BTdGFydFNoaWZ0LCB0eSk7Cisg
ICAgRmxvYXRQb2ludCBib3R0b21MZWZ0KHR4ICsgZnJvbnRXaWR0aCAqIGdSYWRpY2FsQm90dG9t
UG9pbnRYUG9zICwgdHkgKyBtYXhIZWlnaHQgKyBnUmFkaWNhbEJhc2VQYWQpOworICAgIEZsb2F0
UG9pbnQgdG9wTGVmdCh0eCArIGZyb250V2lkdGggKiBnUmFkaWNhbFRvcExlZnRQb2ludFhQb3Mg
LCB0eSArIGdSYWRpY2FsVG9wTGVmdFBvaW50WVBvcyAqIG1heEhlaWdodCk7CisgICAgRmxvYXRQ
b2ludCBsZWZ0RW5kKHR4ICwgdG9wTGVmdC55KCkgKyBnUmFkaWNhbExlZnRFbmRZU2hpZnQgKiBz
dHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICAKKyAgICBpbmZvLmNvbnRleHQtPnNhdmUoKTsKKyAg
ICAKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhnUmFkaWNhbExpbmVUaGlj
a25lc3MgKiBzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9r
ZVN0eWxlKFNvbGlkU3Ryb2tlKTsKKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZUNvbG9yKHN0
eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKSwgQ29sb3JTcGFj
ZURldmljZVJHQik7CisgICAgaW5mby5jb250ZXh0LT5zZXRMaW5lSm9pbihNaXRlckpvaW4pOwor
ICAgIGluZm8uY29udGV4dC0+c2V0TWl0ZXJMaW1pdChzdHlsZSgpLT5mb250U2l6ZSgpKTsKKyAg
ICAKKyAgICBQYXRoIHJvb3Q7CisgICAgCisgICAgcm9vdC5tb3ZlVG8oRmxvYXRQb2ludCh0b3BT
dGFydC54KCkgKyB3aWR0aCAsIHR5KSk7CisgICAgLy8gZHJhdyB0b3AKKyAgICByb290LmFkZExp
bmVUbyh0b3BTdGFydCk7CisgICAgLy8gZHJhdyBmcm9tIHRvcCBsZWZ0IGNvcm5lciB0byBib3R0
b20gcG9pbnQgb2YgcmFkaWNhbAorICAgIHJvb3QuYWRkTGluZVRvKGJvdHRvbUxlZnQpOworICAg
IC8vIGRyYXcgZnJvbSBib3R0b20gcG9pbnQgdG8gdG9wIG9mIGxlZnQgcGFydCBvZiByYWRpY2Fs
IGJhc2UgInBvY2tldCIKKyAgICByb290LmFkZExpbmVUbyh0b3BMZWZ0KTsKKyAgICAvLyBkcmF3
IHRvIGVuZAorICAgIHJvb3QuYWRkTGluZVRvKGxlZnRFbmQpOworCisgICAgaW5mby5jb250ZXh0
LT5zdHJva2VQYXRoKHJvb3QpOworICAgIAorICAgIGluZm8uY29udGV4dC0+c2F2ZSgpOworICAg
IAorICAgIC8vIEJ1aWxkIGEgbWFzayB0byBkcmF3IHRoZSB0aGljayBwYXJ0IG9mIHRoZSByb290
LgorICAgIFBhdGggbWFzazsKKyAgICAKKyAgICBtYXNrLm1vdmVUbyh0b3BTdGFydCk7CisgICAg
bWFzay5hZGRMaW5lVG8oYm90dG9tTGVmdCk7CisgICAgbWFzay5hZGRMaW5lVG8odG9wTGVmdCk7
CisgICAgbWFzay5hZGRMaW5lVG8oRmxvYXRQb2ludCgyICogdG9wTGVmdC54KCkgLSBsZWZ0RW5k
LngoKSwgMiAqIHRvcExlZnQueSgpIC0gbGVmdEVuZC55KCkpKTsKKyAgICAKKyAgICBpbmZvLmNv
bnRleHQtPmNsaXAobWFzayk7CisgICAgCisgICAgLy8gRHJhdyB0aGUgdGhpY2sgcGFydCBvZiB0
aGUgcm9vdC4KKyAgICBpbmZvLmNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhnUmFkaWNhbFRo
aWNrTGluZVRoaWNrbmVzcyAqIHN0eWxlKCktPmZvbnRTaXplKCkpOworICAgIGluZm8uY29udGV4
dC0+c2V0TGluZUNhcChTcXVhcmVDYXApOworICAgIAorICAgIFBhdGggbGluZTsKKyAgICBsaW5l
Lm1vdmVUbyhib3R0b21MZWZ0KTsKKyAgICBsaW5lLmFkZExpbmVUbyh0b3BMZWZ0KTsKKyAgICAK
KyAgICBpbmZvLmNvbnRleHQtPnN0cm9rZVBhdGgobGluZSk7CisgICAgCisgICAgaW5mby5jb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgCisgICAgaW5mby5jb250ZXh0LT5yZXN0b3JlKCk7Cit9CisK
K3ZvaWQgUmVuZGVyTWF0aE1MU3F1YXJlUm9vdDo6bGF5b3V0KCkKK3sKKyAgICBpbnQgbWF4SGVp
Z2h0ID0gMDsKKyAgICAKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7
CisgICAgd2hpbGUgKGN1cnJlbnQpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQtPmlzQm94TW9kZWxP
YmplY3QoKSkgeworICAgICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIGJveCA9IHRvUmVu
ZGVyQm94TW9kZWxPYmplY3QoY3VycmVudCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChib3gtPm9mZnNldEhlaWdodCgpID4gbWF4SGVpZ2h0KQorICAgICAgICAgICAgICAgIG1heEhl
aWdodCA9IGJveC0+b2Zmc2V0SGVpZ2h0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJv
eC0+c3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihCQVNFTElORSk7CisgICAgICAgIH0KKyAgICAg
ICAgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7CisgICAgfQorICAgIAorICAgIGlm
ICghbWF4SGVpZ2h0KQorICAgICAgICBtYXhIZWlnaHQgPSBzdHlsZSgpLT5mb250U2l6ZSgpOwor
CisgICAgCisgICAgaWYgKG1heEhlaWdodCA+IHN0YXRpY19jYXN0PGludD4oZ1RocmVzaG9sZEJh
c2VIZWlnaHQgKiBzdHlsZSgpLT5mb250U2l6ZSgpKSkKKyAgICAgICAgc3R5bGUoKS0+c2V0UGFk
ZGluZ0JvdHRvbShMZW5ndGgoc3RhdGljX2Nhc3Q8aW50PihnUm9vdEJvdHRvbVBhZGRpbmcgKiBz
dHlsZSgpLT5mb250U2l6ZSgpKSwgRml4ZWQpKTsKKworICAgIAorICAgIFJlbmRlckJsb2NrOjps
YXlvdXQoKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisKKyAgICAg
ICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNx
dWFyZVJvb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaAkocmV2aXNpb24gNzUzNTApCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL21hdGhtbC9SZW5kZXJNYXRoTUxTcXVhcmVSb290Lmg6NzUzNTApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNxdWFyZVJvb3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFsZXgg
TWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisgCisjaWZuZGVmIFJlbmRlck1hdGhNTFNxdWFyZVJvb3RfaAorI2RlZmlu
ZSBSZW5kZXJNYXRoTUxTcXVhcmVSb290X2gKKworI2lmIEVOQUJMRShNQVRITUwpCisKKyNpbmNs
dWRlICJSZW5kZXJNYXRoTUxCbG9jay5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCitj
bGFzcyBSZW5kZXJNYXRoTUxTcXVhcmVSb290IDogcHVibGljIFJlbmRlck1hdGhNTEJsb2NrIHsK
K3B1YmxpYzoKKyAgICBSZW5kZXJNYXRoTUxTcXVhcmVSb290KE5vZGUqIGZyYWN0aW9uKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKK307CisgICAgCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoTUFUSE1MKQorCisjZW5kaWYgLy8gUmVuZGVyTWF0aE1MU3F1YXJlUm9vdF9oCisK
KworCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1
YlN1cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTdWJTdXAuY3BwCShyZXZpc2lvbiA3NTM1MCkJKGZyb20gU291cmNlL1dlYkNv
cmUvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHA6NzUzNTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1YlN1cC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleCBNaWxvd3Nr
aSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKE1BVEhNTCkKKworI2lu
Y2x1ZGUgIlJlbmRlck1hdGhNTFN1YlN1cC5oIgorCisjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgi
CisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKKyNp
bmNsdWRlICJSZW5kZXJUYWJsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRhYmxlUm93LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgi
CisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit1
c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CisKK3N0YXRpYyBjb25zdCBpbnQgZ1RvcEFkanVz
dERpdmlzb3IgPSAzOworc3RhdGljIGNvbnN0IGludCBnU3Vic3VwU2NyaXB0TWFyZ2luID0gMTsK
K3N0YXRpYyBjb25zdCBmbG9hdCBnU3ViU3VwU3RyZXRjaCA9IDEuMmY7CisKK1JlbmRlck1hdGhN
TFN1YlN1cDo6UmVuZGVyTWF0aE1MU3ViU3VwKEVsZW1lbnQqIGVsZW1lbnQpIAorICAgIDogUmVu
ZGVyTWF0aE1MQmxvY2soZWxlbWVudCkKKyAgICAsIG1fc2NyaXB0cygwKQoreworICAgIC8vIERl
dGVybWluZSB3aGF0IGtpbmQgb2YgdW5kZXIvb3ZlciBleHByZXNzaW9uIHdlIGhhdmUgYnkgZWxl
bWVudCBuYW1lCisgICAgaWYgKGVsZW1lbnQtPmhhc0xvY2FsTmFtZShNYXRoTUxOYW1lczo6bXN1
YlRhZykpCisgICAgICAgIG1fa2luZCA9IFN1YjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNM
b2NhbE5hbWUoTWF0aE1MTmFtZXM6Om1zdXBUYWcpKQorICAgICAgICBtX2tpbmQgPSBTdXA7Cisg
ICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzTG9jYWxOYW1lKE1hdGhNTE5hbWVzOjptc3Vic3VwVGFn
KSkKKyAgICAgICAgbV9raW5kID0gU3ViU3VwOworICAgIGVsc2UgCisgICAgICAgIG1fa2luZCA9
IFN1YlN1cDsKK30KKwordm9pZCBSZW5kZXJNYXRoTUxTdWJTdXA6OmFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit7CisgICAgaWYgKGZpcnN0
Q2hpbGQoKSkgeworICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYSBiYXNlLCBzbyB0aGlzIGlz
IHRoZSBzdXBlci9zdWJzY3JpcHRzIGJlaW5nIGFkZGVkLgorICAgICAgICAKKyAgICAgICAgaWYg
KG1fa2luZCA9PSBTdWJTdXApIHsKKyAgICAgICAgICAgIGlmICghbV9zY3JpcHRzKSB7CisgICAg
ICAgICAgICAgICAgbV9zY3JpcHRzID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJNYXRoTUxC
bG9jayhub2RlKCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc2NyaXB0
c1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHNjcmlwdHNT
dHlsZS0+aW5oZXJpdEZyb20oc3R5bGUoKSk7CisgICAgICAgICAgICAgICAgc2NyaXB0c1N0eWxl
LT5zZXREaXNwbGF5KElOTElORV9CTE9DSyk7CisgICAgICAgICAgICAgICAgc2NyaXB0c1N0eWxl
LT5zZXRWZXJ0aWNhbEFsaWduKFRPUCk7CisgICAgICAgICAgICAgICAgc2NyaXB0c1N0eWxlLT5z
ZXRNYXJnaW5MZWZ0KExlbmd0aChnU3Vic3VwU2NyaXB0TWFyZ2luLCBGaXhlZCkpOworICAgICAg
ICAgICAgICAgIHNjcmlwdHNTdHlsZS0+c2V0VGV4dEFsaWduKExFRlQpOworICAgICAgICAgICAg
ICAgIG1fc2NyaXB0cy0+c2V0U3R5bGUoc2NyaXB0c1N0eWxlLnJlbGVhc2UoKSk7CisgICAgICAg
ICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmFkZENoaWxkKG1fc2NyaXB0cywgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBSZW5kZXJCbG9j
ayogc2NyaXB0ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5kZXJNYXRoTUxCbG9jayhub2RlKCkp
OworICAgICAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBzY3JpcHRTdHlsZSA9IFJlbmRlclN0
eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHNjcmlwdFN0eWxlLT5pbmhlcml0RnJvbShtX3Nj
cmlwdHMtPnN0eWxlKCkpOworICAgICAgICAgICAgc2NyaXB0U3R5bGUtPnNldERpc3BsYXkoQkxP
Q0spOworICAgICAgICAgICAgc2NyaXB0LT5zZXRTdHlsZShzY3JpcHRTdHlsZS5yZWxlYXNlKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3NjcmlwdHMtPmFkZENoaWxkKHNjcmlwdCwg
bV9zY3JpcHRzLT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgc2NyaXB0LT5hZGRDaGlsZChj
aGlsZCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2s6OmFk
ZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIAorICAgIH0gZWxzZSB7CisgICAg
ICAgIFJlbmRlck1hdGhNTEJsb2NrKiB3cmFwcGVyID0gbmV3IChyZW5kZXJBcmVuYSgpKSBSZW5k
ZXJNYXRoTUxCbG9jayhub2RlKCkpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHdyYXBw
ZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKKyAgICAgICAgd3JhcHBlclN0eWxlLT5p
bmhlcml0RnJvbShzdHlsZSgpKTsKKyAgICAgICAgd3JhcHBlclN0eWxlLT5zZXREaXNwbGF5KElO
TElORV9CTE9DSyk7CisgICAgICAgIHdyYXBwZXJTdHlsZS0+c2V0VmVydGljYWxBbGlnbihCQVNF
TElORSk7CisgICAgICAgIHdyYXBwZXItPnNldFN0eWxlKHdyYXBwZXJTdHlsZS5yZWxlYXNlKCkp
OworICAgICAgICBSZW5kZXJNYXRoTUxCbG9jazo6YWRkQ2hpbGQod3JhcHBlciwgYmVmb3JlQ2hp
bGQpOworICAgICAgICB3cmFwcGVyLT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgIAorICAgIH0K
K30KKwordm9pZCBSZW5kZXJNYXRoTUxTdWJTdXA6OnN0cmV0Y2hUb0hlaWdodChpbnQgaGVpZ2h0
KQoreworICAgIFJlbmRlck9iamVjdCogYmFzZSA9IGZpcnN0Q2hpbGQoKTsKKyAgICBpZiAoIWJh
c2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoYmFzZS0+Zmlyc3RDaGlsZCgpLT5p
c1JlbmRlck1hdGhNTEJsb2NrKCkpIHsKKyAgICAgICAgUmVuZGVyTWF0aE1MQmxvY2sqIGJsb2Nr
ID0gdG9SZW5kZXJNYXRoTUxCbG9jayhiYXNlLT5maXJzdENoaWxkKCkpOworICAgICAgICBibG9j
ay0+c3RyZXRjaFRvSGVpZ2h0KHN0YXRpY19jYXN0PGludD4oZ1N1YlN1cFN0cmV0Y2ggKiBoZWln
aHQpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFkanVzdCB0aGUgc2NyaXB0IHBsYWNlbWVudCBh
ZnRlciB3ZSBzdHJldGNoCisgICAgICAgIGlmIChoZWlnaHQgPiAwICYmIG1fa2luZCA9PSBTdWJT
dXAgJiYgbV9zY3JpcHRzKSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHNjcmlwdCA9IG1f
c2NyaXB0cy0+Zmlyc3RDaGlsZCgpOworICAgICAgICAgICAgaWYgKHNjcmlwdCkgeworICAgICAg
ICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgc2NyaXB0IGhlaWdodCB3aXRob3V0IHRoZSBjb250
YWluZXIgbWFyZ2lucy4KKyAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHRvcCA9IHNjcmlw
dDsKKyAgICAgICAgICAgICAgICBpbnQgdG9wSGVpZ2h0ID0gZ2V0Qm94TW9kZWxPYmplY3RIZWln
aHQodG9wLT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgICAgIGludCB0b3BBZGp1c3QgPSB0
b3BIZWlnaHQgLyBnVG9wQWRqdXN0RGl2aXNvcjsKKyAgICAgICAgICAgICAgICB0b3AtPnN0eWxl
KCktPnNldE1hcmdpblRvcChMZW5ndGgoLXRvcEFkanVzdCwgRml4ZWQpKTsKKyAgICAgICAgICAg
ICAgICB0b3AtPnN0eWxlKCktPnNldE1hcmdpbkJvdHRvbShMZW5ndGgoaGVpZ2h0IC0gdG9wSGVp
Z2h0ICsgdG9wQWRqdXN0LCBGaXhlZCkpOworICAgICAgICAgICAgICAgIGlmICh0b3AtPmlzQm94
TW9kZWxPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVj
dCogdG9wQm94ID0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdCh0b3ApOworICAgICAgICAgICAgICAg
ICAgICB0b3BCb3gtPnVwZGF0ZUJveE1vZGVsSW5mb0Zyb21TdHlsZSgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX3NjcmlwdHMtPnNldE5lZWRzTGF5b3V0KHRydWUpOwor
ICAgICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgIH0KK30KKworaW50IFJlbmRlck1hdGhNTFN1YlN1cDo6bm9u
T3BlcmF0b3JIZWlnaHQoKSBjb25zdCAKK3sKKyAgICBpZiAobV9raW5kID09IFN1YlN1cCkgCisg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Zm9udFNpemUoKSpnU3ViU3Vw
U3RyZXRjaCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3R5bGUoKS0+Zm9udFNpemUo
KSk7Cit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MU3ViU3VwOjpsYXlvdXQoKSAKK3sKKyAgICBpZiAo
Zmlyc3RDaGlsZCgpKQorICAgICAgICBmaXJzdENoaWxkKCktPnNldE5lZWRzTGF5b3V0KHRydWUp
OworICAgIGlmIChtX3NjcmlwdHMpIAorICAgICAgICBtX3NjcmlwdHMtPnNldE5lZWRzTGF5b3V0
KHRydWUpOworICAgIAorICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKKyAgICAKKyAgICBpZiAo
bV9raW5kID09IFN1YlN1cCkgeworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiBiYXNlID0gZmly
c3RDaGlsZCgpKSB7CisgICAgICAgICAgICBpbnQgbWF4SGVpZ2h0ID0gMDsKKyAgICAgICAgICAg
IFJlbmRlck9iamVjdCogY3VycmVudCA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAg
IHdoaWxlIChjdXJyZW50KSB7CisgICAgICAgICAgICAgICAgaW50IGhlaWdodCA9IGdldEJveE1v
ZGVsT2JqZWN0SGVpZ2h0KGN1cnJlbnQpOworICAgICAgICAgICAgICAgIGlmIChoZWlnaHQgPiBt
YXhIZWlnaHQpCisgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodCA9IGhlaWdodDsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGludCBoZWlnaHREaWZmID0gbV9zY3JpcHRzID8gKG1fc2NyaXB0cy0+
b2Zmc2V0SGVpZ2h0KCkgLSBtYXhIZWlnaHQpIC8gMiA6IDA7CisgICAgICAgICAgICBpZiAoaGVp
Z2h0RGlmZiA8IDApIAorICAgICAgICAgICAgICAgIGhlaWdodERpZmYgPSAwOworICAgICAgICAg
ICAgYmFzZS0+c3R5bGUoKS0+c2V0UGFkZGluZ1RvcChMZW5ndGgoaGVpZ2h0RGlmZiwgRml4ZWQp
KTsKKyAgICAgICAgICAgIGJhc2UtPnNldE5lZWRzTGF5b3V0KHRydWUpOworICAgICAgICB9Cisg
ICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOworICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0
KCk7CisgICAgfSAgICAKK30KKworaW50IFJlbmRlck1hdGhNTFN1YlN1cDo6YmFzZWxpbmVQb3Np
dGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJl
Y3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKK3sKKyAgICBS
ZW5kZXJPYmplY3QqIGJhc2UgPSBmaXJzdENoaWxkKCk7CisgICAgaWYgKCFiYXNlKSAKKyAgICAg
ICAgcmV0dXJuIG9mZnNldEhlaWdodCgpOworICAgIAorICAgIGludCBiYXNlbGluZSA9IG9mZnNl
dEhlaWdodCgpOworICAgIGlmICghYmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKSAK
KyAgICAgICAgcmV0dXJuIGJhc2VsaW5lOworCisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIFN1YlN1cDoKKyAgICAgICAgYmFzZSA9IGJhc2UtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAg
aWYgKG1fc2NyaXB0cyAmJiBiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpIHsKKyAgICAgICAgICAg
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2Up
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgdG9wQWRqdXN0ID0gKG1fc2NyaXB0cy0+
b2Zmc2V0SGVpZ2h0KCkgLSBib3gtPm9mZnNldEhlaWdodCgpKSAvIDI7CisgICAgICAgIAorICAg
ICAgICAgICAgLy8gRklYTUU6IFRoZSBsYXN0IGJpdCBvZiB0aGlzIGNhbGN1bGF0aW9uIHNob3Vs
ZCBiZSBtb3JlIGV4YWN0LiAgV2h5IGlzIHRoZSAyLTNweCBzY2FsZWQgZm9yIHpvb20gbmVjZXNz
YXJ5PworICAgICAgICAgICAgLy8gVGhlIGJhc2VsaW5lIGlzIHRvcCBzcGFjaW5nIG9mIHRoZSBi
YXNlICsgdGhlIGJhc2VsaW5lIG9mIHRoZSBiYXNlICsgYWRqdXN0ZWQgc3BhY2UgZm9yIHpvb20K
KyAgICAgICAgICAgIGZsb2F0IHpvb21GYWN0b3IgPSBzdHlsZSgpLT5lZmZlY3RpdmVab29tKCk7
CisgICAgICAgICAgICByZXR1cm4gdG9wQWRqdXN0ICsgYm94LT5iYXNlbGluZVBvc2l0aW9uKEFs
cGhhYmV0aWNCYXNlbGluZSwgZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUp
ICsgc3RhdGljX2Nhc3Q8aW50Pigoem9vbUZhY3RvciA+IDEuMjUgPyAyIDogMykgKiB6b29tRmFj
dG9yKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFN1cDogCisgICAgY2Fz
ZSBTdWI6CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KGJhc2UpOworICAgICAgICBiYXNlbGluZSA9IGJveC0+YmFzZWxpbmVQb3NpdGlv
bihBbHBoYWJldGljQmFzZWxpbmUsIGZpcnN0TGluZSwgZGlyZWN0aW9uLCBsaW5lUG9zaXRpb25N
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBiYXNlbGluZTsK
KyAgICAKK30KKyAgICAKK30gICAgCisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTdWJTdXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFN1
YlN1cC5oCShyZXZpc2lvbiA3NTM1MCkJKGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRl
ck1hdGhNTFN1YlN1cC5oOjc1MzUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxTdWJTdXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29t
KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBS
ZW5kZXJNYXRoTUxTdWJTdXBfaAorI2RlZmluZSBSZW5kZXJNYXRoTUxTdWJTdXBfaAorCisjaWYg
RU5BQkxFKE1BVEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGFibGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgUmVu
ZGVyTWF0aE1MU3ViU3VwIDogcHVibGljIFJlbmRlck1hdGhNTEJsb2NrIHsKK3B1YmxpYzoKKyAg
ICBSZW5kZXJNYXRoTUxTdWJTdXAoRWxlbWVudCogZnJhY3Rpb24pOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gMCk7CisgICAgdmlydHVhbCBib29sIGhhc0Jhc2UoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBpbnQgbm9uT3BlcmF0b3JIZWlnaHQoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc3RyZXRjaFRvSGVpZ2h0KGludCBwaXhlbEhlaWdodCk7CisgICAgdmlydHVhbCBpbnQg
YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0
aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29u
c3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CisgICAgCitwcml2
YXRlOgorICAgIGVudW0gU3ViU3VwVHlwZSB7IFN1YiwgU3VwLCBTdWJTdXAgfTsKKyAgICBTdWJT
dXBUeXBlIG1fa2luZDsKKyAgICBSZW5kZXJCbG9jayogbV9zY3JpcHRzOworfTsKKyAgICAKK30K
KworI2VuZGlmIC8vIEVOQUJMRShNQVRITUwpCisKKyNlbmRpZiAvLyBSZW5kZXJNYXRoTUxTdWJT
dXBfaAorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TFVuZGVyT3Zlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuY3BwCShyZXZpc2lvbiA3NTM1MCkJKGZyb20gU291
cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHA6NzUzNTApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQWxleCBNaWxvd3NraSAoYWxleEBtaWxvd3NraS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KE1BVEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTFVuZGVyT3Zlci5oIgorCisjaW5jbHVk
ZSAiRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgTWF0aE1MTmFtZXM7CisgICAgCitzdGF0aWMg
Y29uc3QgZG91YmxlIGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgPSAwLjU7CisgICAgCitSZW5kZXJN
YXRoTUxVbmRlck92ZXI6OlJlbmRlck1hdGhNTFVuZGVyT3ZlcihOb2RlKiBleHByZXNzaW9uKSAK
KyAgICA6IFJlbmRlck1hdGhNTEJsb2NrKGV4cHJlc3Npb24pIAoreworICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZXhwcmVzc2lvbik7CisgICAgLy8gRGV0ZXJt
aW5lIHdoYXQga2luZCBvZiB1bmRlci9vdmVyIGV4cHJlc3Npb24gd2UgaGF2ZSBieSBlbGVtZW50
IG5hbWUKKyAgICAKKyAgICBpZiAoZWxlbWVudC0+aGFzTG9jYWxOYW1lKE1hdGhNTE5hbWVzOjpt
dW5kZXJUYWcpKQorICAgICAgICBtX2tpbmQgPSBVbmRlcjsKKyAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNMb2NhbE5hbWUoTWF0aE1MTmFtZXM6Om1vdmVyVGFnKSkKKyAgICAgICAgbV9raW5kID0g
T3ZlcjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNMb2NhbE5hbWUoTWF0aE1MTmFtZXM6Om11
bmRlcm92ZXJUYWcpKQorICAgICAgICBtX2tpbmQgPSBVbmRlck92ZXI7CisgICAgZWxzZSAKKyAg
ICAgICAgbV9raW5kID0gVW5kZXI7CisgICAgCit9CisKK3ZvaWQgUmVuZGVyTWF0aE1MVW5kZXJP
dmVyOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQoreyAgICAKKyAgICBSZW5kZXJNYXRoTUxCbG9jayogcm93ID0gbmV3IChyZW5kZXJBcmVu
YSgpKSBSZW5kZXJNYXRoTUxCbG9jayhub2RlKCkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4g
cm93U3R5bGUgPSBtYWtlQmxvY2tTdHlsZSgpOworICAgIHJvdy0+c2V0U3R5bGUocm93U3R5bGUu
cmVsZWFzZSgpKTsKKyAgICAKKyAgICAvLyBsb29rIHRocm91Z2ggdGhlIGNoaWxkcmVuIGZvciBy
ZW5kZXJlZCBlbGVtZW50cyBjb3VudGluZyB0aGUgYmxvY2tzIHNvIHdlIGtub3cgd2hhdCBjaGls
ZAorICAgIC8vIHdlIGFyZSBhZGRpbmcKKyAgICBpbnQgYmxvY2tzID0gMDsKKyAgICBSZW5kZXJP
YmplY3QqIGN1cnJlbnQgPSB0aGlzLT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKGN1cnJlbnQp
IHsKKyAgICAgICAgYmxvY2tzKys7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2li
bGluZygpOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGJsb2NrcykgeworICAgIGNhc2UgMDoK
KyAgICAgICAgLy8gdGhpcyBpcyB0aGUgYmFzZSBzbyBqdXN0IGFwcGVuZCBpdAorICAgICAgICBS
ZW5kZXJCbG9jazo6YWRkQ2hpbGQocm93LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgMToKKyAgICAgICAgLy8gdGhlIHVuZGVyIG9yIG92ZXIKKyAgICAgICAgLy8gRklY
TUU6IHRleHQtYWxpZ246IGNlbnRlciBkb2VzIG5vdCB3b3JrCisgICAgICAgIHJvdy0+c3R5bGUo
KS0+c2V0VGV4dEFsaWduKENFTlRFUik7CisgICAgICAgIGlmIChtX2tpbmQgPT0gT3Zlcikgewor
ICAgICAgICAgICAgLy8gYWRkIHRoZSBvdmVyIGFzIGZpcnN0CisgICAgICAgICAgICBSZW5kZXJC
bG9jazo6YWRkQ2hpbGQocm93LCBmaXJzdENoaWxkKCkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgLy8gYWRkIHRoZSB1bmRlciBhcyBsYXN0CisgICAgICAgICAgICBSZW5kZXJCbG9j
azo6YWRkQ2hpbGQocm93LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSAyOgorICAgICAgICAvLyB0aGUgdW5kZXIgb3Igb3ZlcgorICAgICAgICAvLyBG
SVhNRTogdGV4dC1hbGlnbjogY2VudGVyIGRvZXMgbm90IHdvcmsKKyAgICAgICAgcm93LT5zdHls
ZSgpLT5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsKKyAgICAgICAgaWYgKG1fa2luZCA9PSBVbmRlck92
ZXIpIHsKKyAgICAgICAgICAgIC8vIGFkZCB0aGUgb3ZlciBhcyBmaXJzdAorICAgICAgICAgICAg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKHJvdywgZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIHdlIHJlYWxseSBzaG91bGRuJ3QgZ2V0IGhlcmUgYXMgb25seSBt
dW5kZXJvdmVyIHNob3VsZCBoYXZlIHRocmVlIGNoaWxkcmVuCisgICAgICAgICAgICBSZW5kZXJC
bG9jazo6YWRkQ2hpbGQocm93LCBiZWZvcmVDaGlsZCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gbXVuZGVyb3ZlciBzaG91bGRuJ3QgaGF2ZSBt
b3JlIHRoYW4gdGhyZWUgY2hpbGRyZW4uICBJbiB0aGVvcnkgd2Ugc2hvdWxkbid0IAorICAgICAg
ICAvLyBnZXQgaGVyZSBpZiB0aGUgTWF0aE1MIGlzIGNvcnJlY3RseSBmb3JtZWQsIGJ1dCB0aGF0
IGlzbid0IGEgZ3VhcmFudGVlLgorICAgICAgICAvLyBXZSB3aWxsIHRyZWF0IHRoaXMgYXMgYW5v
dGhlciB1bmRlciBlbGVtZW50IGFuZCB0aGV5J2xsIGdldCBzb21ldGhpbmcgZnVua3kuCisgICAg
ICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChyb3csIGJlZm9yZUNoaWxkKTsKKyAgICB9CisgICAg
cm93LT5hZGRDaGlsZChjaGlsZCk7ICAgIAorfQorCitpbmxpbmUgaW50IGdldE9mZnNldEhlaWdo
dChSZW5kZXJPYmplY3QqIG9iaikgCit7CisgICAgaWYgKG9iai0+aXNCb3hNb2RlbE9iamVjdCgp
KSB7CisgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBib3ggPSB0b1JlbmRlckJveE1vZGVs
T2JqZWN0KG9iaik7CisgICAgICAgIHJldHVybiBib3gtPm9mZnNldEhlaWdodCgpOworICAgIH0K
KyAgIAorICAgIHJldHVybiAwOworfQorCit2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6c3Ry
ZXRjaFRvSGVpZ2h0KGludCBoZWlnaHQpCit7CisKKyAgICBSZW5kZXJPYmplY3QqIGJhc2UgPSBm
aXJzdENoaWxkKCk7CisgICAgaWYgKCFiYXNlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIC8vIEZvciBvdmVyIG9yIHVuZGVyb3ZlciwgdGhlIGJhc2UgaXMgdGhlIHNpYmxpbmcgb2Yg
dGhlIGZpcnN0IGNoaWxkCisgICAgaWYgKG1fa2luZCAhPSBVbmRlcikgCisgICAgICAgIGJhc2Ug
PSBiYXNlLT5uZXh0U2libGluZygpOworICAgICAgICAKKyAgICBpZiAoIWJhc2UpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgLy8gdXNlIHRoZSBjaGlsZCBvZiB0aGUgcm93IHdoaWNo
IGlzIHRoZSBhY3R1YWwgYmFzZQorICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7CisgICAg
CisgICAgaWYgKGJhc2UgJiYgYmFzZS0+aXNSZW5kZXJNYXRoTUxCbG9jaygpKSB7CisgICAgICAg
IFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRvUmVuZGVyTWF0aE1MQmxvY2soYmFzZSk7Cisg
ICAgICAgIGJsb2NrLT5zdHJldGNoVG9IZWlnaHQoaGVpZ2h0KTsKKyAgICAgICAgc2V0TmVlZHNM
YXlvdXQodHJ1ZSk7CisgICAgfQorfQorCit2b2lkIFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6bGF5
b3V0KCkgCit7CisgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOworICAgIFJlbmRlck9iamVjdCog
b3ZlciA9IDA7CisgICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gMDsKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgT3ZlcjoKKyAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhl
IGJhc2VsaW5lIG92ZXIgdGhlIG92ZXIgdmVyc3VzIHRoZSBzdGFydCBvZiB0aGUgYmFzZSBhbmQg
CisgICAgICAgIC8vIGFkanVzdCB0aGUgcGxhY2VtZW50IG9mIHRoZSBiYXNlLgorICAgICAgICBv
dmVyID0gZmlyc3RDaGlsZCgpOworICAgICAgICBpZiAob3ZlcikgeworICAgICAgICAgICAgLy8g
RklYTUU6IGRlc2NlbmRpbmcgZ2x5cGhzIGludHJ1ZGUgaW50byBiYXNlIChlLmcuIGxvd2VyY2Fz
ZSB5IG92ZXIgYmFzZSkKKyAgICAgICAgICAgIC8vIEZJWE1FOiBiYXNlcyB0aGF0IGFzY2VuZCBo
aWdoZXIgdGhhbiB0aGUgbGluZSBib3ggaW50cnVkZSBpbnRvIHRoZSBvdmVyCisgICAgICAgICAg
ICBpZiAoIW92ZXItPmZpcnN0Q2hpbGQoKS0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb3ZlclNwYWNpbmcg
PSBzdGF0aWNfY2FzdDxpbnQ+KGdPdmVyU3BhY2luZ0FkanVzdG1lbnQgKiAoZ2V0T2Zmc2V0SGVp
Z2h0KG92ZXIpIC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChvdmVyLT5maXJzdENoaWxkKCkpLT5i
YXNlbGluZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUp
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGJhc2Ugcm93IHdyYXBwZXIKKyAgICAg
ICAgICAgIGJhc2UgPSBvdmVyLT5uZXh0U2libGluZygpOworICAgICAgICAgICAgaWYgKGJhc2Up
IHsKKyAgICAgICAgICAgICAgICBpZiAob3ZlclNwYWNpbmcgPiAwKSAKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZS0+c3R5bGUoKS0+c2V0TWFyZ2luVG9wKExlbmd0aCgtb3ZlclNwYWNpbmcsIEZp
eGVkKSk7CisgICAgICAgICAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+
c3R5bGUoKS0+c2V0TWFyZ2luVG9wKExlbmd0aCgwLCBGaXhlZCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbmRlcjoK
KyAgICAgICAgLy8gRklYTUU6IE5vbi1hc2NlbmRpbmcgZ2x5cGhzIGluIHRoZSB1bmRlciBzaG91
bGQgYmUgbW92ZWQgY2xvc2VyIHRvIHRoZSBiYXNlCisKKyAgICAgICAgLy8gV2UgbmVlZCB0byBj
YWxjdWxhdGUgdGhlIGJhc2VsaW5lIG9mIHRoZSBiYXNlIHZlcnN1cyB0aGUgc3RhcnQgb2YgdGhl
IHVuZGVyIGJsb2NrIGFuZAorICAgICAgICAvLyBhZGp1c3QgdGhlIHBsYWNlbWVudCBvZiB0aGUg
dW5kZXIgYmxvY2suCisgICAgICAgIAorICAgICAgICAvLyBiYXNlIHJvdyB3cmFwcGVyCisgICAg
ICAgIGJhc2UgPSBmaXJzdENoaWxkKCk7CisgICAgICAgIGlmIChiYXNlKSB7CisgICAgICAgICAg
ICBpbnQgYmFzZUhlaWdodCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKKyAgICAgICAgICAgIC8v
IGFjdHVhbCBiYXNlCisgICAgICAgICAgICBiYXNlID0gYmFzZS0+Zmlyc3RDaGlsZCgpOworICAg
ICAgICAgICAgaWYgKCFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGxv
b2sgYXQgdGhlIHNwYWNlIGJldHdlZW4gYSBzaW5nbGUgbWF4aW11bSBoZWlnaHQgb2YKKyAgICAg
ICAgICAgIC8vICAgICAgICB0aGUgbGluZSBib3hlcyBhbmQgdGhlIGJhc2VsaW5lIGFuZCBzcXVl
ZXplIHRoZW0gdG9nZXRoZXIKKyAgICAgICAgICAgIGludCB1bmRlclNwYWNpbmcgPSBiYXNlSGVp
Z2h0IC0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKS0+YmFzZWxpbmVQb3NpdGlvbihBbHBo
YWJldGljQmFzZWxpbmUsIHRydWUsIEhvcml6b250YWxMaW5lKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gYWRqdXN0IHRoZSBiYXNlJ3MgaW50cnVzaW9uIGludG8gdGhlIHVuZGVyCisg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIHVuZGVyID0gbGFzdENoaWxkKCk7CisgICAgICAgICAg
ICBpZiAodW5kZXIgJiYgdW5kZXJTcGFjaW5nID4gMCkKKyAgICAgICAgICAgICAgICB1bmRlci0+
c3R5bGUoKS0+c2V0TWFyZ2luVG9wKExlbmd0aCgtdW5kZXJTcGFjaW5nLCBGaXhlZCkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5kZXJPdmVyOgorICAgICAgICAvLyBG
SVhNRTogTm9uLWRlc2NlbmRpbmcgZ2x5cGhzIGluIHRoZSBvdmVyIHNob3VsZCBiZSBtb3ZlZCBj
bG9zZXIgdG8gdGhlIGJhc2UKKyAgICAgICAgLy8gRklYTUU6IE5vbi1hc2NlbmRpbmcgZ2x5cGhz
IGluIHRoZSB1bmRlciBzaG91bGQgYmUgbW92ZWQgY2xvc2VyIHRvIHRoZSBiYXNlCisgICAgICAg
IAorICAgICAgICAvLyBXZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgYmFzZWxpbmUgb2YgdGhlIG92
ZXIgdmVyc3VzIHRoZSBzdGFydCBvZiB0aGUgYmFzZSBhbmQgCisgICAgICAgIC8vIGFkanVzdCB0
aGUgcGxhY2VtZW50IG9mIHRoZSBiYXNlLgorICAgICAgICAKKyAgICAgICAgb3ZlciA9IGZpcnN0
Q2hpbGQoKTsKKyAgICAgICAgaWYgKG92ZXIpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBkZXNj
ZW5kaW5nIGdseXBocyBpbnRydWRlIGludG8gYmFzZSAoZS5nLiBsb3dlcmNhc2UgeSBvdmVyIGJh
c2UpCisgICAgICAgICAgICAvLyBGSVhNRTogYmFzZXMgdGhhdCBhc2NlbmQgaGlnaGVyIHRoYW4g
dGhlIGxpbmUgYm94IGludHJ1ZGUgaW50byB0aGUgb3ZlcgorICAgICAgICAgICAgaWYgKCFvdmVy
LT5maXJzdENoaWxkKCktPmlzQm94TW9kZWxPYmplY3QoKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGludCBvdmVyU3BhY2luZyA9IHN0YXRpY19jYXN0PGludD4oZ092ZXJT
cGFjaW5nQWRqdXN0bWVudCAqIChnZXRPZmZzZXRIZWlnaHQob3ZlcikgLSB0b1JlbmRlckJveE1v
ZGVsT2JqZWN0KG92ZXItPmZpcnN0Q2hpbGQoKSktPmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRp
Y0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSkpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gYmFzZSByb3cgd3JhcHBlcgorICAgICAgICAgICAgYmFzZSA9IG92ZXItPm5leHRT
aWJsaW5nKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChiYXNlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKG92ZXJTcGFjaW5nID4gMCkKKyAgICAgICAgICAgICAgICAgICAgYmFzZS0+
c3R5bGUoKS0+c2V0TWFyZ2luVG9wKExlbmd0aCgtb3ZlclNwYWNpbmcsIEZpeGVkKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjYWxjdWxhdGUgdGhl
IGJhc2VsaW5lIG9mIHRoZSBiYXNlIHZlcnN1cyB0aGUgc3RhcnQgb2YgdGhlIHVuZGVyIGJsb2Nr
IGFuZAorICAgICAgICAgICAgICAgIC8vIGFkanVzdCB0aGUgcGxhY2VtZW50IG9mIHRoZSB1bmRl
ciBibG9jay4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnQgYmFzZUhlaWdo
dCA9IGdldE9mZnNldEhlaWdodChiYXNlKTsKKyAgICAgICAgICAgICAgICAvLyBhY3R1YWwgYmFz
ZQorICAgICAgICAgICAgICAgIGJhc2UgPSBiYXNlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gbG9vayBhdCB0
aGUgc3BhY2UgYmV0d2VlbiBhIHNpbmdsZSBtYXhpbXVtIGhlaWdodCBvZgorICAgICAgICAgICAg
ICAgIC8vICAgICAgICB0aGUgbGluZSBib3hlcyBhbmQgdGhlIGJhc2VsaW5lIGFuZCBzcXVlZXpl
IHRoZW0gdG9nZXRoZXIKKyAgICAgICAgICAgICAgICBpbnQgdW5kZXJTcGFjaW5nID0gYmFzZUhl
aWdodCAtIHRvUmVuZGVyQm94TW9kZWxPYmplY3QoYmFzZSktPmJhc2VsaW5lUG9zaXRpb24oQWxw
aGFiZXRpY0Jhc2VsaW5lLCB0cnVlLCBIb3Jpem9udGFsTGluZSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiB1bmRlciA9IGxhc3RDaGlsZCgpOworICAg
ICAgICAgICAgICAgIGlmICh1bmRlciAmJiB1bmRlci0+Zmlyc3RDaGlsZCgpLT5pc1JlbmRlcklu
bGluZSgpICYmIHVuZGVyU3BhY2luZyA+IDApCisgICAgICAgICAgICAgICAgICAgIHVuZGVyLT5z
dHlsZSgpLT5zZXRNYXJnaW5Ub3AoTGVuZ3RoKC11bmRlclNwYWNpbmcsIEZpeGVkKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOworICAgIFJlbmRlckJsb2NrOjpsYXlvdXQo
KTsKK30KKworaW50IFJlbmRlck1hdGhNTFVuZGVyT3Zlcjo6YmFzZWxpbmVQb3NpdGlvbihGb250
QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExp
bmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKK3sKKyAgICBSZW5kZXJPYmpl
Y3QqIGN1cnJlbnQgPSBmaXJzdENoaWxkKCk7CisgICAgaWYgKCFjdXJyZW50KQorICAgICAgICBy
ZXR1cm4gUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oQWxwaGFiZXRpY0Jhc2VsaW5lLCBm
aXJzdExpbmUsIGRpcmVjdGlvbiwgbGluZVBvc2l0aW9uTW9kZSk7CisKKyAgICBpbnQgYmFzZWxp
bmUgPSAwOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBVbmRlck92ZXI6CisgICAg
Y2FzZSBPdmVyOgorICAgICAgICBiYXNlbGluZSArPSBnZXRPZmZzZXRIZWlnaHQoY3VycmVudCk7
CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOworICAgICAgICBpZiAo
Y3VycmVudCkgeworICAgICAgICAgICAgLy8gYWN0dWFsIGJhc2UKKyAgICAgICAgICAgIFJlbmRl
ck9iamVjdCogYmFzZSA9IGN1cnJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGlmICgh
YmFzZSB8fCAhYmFzZS0+aXNCb3hNb2RlbE9iamVjdCgpKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgYmFzZWxpbmUgKz0gdG9SZW5kZXJCb3hNb2RlbE9iamVjdChiYXNlKS0+
YmFzZWxpbmVQb3NpdGlvbihBbHBoYWJldGljQmFzZWxpbmUsIGZpcnN0TGluZSwgSG9yaXpvbnRh
bExpbmUsIGxpbmVQb3NpdGlvbk1vZGUpOworICAgICAgICAgICAgLy8gYWRkZWQgdGhlIG5lZ2F0
aXZlIHRvcCBtYXJnaW4KKyAgICAgICAgICAgIGJhc2VsaW5lICs9IGN1cnJlbnQtPnN0eWxlKCkt
Pm1hcmdpblRvcCgpLnZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBVbmRlcjoKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBiYXNlID0gY3VycmVudC0+Zmlyc3RDaGls
ZCgpOworICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLT5pc0JveE1vZGVsT2JqZWN0KCkpCisgICAg
ICAgICAgICBiYXNlbGluZSArPSB0b1JlbmRlckJveE1vZGVsT2JqZWN0KGJhc2UpLT5iYXNlbGlu
ZVBvc2l0aW9uKEFscGhhYmV0aWNCYXNlbGluZSwgdHJ1ZSwgSG9yaXpvbnRhbExpbmUpOworICAg
IH0KKworICAgIC8vIEZJWE1FOiBXaGVyZSBpcyB0aGUgZXh0cmEgMi0zcHggYWRqdXN0ZWQgZm9y
IHpvb20gY29taW5nIGZyb20/CisgICAgZmxvYXQgem9vbUZhY3RvciA9IHN0eWxlKCktPmVmZmVj
dGl2ZVpvb20oKTsKKyAgICBiYXNlbGluZSArPSBzdGF0aWNfY2FzdDxpbnQ+KCh6b29tRmFjdG9y
ID4gMS4yNSA/IDIgOiAzKSAqIHpvb21GYWN0b3IpOworICAgIHJldHVybiBiYXNlbGluZTsKK30K
KworCitpbnQgUmVuZGVyTWF0aE1MVW5kZXJPdmVyOjpub25PcGVyYXRvckhlaWdodCgpIGNvbnN0
IAoreworICAgIGludCBub25PcGVyYXRvcnMgPSAwOworICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyZW50ID0gZmlyc3RDaGlsZCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNp
YmxpbmcoKSkgeworICAgICAgICBpZiAoY3VycmVudC0+Zmlyc3RDaGlsZCgpLT5pc1JlbmRlck1h
dGhNTEJsb2NrKCkpIHsKKyAgICAgICAgICAgIFJlbmRlck1hdGhNTEJsb2NrKiBibG9jayA9IHRv
UmVuZGVyTWF0aE1MQmxvY2soY3VycmVudC0+Zmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2stPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSkgCisgICAgICAgICAgICAgICAgbm9u
T3BlcmF0b3JzICs9IGdldE9mZnNldEhlaWdodChjdXJyZW50KTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG5vbk9wZXJhdG9ycyArPSBnZXRPZmZzZXRIZWlnaHQoY3VycmVudCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5vbk9wZXJhdG9yczsKK30KKworfQorCisKKyNl
bmRpZiAvLyBFTkFCTEUoTUFUSE1MKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxVbmRlck92ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oCShyZXZpc2lvbiA3NTM1
MCkJKGZyb20gU291cmNlL1dlYkNvcmUvbWF0aG1sL1JlbmRlck1hdGhNTFVuZGVyT3Zlci5oOjc1
MzUwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxVbmRl
ck92ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA5IEFsZXggTWlsb3dza2kgKGFsZXhAbWlsb3dza2kuY29tKS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBSZW5kZXJNYXRoTUxVbmRl
ck92ZXJfaAorI2RlZmluZSBSZW5kZXJNYXRoTUxVbmRlck92ZXJfaAorCisjaWYgRU5BQkxFKE1B
VEhNTCkKKworI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJsb2NrLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKyAgICAKK2NsYXNzIFJlbmRlck1hdGhNTFVuZGVyT3ZlciA6IHB1YmxpYyBSZW5kZXJN
YXRoTUxCbG9jayB7CitwdWJsaWM6CisgICAgUmVuZGVyTWF0aE1MVW5kZXJPdmVyKE5vZGUqIGV4
cHJlc3Npb24pOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNCYXNlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgaW50IG5vbk9wZXJhdG9ySGVpZ2h0KCkgY29uc3Q7CisgICAgdmlydHVhbCBp
bnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGly
ZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkg
Y29uc3Q7ICAgIAorICAgIHZpcnR1YWwgdm9pZCBzdHJldGNoVG9IZWlnaHQoaW50IHBpeGVsSGVp
Z2h0KTsKK3ByaXZhdGU6CisgICAgZW51bSBVbmRlck92ZXJUeXBlIHsgVW5kZXIsIE92ZXIsIFVu
ZGVyT3ZlciB9OworICAgIFVuZGVyT3ZlclR5cGUgbV9raW5kOworfTsKKyAgICAKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShNQVRITUwpCisKKyNlbmRpZiAvLyBSZW5kZXJNYXRoTUxVbmRlck92ZXJf
aAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>