<?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>45139</bug_id>
          
          <creation_ts>2010-09-02 15:38:09 -0700</creation_ts>
          <short_desc>Share the common parts of UserMessage coding between both processes.</short_desc>
          <delta_ts>2010-09-02 16:30:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</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="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>273622</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-02 15:38:09 -0700</bug_when>
    <thetext>Share the common parts of UserMessage coding between both processes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273624</commentid>
    <comment_count>1</comment_count>
      <attachid>66423</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-02 15:41:35 -0700</bug_when>
    <thetext>Created attachment 66423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273662</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-02 16:30:43 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/66688.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66423</attachid>
            <date>2010-09-02 15:41:35 -0700</date>
            <delta_ts>2010-09-02 15:48:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>54386</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NjY4NykKKysrIFdlYktpdDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDktMDIgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaGFyZSB0
aGUgY29tbW9uIHBhcnRzIG9mIFVzZXJNZXNzYWdlIGNvZGluZyBiZXR3ZWVuIGJvdGggcHJvY2Vz
c2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUx
MzkKKworICAgICAgICBBZGQgYmFzZSBjbGFzc2VzIFVzZXJNZXNzYWdlRW5jb2RlciBhbmQgVXNl
ck1lc3NhZ2VEZWNvZGVyIHdoaWNoIGltcGxlbWVudAorICAgICAgICBlbmNvZGluZy9kZWNvZGlu
ZyBvZiBJbW11dGFibGVBcnJheSBhbmQgU3RyaW5nIChzb29uIHRvIGJlIG90aGVycyBhcyB3ZWxs
LCBzdWNoCisgICAgICAgIGFzIEltbXV0YWJsZURpY3Rpb25hcnksIERhdGEsIGV0Yy4pIGFuZCBh
ZGQgZGVyaXZlZCBjbGFzc2VzIHdoaWNoIGltcGxlbWVudCB0aGUKKyAgICAgICAgcHJvY2VzcyBz
cGVjaWZpYyBiaXRzIHN1Y2ggYXMgUGFnZSAtPiBCdW5kbGVQYWdlIGNvbnZlcnNpb24uCisKKyAg
ICAgICAgKiBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaDogQ29waWVkIGZyb20gV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAuCisgICAgICAgIChXZWJLaXQ6OlVz
ZXJNZXNzYWdlRW5jb2Rlcjo6YmFzZUVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlVzZXJNZXNz
YWdlRW5jb2Rlcjo6VXNlck1lc3NhZ2VFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1l
c3NhZ2VEZWNvZGVyOjpiYXNlRGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6VXNlck1lc3NhZ2VE
ZWNvZGVyOjpVc2VyTWVzc2FnZURlY29kZXIpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6cG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaDog
Q29waWVkIGZyb20gVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwLgorICAgICAgICAoV2ViS2l0OjpX
ZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyOjpXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVy
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRW5jb2Rlcjo6ZW5jb2Rl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQ29udGV4dFVzZXJNZXNzYWdlRGVjb2Rlcjo6V2ViQ29u
dGV4dFVzZXJNZXNzYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJLaXQ6OldlYkNvbnRleHRVc2Vy
TWVzc2FnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogV2ViS2l0Mi5wcm86CisgICAgICAg
ICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZTo6cG9zdE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1
bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oOiBDb3BpZWQgZnJvbSBXZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcC4KKyAgICAgICAgKFdlYktp
dDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXI6OkluamVjdGVkQnVuZGxlVXNlck1l
c3NhZ2VFbmNvZGVyKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2Fn
ZUVuY29kZXI6OmVuY29kZSk6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1l
c3NhZ2VEZWNvZGVyOjpJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRGVjb2Rlcik6CisgICAgICAg
IChXZWJLaXQ6OkluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAg
ICAgICAqIHdpbi9XZWJLaXQyLnZjcHJvajoKKwogMjAxMC0wOS0wMiAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5k
ZXg6IFdlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnBy
bwkocmV2aXNpb24gNjY2NzYpCisrKyBXZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjIsNiArMTYyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgU2hhcmVkL011dGFibGVEaWN0
aW9uYXJ5LmggXAogICAgIFNoYXJlZC9Ob3RJbXBsZW1lbnRlZC5oIFwKICAgICBTaGFyZWQvcXQv
V2ViRXZlbnRGYWN0b3J5UXQuaCBcCisgICAgU2hhcmVkL1VzZXJNZXNzYWdlQ29kZXJzLmggXAog
ICAgIFNoYXJlZC9WaXNpdGVkTGlua1RhYmxlLmggXAogICAgIFNoYXJlZC9XZWJFdmVudENvbnZl
cnNpb24uaCBcCiAgICAgU2hhcmVkL1dlYkV2ZW50LmggXApAQCAtMjA0LDYgKzIwNSw3IEBAIEhF
QURFUlMgKz0gXAogICAgIFVJUHJvY2Vzcy9WaXNpdGVkTGlua1Byb3ZpZGVyLmggXAogICAgIFVJ
UHJvY2Vzcy9XZWJDb250ZXh0LmggXAogICAgIFVJUHJvY2Vzcy9XZWJDb250ZXh0SW5qZWN0ZWRC
dW5kbGVDbGllbnQuaCBcCisgICAgVUlQcm9jZXNzL1dlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVy
cy5oIFwKICAgICBVSVByb2Nlc3MvV2ViRm9ybUNsaWVudC5oIFwKICAgICBVSVByb2Nlc3MvV2Vi
Rm9ybVN1Ym1pc3Npb25MaXN0ZW5lclByb3h5LmggXAogICAgIFVJUHJvY2Vzcy9XZWJGcmFtZUxp
c3RlbmVyUHJveHkuaCBcCkBAIC0yMjYsNiArMjI4LDcgQEAgSEVBREVSUyArPSBcCiAgICAgV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2VGb3JtQ2xpZW50LmggXAog
ICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQu
aCBcCiAgICAgV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVNjcmlwdFdv
cmxkLmggXAorICAgIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVVc2Vy
TWVzc2FnZUNvZGVycy5oIFwKICAgICBXZWJQcm9jZXNzL1BsdWdpbnMvSlNOUE9iamVjdC5oIFwK
ICAgICBXZWJQcm9jZXNzL1BsdWdpbnMvSlNOUE1ldGhvZC5oIFwKICAgICBXZWJQcm9jZXNzL1Bs
dWdpbnMvTlBKU09iamVjdC5oIFwKSW5kZXg6IFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNoYXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCShyZXZpc2lvbiA2NjY3OSkJ
KGZyb20gV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6NjY2Nzkp
CisrKyBTaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvVXNlck1lc3NhZ2VDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1No
YXJlZC9Vc2VyTWVzc2FnZUNvZGVycy5oCShyZXZpc2lvbiA2NjYzNykKKysrIFdlYktpdDIvU2hh
cmVkL1VzZXJNZXNzYWdlQ29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwNCArMjMsNjAg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGUuaCIKLQotI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkFy
Z3VtZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgogI2luY2x1ZGUg
IkltbXV0YWJsZUFycmF5LmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVNZXNzYWdlS2luZHMu
aCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkLmgiCi0jaW5jbHVkZSAiV0tB
UElDYXN0LmgiCi0jaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCi0jaW5jbHVkZSAiV2ViQ29u
dGV4dE1lc3NhZ2VLaW5kcy5oIgotI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgot
I2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRlICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9sbGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9K
U0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZUdyb3VwLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUg
PHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2luZyBuYW1lc3BhY2UgSlNDOworI2luY2x1ZGUg
IldlYlN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotbmFtZXNwYWNlIHsKLQotLy8g
RklYTUU6IFdlIHNob3VsZCB0cnkgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzaGFyZWQgbG9naWMgZnJv
bSB0aGVzZSBhbmQKLS8vIGFuZCB0aGUgUG9zdE1lc3NhZ2VFbmNvZGVyL1Bvc3RNZXNzYWdlRGVj
b2RlcnMgaW4gV2ViQ29udGV4dC5jcHAgaW50bwotLy8gYSBzaGFyZWQgYmFzZWNsYXNzLgotCi0v
LyBFbmNvZGVzIHBvc3RNZXNzYWdlIG1lc3NhZ2VzIGZyb20gdGhlIEluamVjdGVkQnVuZGxlIC0+
IFVJUHJvY2VzcwotCiAvLyAgIC0gQXJyYXkgLT4gQXJyYXkKIC8vICAgLSBTdHJpbmcgLT4gU3Ry
aW5nCi0vLyAgIC0gQnVuZGxlUGFnZSAtPiBQYWdlCiAKLWNsYXNzIFBvc3RNZXNzYWdlRW5jb2Rl
ciB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lcj4KK2NsYXNzIFVzZXJNZXNzYWdlRW5jb2RlciB7
CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VFbmNvZGVyKEFQSU9iamVjdCogcm9vdCkgCi0gICAg
ICAgIDogbV9yb290KHJvb3QpCisgICAgYm9vbCBiYXNlRW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgQVBJT2JqZWN0OjpUeXBlIHR5cGUpIGNvbnN0IAogICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIp
IGNvbnN0IAotICAgIHsKLSAgICAgICAgQVBJT2JqZWN0OjpUeXBlIHR5cGUgPSBtX3Jvb3QtPnR5
cGUoKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBl
KSk7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlw
ZUFycmF5OiB7CiAgICAgICAgICAgICBJbW11dGFibGVBcnJheSogYXJyYXkgPSBzdGF0aWNfY2Fz
dDxJbW11dGFibGVBcnJheSo+KG1fcm9vdCk7CiAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5LT5zaXplKCkpKTsKICAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGVu
Y29kZXItPmVuY29kZShQb3N0TWVzc2FnZUVuY29kZXIoYXJyYXktPmF0KGkpKSk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoT3duZXIoYXJyYXkt
PmF0KGkpKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBj
YXNlIEFQSU9iamVjdDo6VHlwZVN0cmluZzogewogICAgICAgICAgICAgV2ViU3RyaW5nKiBzdHJp
bmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPihtX3Jvb3QpOwogICAgICAgICAgICAgZW5jb2Rl
ci0+ZW5jb2RlKHN0cmluZy0+c3RyaW5nKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVCdW5kbGVQYWdlOiB7Ci0gICAgICAgICAg
ICBXZWJQYWdlKiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViUGFnZSo+KG1fcm9vdCk7Ci0gICAgICAg
ICAgICBlbmNvZGVyLT5lbmNvZGUocGFnZS0+cGFnZUlEKCkpOwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAg
ICBVc2VyTWVzc2FnZUVuY29kZXIoQVBJT2JqZWN0KiByb290KSAKKyAgICAgICAgOiBtX3Jvb3Qo
cm9vdCkKKyAgICB7CiAgICAgfQogCi1wcml2YXRlOgogICAgIEFQSU9iamVjdCogbV9yb290Owog
fTsKIAogCi0vLyBEZWNvZGVzIHBvc3RNZXNzYWdlIG1lc3NhZ2VzIGdvaW5nIGZyb20gdGhlIFVJ
UHJvY2VzcyAtPiBJbmplY3RlZEJ1bmRsZQotCisvLyBIYW5kbGVzCiAvLyAgIC0gQXJyYXkgLT4g
QXJyYXkKIC8vICAgLSBTdHJpbmcgLT4gU3RyaW5nCi0vLyAgIC0gUGFnZSAtPiBCdW5kbGVQYWdl
CiAKLWNsYXNzIFBvc3RNZXNzYWdlRGVjb2RlciB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBPd25lcj4K
K2NsYXNzIFVzZXJNZXNzYWdlRGVjb2RlciB7CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VEZWNv
ZGVyKFJlZlB0cjxBUElPYmplY3Q+JiByb290KQotICAgICAgICA6IG1fcm9vdChyb290KQorICAg
IHN0YXRpYyBib29sIGJhc2VEZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBPd25lciYgY29kZXIsIEFQSU9iamVjdDo6VHlwZSB0eXBlKQogICAgIHsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQ
b3N0TWVzc2FnZURlY29kZXImIGNvZGVyKQotICAgIHsKLSAgICAgICAgdWludDMyX3QgdHlwZTsK
LSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlwZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgQVBJT2JqZWN0
OjpUeXBlQXJyYXk6IHsKICAgICAgICAgICAgIHVpbnQ2NF90IHNpemU7CkBAIC0xMzAsNyArODYs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSU9iamVjdD4gPiB2ZWN0
b3I7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAg
ICAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IGVsZW1lbnQ7Ci0gICAgICAgICAgICAgICAg
UG9zdE1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VDb2RlcihlbGVtZW50KTsKKyAgICAgICAgICAgICAg
ICBPd25lciBtZXNzYWdlQ29kZXIoY29kZXIsIGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKG1lc3NhZ2VDb2RlcikpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB2ZWN0b3IuYXBwZW5kKGVsZW1lbnQucmVsZWFz
ZSgpKTsKQEAgLTE0NiwxNzcgKzEwMiwyMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjb2Rlci5t
X3Jvb3QgPSBXZWJTdHJpbmc6OmNyZWF0ZShzdHJpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVQYWdlOiB7Ci0gICAgICAgICAg
ICB1aW50NjRfdCBwYWdlSUQ7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYWdl
SUQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvZGVyLm1f
cm9vdCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2UocGFnZUlEKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotcHJpdmF0ZToKLSAgICBSZWZQdHI8QVBJT2JqZWN0PiYgbV9yb290Owot
fTsKLQotfQotCi1JbmplY3RlZEJ1bmRsZTo6SW5qZWN0ZWRCdW5kbGUoY29uc3QgU3RyaW5nJiBw
YXRoKQotICAgIDogbV9wYXRoKHBhdGgpCi0gICAgLCBtX3BsYXRmb3JtQnVuZGxlKDApCi17Ci0g
ICAgaW5pdGlhbGl6ZUNsaWVudCgwKTsKLX0KLQotSW5qZWN0ZWRCdW5kbGU6On5JbmplY3RlZEJ1
bmRsZSgpCi17Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemVDbGllbnQoV0tC
dW5kbGVDbGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAoY2xpZW50ICYmICFjbGllbnQtPnZlcnNp
b24pCi0gICAgICAgIG1fY2xpZW50ID0gKmNsaWVudDsKLSAgICBlbHNlCi0gICAgICAgIG1lbXNl
dCgmbV9jbGllbnQsIDAsIHNpemVvZihtX2NsaWVudCkpOwotfQotCi12b2lkIEluamVjdGVkQnVu
ZGxlOjpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUElPYmplY3QqIG1l
c3NhZ2VCb2R5KQotewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2Vu
ZChXZWJDb250ZXh0TWVzc2FnZTo6UG9zdE1lc3NhZ2UsIDAsIENvcmVJUEM6OkluKG1lc3NhZ2VO
YW1lLCBQb3N0TWVzc2FnZUVuY29kZXIobWVzc2FnZUJvZHkpKSk7Ci19Ci0KLXZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJvb2wgc2hvdWxkVHJhY2tWaXNp
dGVkTGlua3MpCi17Ci0gICAgUGFnZUdyb3VwOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhz
aG91bGRUcmFja1Zpc2l0ZWRMaW5rcyk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpCi17Ci0gICAgUGFnZUdyb3VwOjpyZW1vdmVBbGxWaXNpdGVkTGlu
a3MoKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3ZlcnJpZGVYU1NBdWRpdG9yRW5hYmxl
ZEZvclRlc3RSdW5uZXIoYm9vbCBlbmFibGVkKQotewotICAgIC8vIE92ZXJyaWRlIHRoZSBwcmVm
ZXJlbmNlIGZvciBhbGwgZnV0dXJlIHBhZ2VzLgotICAgIFdlYlByZWZlcmVuY2VzU3RvcmU6Om92
ZXJyaWRlWFNTQXVkaXRvckVuYWJsZWRGb3JUZXN0UnVubmVyKGVuYWJsZWQpOwotCi0gICAgLy8g
Q2hhbmdlIHRoZSBzZXR0aW5nIGZvciBleGlzdGluZyBvbmVzLgotICAgIGNvbnN0IEhhc2hTZXQ8
UGFnZSo+JiBwYWdlcyA9IFdlYlByb2Nlc3M6OnNoYXJlZFBhZ2VHcm91cCgpLT5wYWdlcygpOwot
Ci0gICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6aXRlcmF0b3IgaXRlciA9IHBhZ2VzLmJlZ2luKCk7
IGl0ZXIgIT0gcGFnZXMuZW5kKCk7ICsraXRlcikKLSAgICAgICAgKCppdGVyKS0+c2V0dGluZ3Mo
KS0+c2V0WFNTQXVkaXRvckVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLQotc3RhdGljIFBhc3NPd25Q
dHI8VmVjdG9yPFN0cmluZz4gPiB0b1N0cmluZ1ZlY3RvcihJbW11dGFibGVBcnJheSogcGF0dGVy
bnMpCi17Ci0gICAgaWYgKCFwYXR0ZXJucykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzaXpl
X3Qgc2l6ZSA9ICBwYXR0ZXJucy0+c2l6ZSgpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiogcGF0dGVybnNWZWN0b3IgPSBuZXcgVmVjdG9y
PFN0cmluZz47Ci0gICAgcGF0dGVybnNWZWN0b3ItPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2l6
ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgV2Vi
U3RyaW5nKiBlbnRyeSA9IHBhdHRlcm5zLT5hdDxXZWJTdHJpbmc+KGkpOwotICAgICAgICBpZiAo
ZW50cnkpCi0gICAgICAgICAgICBwYXR0ZXJuc1ZlY3Rvci0+dW5jaGVja2VkQXBwZW5kKGVudHJ5
LT5zdHJpbmcoKSk7Ci0gICAgfQotICAgIHJldHVybiBwYXR0ZXJuc1ZlY3RvcjsKLX0KLQotdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxk
KiBzY3JpcHRXb3JsZCwgY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgdXJsLCBJ
bW11dGFibGVBcnJheSogd2hpdGVsaXN0LCBJbW11dGFibGVBcnJheSogYmxhY2tsaXN0LCBXZWJD
b3JlOjpVc2VyU2NyaXB0SW5qZWN0aW9uVGltZSBpbmplY3Rpb25UaW1lLCBXZWJDb3JlOjpVc2Vy
Q29udGVudEluamVjdGVkRnJhbWVzIGluamVjdGVkRnJhbWVzKQotewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZFBhZ2VHcm91cCgpLT5hZGRVc2VyU2NyaXB0VG9Xb3JsZChzY3JpcHRXb3JsZC0+Y29y
ZVdvcmxkKCksIHNvdXJjZSwgS1VSTChQYXJzZWRVUkxTdHJpbmcsIHVybCksIHRvU3RyaW5nVmVj
dG9yKHdoaXRlbGlzdCksIHRvU3RyaW5nVmVjdG9yKGJsYWNrbGlzdCksIGluamVjdGlvblRpbWUs
IGluamVjdGVkRnJhbWVzKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6YWRkVXNlclN0eWxl
U2hlZXQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgSW1tdXRhYmxlQXJyYXkqIHdoaXRlbGlzdCwg
SW1tdXRhYmxlQXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZy
YW1lcyBpbmplY3RlZEZyYW1lcykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWRQYWdlR3JvdXAo
KS0+YWRkVXNlclN0eWxlU2hlZXRUb1dvcmxkKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSwgc291
cmNlLCBLVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKSwgdG9TdHJpbmdWZWN0b3Iod2hpdGVsaXN0
KSwgdG9TdHJpbmdWZWN0b3IoYmxhY2tsaXN0KSwgaW5qZWN0ZWRGcmFtZXMpOwotfQotCi12b2lk
IEluamVjdGVkQnVuZGxlOjpyZW1vdmVVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHVybCkKLXsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWRQYWdlR3JvdXAoKS0+cmVtb3ZlVXNlclNjcmlwdEZyb21Xb3JsZChzY3JpcHRXb3JsZC0+
Y29yZVdvcmxkKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKLX0KLQotdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclN0eWxlU2hlZXQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0cmluZyYgdXJsKQotewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZFBhZ2VHcm91cCgpLT5yZW1vdmVVc2VyU3R5bGVTaGVldEZyb21Xb3JsZChzY3JpcHRXb3Js
ZC0+Y29yZVdvcmxkKCksIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKLX0KLQotdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6cmVtb3ZlVXNlclNjcmlwdHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3Js
ZCogc2NyaXB0V29ybGQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkUGFnZUdyb3VwKCktPnJl
bW92ZVVzZXJTY3JpcHRzRnJvbVdvcmxkKHNjcmlwdFdvcmxkLT5jb3JlV29ybGQoKSk7Ci19Ci0K
LXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJTdHlsZVNoZWV0cyhJbmplY3RlZEJ1bmRs
ZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWRQYWdl
R3JvdXAoKS0+cmVtb3ZlVXNlclN0eWxlU2hlZXRzRnJvbVdvcmxkKHNjcmlwdFdvcmxkLT5jb3Jl
V29ybGQoKSk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZUFsbFVzZXJDb250ZW50
KCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWRQYWdlR3JvdXAoKS0+cmVtb3ZlQWxsVXNlckNv
bnRlbnQoKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhU2Ny
aXB0T2JqZWN0cygpCi17Ci0gICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFnZUNvbGxlY3ROb3coKTsK
LX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0
c09uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKGJvb2wgd2FpdFVudGlsRG9uZSkKLXsKLSAg
ICBnY0NvbnRyb2xsZXIoKS5nYXJiYWdlQ29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdn
aW5nKHdhaXRVbnRpbERvbmUpOwotfQotCi1zaXplX3QgSW5qZWN0ZWRCdW5kbGU6OmphdmFTY3Jp
cHRPYmplY3RzQ291bnQoKQotewotICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25s
eSk7Ci0gICAgcmV0dXJuIEpTRE9NV2luZG93Ojpjb21tb25KU0dsb2JhbERhdGEoKS0+aGVhcC5v
YmplY3RDb3VudCgpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpkaWRDcmVhdGVQYWdlKFdl
YlBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKG1fY2xpZW50LmRpZENyZWF0ZVBhZ2UpCi0gICAgICAg
IG1fY2xpZW50LmRpZENyZWF0ZVBhZ2UodG9SZWYodGhpcyksIHRvUmVmKHBhZ2UpLCBtX2NsaWVu
dC5jbGllbnRJbmZvKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6d2lsbERlc3Ryb3lQYWdl
KFdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgaWYgKG1fY2xpZW50LndpbGxEZXN0cm95UGFnZSkKLSAg
ICAgICAgbV9jbGllbnQud2lsbERlc3Ryb3lQYWdlKHRvUmVmKHRoaXMpLCB0b1JlZihwYWdlKSwg
bV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2Vp
dmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSU9iamVjdCogbWVzc2FnZUJv
ZHkpCi17Ci0gICAgaWYgKG1fY2xpZW50LmRpZFJlY2VpdmVNZXNzYWdlKQotICAgICAgICBtX2Ns
aWVudC5kaWRSZWNlaXZlTWVzc2FnZSh0b1JlZih0aGlzKSwgdG9SZWYobWVzc2FnZU5hbWUuaW1w
bCgpKSwgdG9SZWYobWVzc2FnZUJvZHkpLCBtX2NsaWVudC5jbGllbnRJbmZvKTsKLX0KLQotdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiog
Y29ubmVjdGlvbiwgQ29yZUlQQzo6TWVzc2FnZUlEIG1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1l
bnREZWNvZGVyKiBhcmd1bWVudHMpCi17Ci0gICAgc3dpdGNoIChtZXNzYWdlSUQuZ2V0PEluamVj
dGVkQnVuZGxlTWVzc2FnZTo6S2luZD4oKSkgewotICAgICAgICBjYXNlIEluamVjdGVkQnVuZGxl
TWVzc2FnZTo6UG9zdE1lc3NhZ2U6IHsKLSAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlTmFtZTsg
ICAgICAgICAgICAKLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IG1lc3NhZ2VCb2R5Owot
ICAgICAgICAgICAgUG9zdE1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VDb2RlcihtZXNzYWdlQm9keSk7
Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChtZXNzYWdl
TmFtZSwgbWVzc2FnZUNvZGVyKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
ICAgICBkaWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Citwcm90ZWN0ZWQ6CisgICAgVXNlck1lc3Nh
Z2VEZWNvZGVyKFJlZlB0cjxBUElPYmplY3Q+JiByb290KQorICAgICAgICA6IG1fcm9vdChyb290
KQorICAgIHsKICAgICB9CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KKyAgICBSZWZQ
dHI8QVBJT2JqZWN0PiYgbV9yb290OworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4
OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQy
L1VJUHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkocmV2aXNpb24gNjY2NzkpCisrKyBXZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAiUnVuTG9v
cC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZXNzYWdlS2luZHMuaCIKKyNpbmNsdWRlICJXZWJD
b250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKICNpbmNsdWRlICJXZWJQYWdlTmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAiV2ViUHJlZmVy
ZW5jZXMuaCIKQEAgLTUwLDEyMyArNTEsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQg
dHJ5IHRvIGFic3RyYWN0IG91dCB0aGUgc2hhcmVkIGxvZ2ljIGZyb20gdGhlc2UgYW5kCi0vLyBh
bmQgdGhlIFBvc3RNZXNzYWdlRW5jb2Rlci9Qb3N0TWVzc2FnZURlY29kZXJzIGluIEluamVjdGVk
QnVuZGxlLmNwcCBpbnRvCi0vLyBhIHNoYXJlZCBiYXNlY2xhc3MuCi0KLS8vIEVuY29kZXMgcG9z
dE1lc3NhZ2UgbWVzc2FnZXMgZnJvbSB0aGUgVUlQcm9jZXNzIC0+IEluamVjdGVkQnVuZGxlCi0K
LS8vICAgLSBBcnJheSAtPiBBcnJheQotLy8gICAtIFN0cmluZyAtPiBTdHJpbmcKLS8vICAgLSBQ
YWdlIC0+IEJ1bmRsZVBhZ2UKLQotY2xhc3MgUG9zdE1lc3NhZ2VFbmNvZGVyIHsKLXB1YmxpYzoK
LSAgICBQb3N0TWVzc2FnZUVuY29kZXIoQVBJT2JqZWN0KiByb290KSAKLSAgICAgICAgOiBtX3Jv
b3Qocm9vdCkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBlbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdCAKLSAgICB7Ci0gICAgICAgIEFQSU9iamVjdDo6VHlw
ZSB0eXBlID0gbV9yb290LT50eXBlKCk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNf
Y2FzdDx1aW50MzJfdD4odHlwZSkpOwotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAg
Y2FzZSBBUElPYmplY3Q6OlR5cGVBcnJheTogewotICAgICAgICAgICAgSW1tdXRhYmxlQXJyYXkq
IGFycmF5ID0gc3RhdGljX2Nhc3Q8SW1tdXRhYmxlQXJyYXkqPihtX3Jvb3QpOwotICAgICAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJheS0+c2l6ZSgpKSk7
Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoUG9zdE1lc3NhZ2VFbmNvZGVyKGFycmF5
LT5hdChpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBB
UElPYmplY3Q6OlR5cGVTdHJpbmc6IHsKLSAgICAgICAgICAgIFdlYlN0cmluZyogc3RyaW5nID0g
c3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4obV9yb290KTsKLSAgICAgICAgICAgIGVuY29kZXItPmVu
Y29kZShzdHJpbmctPnN0cmluZygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlUGFnZTogewotICAgICAgICAgICAgV2ViUGFnZVBy
b3h5KiBwYWdlID0gc3RhdGljX2Nhc3Q8V2ViUGFnZVByb3h5Kj4obV9yb290KTsKLSAgICAgICAg
ICAgIGVuY29kZXItPmVuY29kZShwYWdlLT5wYWdlSUQoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBBUElPYmplY3QqIG1fcm9vdDsKLX07Ci0KLS8vIERlY29kZXMgcG9zdE1lc3NhZ2UgbWVz
c2FnZXMgZ29pbmcgZnJvbSB0aGUgSW5qZWN0ZWRCdW5kbGUgLT4gVUlQcm9jZXNzIAotCi0vLyAg
IC0gQXJyYXkgLT4gQXJyYXkKLS8vICAgLSBTdHJpbmcgLT4gU3RyaW5nCi0vLyAgIC0gQnVuZGxl
UGFnZSAtPiBQYWdlCi0KLWNsYXNzIFBvc3RNZXNzYWdlRGVjb2RlciB7Ci1wdWJsaWM6Ci0gICAg
UG9zdE1lc3NhZ2VEZWNvZGVyKFJlZlB0cjxBUElPYmplY3Q+JiByb290LCBXZWJDb250ZXh0KiBj
b250ZXh0KQotICAgICAgICA6IG1fcm9vdChyb290KQotICAgICAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJn
dW1lbnREZWNvZGVyKiBkZWNvZGVyLCBQb3N0TWVzc2FnZURlY29kZXImIGNvZGVyKQotICAgIHsK
LSAgICAgICAgdWludDMyX3QgdHlwZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodHlw
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgc3dpdGNoICh0eXBlKSB7
Ci0gICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlQXJyYXk6IHsKLSAgICAgICAgICAgIHVpbnQ2
NF90IHNpemU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShzaXplKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFZlY3Rv
cjxSZWZQdHI8QVBJT2JqZWN0PiA+IHZlY3RvcjsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEFQSU9iamVjdD4g
ZWxlbWVudDsKLSAgICAgICAgICAgICAgICBQb3N0TWVzc2FnZURlY29kZXIgbWVzc2FnZUNvZGVy
KGVsZW1lbnQsIGNvZGVyLm1fY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUobWVzc2FnZUNvZGVyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoZWxlbWVudC5yZWxlYXNlKCkpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBJbW11dGFibGVBcnJheTo6
YWRvcHQodmVjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQVBJT2JqZWN0OjpUeXBlU3RyaW5nOiB7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyaW5nOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBXZWJTdHJpbmc6OmNy
ZWF0ZShzdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBBUElPYmplY3Q6OlR5cGVCdW5kbGVQYWdlOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBwYWdl
SUQ7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYWdlSUQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IGNvZGVyLm1f
Y29udGV4dC0+cHJvY2VzcygpLT53ZWJQYWdlKHBhZ2VJRCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi1wcml2YXRlOgotICAg
IFJlZlB0cjxBUElPYmplY3Q+JiBtX3Jvb3Q7Ci0gICAgV2ViQ29udGV4dCogbV9jb250ZXh0Owot
fTsKLQotfQotCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIFdURjo6UmVmQ291bnRlZExlYWtDb3Vu
dGVyIHdlYkNvbnRleHRDb3VudGVyKCJXZWJDb250ZXh0Iik7CiAjZW5kaWYKQEAgLTMxOCw3ICsy
MDIsNyBAQCB2b2lkIFdlYkNvbnRleHQ6OnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1CiAKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJldHVybmluZyBmYWxzZSBmcm9tIHRoaXMgZnVu
Y3Rpb24gaWYgdGhlIG1lc3NhZ2VCb2R5IGNhbm5vdAogICAgIC8vIGJlIGVuY29kZWQuCi0gICAg
bV9wcm9jZXNzLT5zZW5kKEluamVjdGVkQnVuZGxlTWVzc2FnZTo6UG9zdE1lc3NhZ2UsIDAsIENv
cmVJUEM6OkluKG1lc3NhZ2VOYW1lLCBQb3N0TWVzc2FnZUVuY29kZXIobWVzc2FnZUJvZHkpKSk7
CisgICAgbV9wcm9jZXNzLT5zZW5kKEluamVjdGVkQnVuZGxlTWVzc2FnZTo6UG9zdE1lc3NhZ2Us
IDAsIENvcmVJUEM6OkluKG1lc3NhZ2VOYW1lLCBXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVy
KG1lc3NhZ2VCb2R5KSkpOwogfQogCiAvLyBJbmplY3RlZEJ1bmRsZSBjbGllbnQKQEAgLTQwNyw4
ICsyOTEsOCBAQCB2b2lkIFdlYkNvbnRleHQ6OmRpZFJlY2VpdmVNZXNzYWdlKENvcmVJCiAgICAg
ICAgIGNhc2UgV2ViQ29udGV4dE1lc3NhZ2U6OlBvc3RNZXNzYWdlOiB7CiAgICAgICAgICAgICBT
dHJpbmcgbWVzc2FnZU5hbWU7CiAgICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiBtZXNzYWdl
Qm9keTsKLSAgICAgICAgICAgIFBvc3RNZXNzYWdlRGVjb2RlciBtZXNzYWdlQ29kZXIobWVzc2Fn
ZUJvZHksIHRoaXMpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBD
OjpPdXQobWVzc2FnZU5hbWUsIG1lc3NhZ2VDb2RlcikpKQorICAgICAgICAgICAgV2ViQ29udGV4
dFVzZXJNZXNzYWdlRGVjb2RlciBtZXNzYWdlRGVjb2RlcihtZXNzYWdlQm9keSwgdGhpcyk7Cisg
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2RlKENvcmVJUEM6Ok91dChtZXNzYWdlTmFt
ZSwgbWVzc2FnZURlY29kZXIpKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
ICAgIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VOYW1lLCBtZXNz
YWdlQm9keS5nZXQoKSk7CkluZGV4OiBVSVByb2Nlc3MvV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29k
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVUlQcm9jZXNzL1dlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVy
cy5oCShyZXZpc2lvbiA2NjY3OSkJKGZyb20gVUlQcm9jZXNzL1dlYkNvbnRleHQuY3BwOjY2Njc5
KQorKysgVUlQcm9jZXNzL1dlYkNvbnRleHRVc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5nIGNv
cHkpCkluZGV4OiBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0VXNlck1lc3NhZ2VD
b2RlcnMuaAkocmV2aXNpb24gNjY2MzcpCisrKyBXZWJLaXQyL1VJUHJvY2Vzcy9XZWJDb250ZXh0
VXNlck1lc3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDkgKzIzLDIxIEBACiAg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgIlVzZXJN
ZXNzYWdlQ29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiSW1t
dXRhYmxlQXJyYXkuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oIgot
I2luY2x1ZGUgIlJ1bkxvb3AuaCIKLSNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSAiV2ViUGFnZU5h
bWVzcGFjZS5oIgotI2luY2x1ZGUgIldlYlByZWZlcmVuY2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJv
Y2Vzc01hbmFnZXIuaCIKLSNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZUtpbmRzLmgiCi0jaW5j
bHVkZSAiV2ViUHJvY2Vzc1Byb3h5LmgiCi0jaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgotCi0jaW5jbHVkZSAiV0tDb250ZXh0UHJp
dmF0ZS5oIgotCi0jaW5jbHVkZSA8V2ViQ29yZS9MaW5rSGFzaC5oPgotCi0jaWZuZGVmIE5ERUJV
RwotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KLSNlbmRpZgotCi11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKyNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRv
IGFic3RyYWN0IG91dCB0aGUgc2hhcmVkIGxvZ2ljIGZyb20gdGhlc2UgYW5kCi0vLyBhbmQgdGhl
IFBvc3RNZXNzYWdlRW5jb2Rlci9Qb3N0TWVzc2FnZURlY29kZXJzIGluIEluamVjdGVkQnVuZGxl
LmNwcCBpbnRvCi0vLyBhIHNoYXJlZCBiYXNlY2xhc3MuCi0KLS8vIEVuY29kZXMgcG9zdE1lc3Nh
Z2UgbWVzc2FnZXMgZnJvbSB0aGUgVUlQcm9jZXNzIC0+IEluamVjdGVkQnVuZGxlCi0KLS8vICAg
LSBBcnJheSAtPiBBcnJheQotLy8gICAtIFN0cmluZyAtPiBTdHJpbmcKLS8vICAgLSBQYWdlIC0+
IEJ1bmRsZVBhZ2UKKy8vIEFkZHMKKy8vIC0gUGFnZSAtPiBCdW5kbGVQYWdlCiAKLWNsYXNzIFBv
c3RNZXNzYWdlRW5jb2RlciB7CitjbGFzcyBXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyIDog
cHVibGljIFVzZXJNZXNzYWdlRW5jb2RlcjxXZWJDb250ZXh0VXNlck1lc3NhZ2VFbmNvZGVyPiB7
CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VFbmNvZGVyKEFQSU9iamVjdCogcm9vdCkgCi0gICAg
ICAgIDogbV9yb290KHJvb3QpCisgICAgdHlwZWRlZiBVc2VyTWVzc2FnZUVuY29kZXI8V2ViQ29u
dGV4dFVzZXJNZXNzYWdlRW5jb2Rlcj4gQmFzZTsKKworICAgIFdlYkNvbnRleHRVc2VyTWVzc2Fn
ZUVuY29kZXIoQVBJT2JqZWN0KiByb290KSAKKyAgICAgICAgOiBCYXNlKHJvb3QpCiAgICAgewog
ICAgIH0KIApAQCAtNzMsMTkgKzQ1LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFQSU9i
amVjdDo6VHlwZSB0eXBlID0gbV9yb290LT50eXBlKCk7CiAgICAgICAgIGVuY29kZXItPmVuY29k
ZShzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZSkpOworCisgICAgICAgIGlmIChiYXNlRW5jb2Rl
KGVuY29kZXIsIHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIHN3aXRjaCAo
dHlwZSkgewotICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZUFycmF5OiB7Ci0gICAgICAgICAg
ICBJbW11dGFibGVBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxJbW11dGFibGVBcnJheSo+KG1f
cm9vdCk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KGFycmF5LT5zaXplKCkpKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJy
YXktPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGVuY29kZXItPmVuY29kZShQb3N0TWVz
c2FnZUVuY29kZXIoYXJyYXktPmF0KGkpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZVN0cmluZzogewotICAgICAgICAgICAgV2Vi
U3RyaW5nKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcqPihtX3Jvb3QpOwotICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0cmluZy0+c3RyaW5nKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVQYWdlOiB7CiAgICAg
ICAgICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSBzdGF0aWNfY2FzdDxXZWJQYWdlUHJveHkqPiht
X3Jvb3QpOwogICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhZ2UtPnBhZ2VJRCgpKTsKQEAg
LTk2LDU2ICs2MCw0MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBBUElPYmplY3QqIG1fcm9vdDsKIH07CiAKLS8vIERlY29k
ZXMgcG9zdE1lc3NhZ2UgbWVzc2FnZXMgZ29pbmcgZnJvbSB0aGUgSW5qZWN0ZWRCdW5kbGUgLT4g
VUlQcm9jZXNzIAotCi0vLyAgIC0gQXJyYXkgLT4gQXJyYXkKLS8vICAgLSBTdHJpbmcgLT4gU3Ry
aW5nCi0vLyAgIC0gQnVuZGxlUGFnZSAtPiBQYWdlCisvLyBBZGRzCisvLyAgIC0gUGFnZSAtPiBC
dW5kbGVQYWdlCiAKLWNsYXNzIFBvc3RNZXNzYWdlRGVjb2RlciB7CitjbGFzcyBXZWJDb250ZXh0
VXNlck1lc3NhZ2VEZWNvZGVyIDogcHVibGljIFVzZXJNZXNzYWdlRGVjb2RlcjxXZWJDb250ZXh0
VXNlck1lc3NhZ2VEZWNvZGVyPiB7CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VEZWNvZGVyKFJl
ZlB0cjxBUElPYmplY3Q+JiByb290LCBXZWJDb250ZXh0KiBjb250ZXh0KQotICAgICAgICA6IG1f
cm9vdChyb290KQorICAgIHR5cGVkZWYgVXNlck1lc3NhZ2VEZWNvZGVyPFdlYkNvbnRleHRVc2Vy
TWVzc2FnZURlY29kZXI+IEJhc2U7CisKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVy
KFJlZlB0cjxBUElPYmplY3Q+JiByb290LCBXZWJDb250ZXh0KiBjb250ZXh0KQorICAgICAgICA6
IEJhc2Uocm9vdCkKICAgICAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICB7CiAgICAgfQog
Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgUG9zdE1lc3NhZ2VEZWNvZGVyJiBjb2RlcikKKyAgICBXZWJDb250ZXh0VXNlck1lc3NhZ2VE
ZWNvZGVyKFdlYkNvbnRleHRVc2VyTWVzc2FnZURlY29kZXImIHVzZXJNZXNzYWdlRGVjb2RlZCwg
UmVmUHRyPEFQSU9iamVjdD4mIHJvb3QpCisgICAgICAgIDogQmFzZShyb290KQorICAgICAgICAs
IG1fY29udGV4dCh1c2VyTWVzc2FnZURlY29kZWQubV9jb250ZXh0KQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBXZWJDb250ZXh0VXNlck1lc3NhZ2VEZWNvZGVyJiBjb2RlcikKICAgICB7CiAgICAgICAgIHVp
bnQzMl90IHR5cGU7CiAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHR5cGUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBj
YXNlIEFQSU9iamVjdDo6VHlwZUFycmF5OiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBzaXplOwot
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc2l6ZSkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWZWN0b3I8UmVmUHRyPEFQ
SU9iamVjdD4gPiB2ZWN0b3I7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNp
emU7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+IGVsZW1lbnQ7Ci0g
ICAgICAgICAgICAgICAgUG9zdE1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VDb2RlcihlbGVtZW50LCBj
b2Rlci5tX2NvbnRleHQpOwotICAgICAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1l
c3NhZ2VDb2RlcikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgICAgICB2ZWN0b3IuYXBwZW5kKGVsZW1lbnQucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgaWYgKCFCYXNlOjpiYXNlRGVjb2RlKGRlY29kZXIsIGNvZGVyLCBzdGF0aWNfY2Fz
dDxBUElPYmplY3Q6OlR5cGU+KHR5cGUpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAgICAgY29kZXIubV9yb290ID0gSW1tdXRhYmxlQXJyYXk6OmFkb3B0KHZlY3Rvcik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFQSU9iamVjdDo6
VHlwZVN0cmluZzogewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZzsKLSAgICAgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKHN0cmluZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAgICAgY29kZXIubV9yb290ID0gV2ViU3RyaW5nOjpjcmVhdGUoc3RyaW5nKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIC8vIElmIHRoZSBiYXNlIGRl
Y29kZWQgc29tZXRoaW5nIGludG8gcm9vdCwgd2UgYXJlIGRvbmUuCisgICAgICAgIGlmIChjb2Rl
ci5tX3Jvb3QpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKICAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVCdW5kbGVQYWdlOiB7CiAgICAgICAg
ICAgICB1aW50NjRfdCBwYWdlSUQ7CiAgICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShw
YWdlSUQpKQpAQCAtMTYxLDI2MiArMTEwLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToK
LSAgICBSZWZQdHI8QVBJT2JqZWN0PiYgbV9yb290OwogICAgIFdlYkNvbnRleHQqIG1fY29udGV4
dDsKIH07CiAKLX0KLQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBXVEY6OlJlZkNvdW50ZWRMZWFr
Q291bnRlciB3ZWJDb250ZXh0Q291bnRlcigiV2ViQ29udGV4dCIpOwotI2VuZGlmCi0KLVdlYkNv
bnRleHQqIFdlYkNvbnRleHQ6OnNoYXJlZFByb2Nlc3NDb250ZXh0KCkKLXsKLSAgICBSdW5Mb29w
Ojppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICBzdGF0aWMgV2ViQ29udGV4dCogY29udGV4
dCA9IGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0KFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFyeVBy
b2Nlc3MsIFN0cmluZygpKSkubGVha1JlZigpOwotICAgIHJldHVybiBjb250ZXh0OwotfQotCi1X
ZWJDb250ZXh0KiBXZWJDb250ZXh0OjpzaGFyZWRUaHJlYWRDb250ZXh0KCkKLXsKLSAgICBSdW5M
b29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKLSAgICBzdGF0aWMgV2ViQ29udGV4dCogY29u
dGV4dCA9IGFkb3B0UmVmKG5ldyBXZWJDb250ZXh0KFByb2Nlc3NNb2RlbFNoYXJlZFNlY29uZGFy
eVRocmVhZCwgU3RyaW5nKCkpKS5sZWFrUmVmKCk7Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0K
LVBhc3NSZWZQdHI8V2ViQ29udGV4dD4gV2ViQ29udGV4dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYg
aW5qZWN0ZWRCdW5kbGVQYXRoKQotewotICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9v
cCgpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViQ29udGV4dChQcm9jZXNzTW9kZWxTZWNv
bmRhcnlQcm9jZXNzLCBpbmplY3RlZEJ1bmRsZVBhdGgpKTsKLX0KLSAgICAKLVdlYkNvbnRleHQ6
OldlYkNvbnRleHQoUHJvY2Vzc01vZGVsIHByb2Nlc3NNb2RlbCwgY29uc3QgV1RGOjpTdHJpbmcm
IGluamVjdGVkQnVuZGxlUGF0aCkKLSAgICA6IG1fcHJvY2Vzc01vZGVsKHByb2Nlc3NNb2RlbCkK
LSAgICAsIG1faW5qZWN0ZWRCdW5kbGVQYXRoKGluamVjdGVkQnVuZGxlUGF0aCkKLSAgICAsIG1f
dmlzaXRlZExpbmtQcm92aWRlcih0aGlzKQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAsIG1fc2hv
dWxkUGFpbnROYXRpdmVDb250cm9scyh0cnVlKQotI2VuZGlmCi17Ci0gICAgUnVuTG9vcDo6aW5p
dGlhbGl6ZU1haW5SdW5Mb29wKCk7Ci0KLSAgICBtX3ByZWZlcmVuY2VzID0gV2ViUHJlZmVyZW5j
ZXM6OnNoYXJlZCgpOwotICAgIG1fcHJlZmVyZW5jZXMtPmFkZENvbnRleHQodGhpcyk7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgd2ViQ29udGV4dENvdW50ZXIuaW5jcmVtZW50KCk7Ci0jZW5kaWYK
LX0KLQotV2ViQ29udGV4dDo6fldlYkNvbnRleHQoKQotewotICAgIEFTU0VSVChtX3BhZ2VOYW1l
c3BhY2VzLmlzRW1wdHkoKSk7Ci0gICAgbV9wcmVmZXJlbmNlcy0+cmVtb3ZlQ29udGV4dCh0aGlz
KTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICB3ZWJDb250ZXh0Q291bnRlci5kZWNyZW1lbnQoKTsK
LSNlbmRpZgotfQotCi12b2lkIFdlYkNvbnRleHQ6OmluaXRpYWxpemVJbmplY3RlZEJ1bmRsZUNs
aWVudChjb25zdCBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudCogY2xpZW50KQotewotICAg
IG1faW5qZWN0ZWRCdW5kbGVDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwotfQotCi12b2lkIFdl
YkNvbnRleHQ6OmluaXRpYWxpemVIaXN0b3J5Q2xpZW50KGNvbnN0IFdLQ29udGV4dEhpc3RvcnlD
bGllbnQqIGNsaWVudCkKLXsKLSAgICBtX2hpc3RvcnlDbGllbnQuaW5pdGlhbGl6ZShjbGllbnQp
OwotICAgIAotICAgIGlmICghaGFzVmFsaWRQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgbV9wcm9jZXNzLT5zZW5kKFdlYlByb2Nlc3NNZXNzYWdlOjpTZXRTaG91bGRU
cmFja1Zpc2l0ZWRMaW5rcywgMCwgQ29yZUlQQzo6SW4obV9oaXN0b3J5Q2xpZW50LnNob3VsZFRy
YWNrVmlzaXRlZExpbmtzKCkpKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjplbnN1cmVXZWJQcm9j
ZXNzKCkKLXsKLSAgICBpZiAoaGFzVmFsaWRQcm9jZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcHJvY2VzcyA9IFdlYlByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5nZXRXZWJQcm9jZXNz
KHRoaXMpOwotCi0gICAgbV9wcm9jZXNzLT5zZW5kKFdlYlByb2Nlc3NNZXNzYWdlOjpTZXRTaG91
bGRUcmFja1Zpc2l0ZWRMaW5rcywgMCwgQ29yZUlQQzo6SW4obV9oaXN0b3J5Q2xpZW50LnNob3Vs
ZFRyYWNrVmlzaXRlZExpbmtzKCkpKTsKLQotICAgIGZvciAoSGFzaFNldDxTdHJpbmc+OjppdGVy
YXRvciBpdCA9IG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0VtcHR5RG9jdW1lbnQuYmVnaW4oKSwgZW5k
ID0gbV9zY2hlbWVzVG9SZWdpc3RlckFzRW1wdHlEb2N1bWVudC5lbmQoKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICBtX3Byb2Nlc3MtPnNlbmQoV2ViUHJvY2Vzc01lc3NhZ2U6OlJlZ2lzdGVy
VVJMU2NoZW1lQXNFbXB0eURvY3VtZW50LCAwLCBDb3JlSVBDOjpJbigqaXQpKTsKLQotICAgIHBs
YXRmb3JtU2V0VXBXZWJQcm9jZXNzKCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cHJvY2Vzc0Rp
ZEZpbmlzaExhdW5jaGluZyhXZWJQcm9jZXNzUHJveHkqIHByb2Nlc3MpCi17Ci0gICAgLy8gRklY
TUU6IE9uY2Ugd2Ugc3VwcG9ydCBtdWx0aXBsZSBwcm9jZXNzZXMgcGVyIGNvbnRleHQsIHRoaXMg
YXNzZXJ0aW9uIHdvbid0IGhvbGQuCi0gICAgQVNTRVJUKHByb2Nlc3MgPT0gbV9wcm9jZXNzKTsK
LQotICAgIG1fdmlzaXRlZExpbmtQcm92aWRlci5wb3B1bGF0ZVZpc2l0ZWRMaW5rc0lmTmVlZGVk
KCk7Ci19Ci0KLVdlYlBhZ2VQcm94eSogV2ViQ29udGV4dDo6Y3JlYXRlV2ViUGFnZShXZWJQYWdl
TmFtZXNwYWNlKiBwYWdlTmFtZXNwYWNlKQotewotICAgIGVuc3VyZVdlYlByb2Nlc3MoKTsKLSAg
ICByZXR1cm4gbV9wcm9jZXNzLT5jcmVhdGVXZWJQYWdlKHBhZ2VOYW1lc3BhY2UpOwotfQotCi12
b2lkIFdlYkNvbnRleHQ6OnJldml2ZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBlbnN1cmVXZWJQcm9j
ZXNzKCk7Ci19Ci0KLVdlYlBhZ2VOYW1lc3BhY2UqIFdlYkNvbnRleHQ6OmNyZWF0ZVBhZ2VOYW1l
c3BhY2UoKQotewotICAgIFJlZlB0cjxXZWJQYWdlTmFtZXNwYWNlPiBwYWdlTmFtZXNwYWNlID0g
V2ViUGFnZU5hbWVzcGFjZTo6Y3JlYXRlKHRoaXMpOwotICAgIG1fcGFnZU5hbWVzcGFjZXMuYWRk
KHBhZ2VOYW1lc3BhY2UuZ2V0KCkpOwotICAgIHJldHVybiBwYWdlTmFtZXNwYWNlLnJlbGVhc2Uo
KS5yZWxlYXNlUmVmKCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cGFnZU5hbWVzcGFjZVdhc0Rl
c3Ryb3llZChXZWJQYWdlTmFtZXNwYWNlKiBwYWdlTmFtZXNwYWNlKQotewotICAgIEFTU0VSVCht
X3BhZ2VOYW1lc3BhY2VzLmNvbnRhaW5zKHBhZ2VOYW1lc3BhY2UpKTsKLSAgICBtX3BhZ2VOYW1l
c3BhY2VzLnJlbW92ZShwYWdlTmFtZXNwYWNlKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpzZXRQ
cmVmZXJlbmNlcyhXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMpCi17Ci0gICAgQVNTRVJUKHBy
ZWZlcmVuY2VzKTsKLQotICAgIGlmIChwcmVmZXJlbmNlcyA9PSBtX3ByZWZlcmVuY2VzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3ByZWZlcmVuY2VzLT5yZW1vdmVDb250ZXh0KHRoaXMpOwot
ICAgIG1fcHJlZmVyZW5jZXMgPSBwcmVmZXJlbmNlczsKLSAgICBtX3ByZWZlcmVuY2VzLT5hZGRD
b250ZXh0KHRoaXMpOwotCi0gICAgLy8gRklYTUU6IFVwZGF0ZSBhbGwgUGFnZXMvUGFnZU5hbWVz
cGFjZSB3aXRoIHRoZSBuZXcgV2ViUHJlZmVyZW5jZXMuCi19Ci0KLVdlYlByZWZlcmVuY2VzKiBX
ZWJDb250ZXh0OjpwcmVmZXJlbmNlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcHJlZmVyZW5j
ZXMuZ2V0KCk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6cHJlZmVyZW5jZXNEaWRDaGFuZ2UoKQot
ewotICAgIGlmICghbV9wcm9jZXNzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKEhhc2hT
ZXQ8V2ViUGFnZU5hbWVzcGFjZSo+OjppdGVyYXRvciBpdCA9IG1fcGFnZU5hbWVzcGFjZXMuYmVn
aW4oKSwgZW5kID0gbV9wYWdlTmFtZXNwYWNlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0g
ICAgICAgIFdlYlBhZ2VOYW1lc3BhY2UqIHBhZ2VOYW1lc3BhY2UgPSAqaXQ7Ci0gICAgICAgIHBh
Z2VOYW1lc3BhY2UtPnByZWZlcmVuY2VzRGlkQ2hhbmdlKCk7Ci0gICAgfQotfQotCi12b2lkIFdl
YkNvbnRleHQ6OnBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2VOYW1lLCBBUElPYmplY3QqIG1lc3NhZ2VCb2R5KQotewotICAgIGlmICghaGFzVmFsaWRQcm9j
ZXNzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lk
ZXIgcmV0dXJuaW5nIGZhbHNlIGZyb20gdGhpcyBmdW5jdGlvbiBpZiB0aGUgbWVzc2FnZUJvZHkg
Y2Fubm90Ci0gICAgLy8gYmUgZW5jb2RlZC4KLSAgICBtX3Byb2Nlc3MtPnNlbmQoSW5qZWN0ZWRC
dW5kbGVNZXNzYWdlOjpQb3N0TWVzc2FnZSwgMCwgQ29yZUlQQzo6SW4obWVzc2FnZU5hbWUsIFBv
c3RNZXNzYWdlRW5jb2RlcihtZXNzYWdlQm9keSkpKTsKLX0KLQotLy8gSW5qZWN0ZWRCdW5kbGUg
Y2xpZW50Ci0KLXZvaWQgV2ViQ29udGV4dDo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJT2JqZWN0KiBtZXNzYWdlQm9keSkK
LXsKLSAgICBtX2luamVjdGVkQnVuZGxlQ2xpZW50LmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKHRoaXMsIG1lc3NhZ2VOYW1lLCBtZXNzYWdlQm9keSk7Ci19Ci0KLS8vIEhpc3Rv
cnlDbGllbnQKLQotdm9pZCBXZWJDb250ZXh0OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YShXZWJGcmFtZVByb3h5KiBmcmFtZSwgY29uc3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYgc3Rv
cmUpIAotewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLSAgICBtX2hpc3RvcnlDbGllbnQu
ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEodGhpcywgZnJhbWUtPnBhZ2UoKSwgc3RvcmUs
IGZyYW1lKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qo
V2ViRnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKQotewotICAgIEFTU0VSVChmcmFtZS0+cGFn
ZSgpKTsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KHRoaXMs
IGZyYW1lLT5wYWdlKCksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZy
YW1lKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2Vi
RnJhbWVQcm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKQotewotICAgIEFTU0VSVChmcmFtZS0+cGFnZSgp
KTsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KHRoaXMsIGZy
YW1lLT5wYWdlKCksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGZyYW1l
KTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2ViRnJhbWVQ
cm94eSogZnJhbWUsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgdXJsKQotewot
ICAgIEFTU0VSVChmcmFtZS0+cGFnZSgpKTsKLSAgICBtX2hpc3RvcnlDbGllbnQuZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKHRoaXMsIGZyYW1lLT5wYWdlKCksIHRpdGxlLCB1cmwsIGZyYW1lKTsKLX0K
LQotdm9pZCBXZWJDb250ZXh0Ojpwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpCi17Ci0gICAgbV9oaXN0
b3J5Q2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzKHRoaXMpOwotfQotCi12b2lkIFdlYkNvbnRl
eHQ6OmdldFN0YXRpc3RpY3MoV0tDb250ZXh0U3RhdGlzdGljcyogc3RhdGlzdGljcykKLXsKLSAg
ICBtZW1zZXQoc3RhdGlzdGljcywgMCwgc2l6ZW9mKFdLQ29udGV4dFN0YXRpc3RpY3MpKTsKLQot
ICAgIHN0YXRpc3RpY3MtPm51bWJlck9mV0tQYWdlTmFtZXNwYWNlcyA9IG1fcGFnZU5hbWVzcGFj
ZXMuc2l6ZSgpOwotCi0gICAgZm9yIChIYXNoU2V0PFdlYlBhZ2VOYW1lc3BhY2UqPjo6aXRlcmF0
b3IgaXQgPSBtX3BhZ2VOYW1lc3BhY2VzLmJlZ2luKCksIGVuZCA9IG1fcGFnZU5hbWVzcGFjZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmdldFN0YXRpc3RpY3Moc3Rh
dGlzdGljcyk7Ci19Ci0KLXZvaWQgV2ViQ29udGV4dDo6c2V0QWRkaXRpb25hbFBsdWdpbnNEaXJl
Y3RvcnkoY29uc3QgV1RGOjpTdHJpbmcmIGRpcmVjdG9yeSkKLXsKLSAgICBWZWN0b3I8U3RyaW5n
PiBkaXJlY3RvcmllczsKLSAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKLQotICAg
IG1fcGx1Z2luSW5mb1N0b3JlLnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMoZGlyZWN0
b3JpZXMpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OnJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURv
Y3VtZW50KGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQotewotICAgIG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc0VtcHR5RG9jdW1lbnQuYWRkKHVybFNjaGVtZSk7Ci0KLSAgICBpZiAoIWhhc1ZhbGlkUHJv
Y2VzcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Byb2Nlc3MtPnNlbmQoV2ViUHJvY2Vz
c01lc3NhZ2U6OlJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50LCAwLCBDb3JlSVBDOjpJ
bih1cmxTY2hlbWUpKTsKLX0KLQotdm9pZCBXZWJDb250ZXh0OjphZGRWaXNpdGVkTGluayhjb25z
dCBTdHJpbmcmIHZpc2l0ZWRVUkwpCi17Ci0gICAgaWYgKHZpc2l0ZWRVUkwuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBMaW5rSGFzaCBsaW5rSGFzaCA9IHZpc2l0ZWRMaW5rSGFz
aCh2aXNpdGVkVVJMLmNoYXJhY3RlcnMoKSwgdmlzaXRlZFVSTC5sZW5ndGgoKSk7Ci0gICAgYWRk
VmlzaXRlZExpbmsobGlua0hhc2gpOwotfQotCi12b2lkIFdlYkNvbnRleHQ6OmFkZFZpc2l0ZWRM
aW5rKExpbmtIYXNoIGxpbmtIYXNoKQotewotICAgIG1fdmlzaXRlZExpbmtQcm92aWRlci5hZGRW
aXNpdGVkTGluayhsaW5rSGFzaCk7Ci19Ci0gICAgICAgIAotdm9pZCBXZWJDb250ZXh0OjpkaWRS
ZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBDb3JlSVBDOjpN
ZXNzYWdlSUQgbWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGFyZ3VtZW50cykK
LXsKLSAgICBzd2l0Y2ggKG1lc3NhZ2VJRC5nZXQ8V2ViQ29udGV4dE1lc3NhZ2U6OktpbmQ+KCkp
IHsKLSAgICAgICAgY2FzZSBXZWJDb250ZXh0TWVzc2FnZTo6UG9zdE1lc3NhZ2U6IHsKLSAgICAg
ICAgICAgIFN0cmluZyBtZXNzYWdlTmFtZTsKLSAgICAgICAgICAgIFJlZlB0cjxBUElPYmplY3Q+
IG1lc3NhZ2VCb2R5OwotICAgICAgICAgICAgUG9zdE1lc3NhZ2VEZWNvZGVyIG1lc3NhZ2VDb2Rl
cihtZXNzYWdlQm9keSwgdGhpcyk7Ci0gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy0+ZGVjb2Rl
KENvcmVJUEM6Ok91dChtZXNzYWdlTmFtZSwgbWVzc2FnZUNvZGVyKSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDY2Njc2KQorKysgV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsOSBAQAogCQlC
Q0IwQUVFQTEyMkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rpb25hcnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMEFFRTgxMjJGNTNFMzAw
QjEzNDFFIC8qIE11dGFibGVEaWN0aW9uYXJ5LmNwcCAqLzsgfTsKIAkJQkNCMEFGMzUxMjMwMURG
QjAwQjEzNDFFIC8qIFdLTXV0YWJsZURpY3Rpb25hcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjBBRjMzMTIzMDFERkIwMEIxMzQxRSAvKiBXS011
dGFibGVEaWN0aW9uYXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwogCQlCQ0IwQUYzNjEyMzAxREZCMDBCMTM0MUUgLyogV0tNdXRhYmxlRGljdGlvbmFy
eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Iw
QUYzNDEyMzAxREZCMDBCMTM0MUUgLyogV0tNdXRhYmxlRGljdGlvbmFyeS5jcHAgKi87IH07CisJ
CUJDQjBCMERDMTIzMDVBMjUwMEIxMzQxRSAvKiBXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQjBCMERC
MTIzMDVBMjUwMEIxMzQxRSAvKiBXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCAqLzsgfTsK
KwkJQkNCMEIwREUxMjMwNUE4QzAwQjEzNDFFIC8qIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VD
b2RlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
QjBCMEREMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJz
LmggKi87IH07CisJCUJDQjBCMEUwMTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNvZGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMEIw
REYxMjMwNUFCMTAwQjEzNDFFIC8qIFVzZXJNZXNzYWdlQ29kZXJzLmggKi87IH07CiAJCUJDQjI4
Q0MwMTIwMjMzRDkwMDdEOTlCQyAvKiBJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCMjhDQkYxMjAyMzNE
OTAwN0Q5OUJDIC8qIEluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmggKi87IH07CiAJCUJDQjYz
NDc4MTE2QkYxMDYwMDYwMzIxNSAvKiBXZWJLaXQyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0I2MzQ3NzExNkJGMTA2MDA2MDMyMTUgLyogV2ViS2l0
Mi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJQkNC
NzM0NkUxMUNFRTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNCNzM0NkQxMUNF
RTNGRjAwRUM1MDAyIC8qIFdlYlByb2Nlc3NQcm94eU1lc3NhZ2VLaW5kcy5oICovOyB9OwpAQCAt
NjE4LDYgKzYyMSw5IEBACiAJCUJDQjBBRUU4MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGlj
dGlvbmFyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNdXRhYmxl
RGljdGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjBBRjMzMTIz
MDFERkIwMEIxMzQxRSAvKiBXS011dGFibGVEaWN0aW9uYXJ5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLTXV0YWJsZURpY3Rpb25hcnkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNCMEFGMzQxMjMwMURGQjAwQjEzNDFFIC8qIFdLTXV0YWJsZURpY3Rpb25h
cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0tNdXRhYmxlRGlj
dGlvbmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQjBCMERCMTIzMDVB
MjUwMEIxMzQxRSAvKiBXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dFVzZXJNZXNzYWdlQ29kZXJzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDQjBCMEREMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmpl
Y3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VDb2RlcnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNCMEIwREYxMjMwNUFCMTAwQjEzNDFFIC8qIFVzZXJNZXNzYWdlQ29k
ZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJNZXNzYWdlQ29kZXJz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQjI4Q0JGMTIwMjMzRDkwMDdEOTlC
QyAvKiBJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbmplY3RlZEJ1bmRsZU1lc3NhZ2VLaW5kcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCQ0I2MzQ3NzExNkJGMTA2MDA2MDMyMTUgLyogV2ViS2l0Mi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXQyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDQjczNDZEMTFDRUUzRkYwMEVDNTAwMiAvKiBXZWJQcm9jZXNzUHJveHlN
ZXNzYWdlS2luZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViUHJvY2Vz
c1Byb3h5TWVzc2FnZUtpbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTEs
NiArOTE3LDcgQEAKIAkJCQlCQ0IwQUVFODEyMkY1M0UzMDBCMTM0MUUgLyogTXV0YWJsZURpY3Rp
b25hcnkuY3BwICovLAogCQkJCUJDQjBBRUU3MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGlj
dGlvbmFyeS5oICovLAogCQkJCUJDQzU3MTYxMTE1QURCNDIwMDFDQ0FGOSAvKiBOb3RJbXBsZW1l
bnRlZC5oICovLAorCQkJCUJDQjBCMERGMTIzMDVBQjEwMEIxMzQxRSAvKiBVc2VyTWVzc2FnZUNv
ZGVycy5oICovLAogCQkJCTFBMEYyOUM5MTIwQjM3MTYwMDUzRDFCOSAvKiBWaXNpdGVkTGlua1Rh
YmxlLmNwcCAqLywKIAkJCQkxQTBGMjlDQTEyMEIzNzE2MDA1M0QxQjkgLyogVmlzaXRlZExpbmtU
YWJsZS5oICovLAogCQkJCUJDMUREN0IxMTE0REMzOTYwMDVBREFGMyAvKiBXZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCAqLywKQEAgLTEwNzMsNiArMTA4MCw3IEBACiAJCQkJQkNCOUUyNDExMTIwREFD
QTAwQTEzN0UwIC8qIFdlYkNvbnRleHQuaCAqLywKIAkJCQlCQ0RFMDU5QTExQ0RBOEFFMDBFNDFB
RjEgLyogV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCAqLywKIAkJCQlCQ0RFMDU5
OTExQ0RBOEFFMDBFNDFBRjEgLyogV2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xpZW50LmggKi8s
CisJCQkJQkNCMEIwREIxMjMwNUEyNTAwQjEzNDFFIC8qIFdlYkNvbnRleHRVc2VyTWVzc2FnZUNv
ZGVycy5oICovLAogCQkJCUJDRTQ2OTRGMTIxNEU2Q0IwMDBCOThFQiAvKiBXZWJGb3JtQ2xpZW50
LmNwcCAqLywKIAkJCQlCQ0U0Njk1MDEyMTRFNkNCMDAwQjk4RUIgLyogV2ViRm9ybUNsaWVudC5o
ICovLAogCQkJCUJDRTQ2OTUxMTIxNEU2Q0IwMDBCOThFQiAvKiBXZWJGb3JtU3VibWlzc2lvbkxp
c3RlbmVyUHJveHkuY3BwICovLApAQCAtMTI2NSw2ICsxMjczLDcgQEAKIAkJCQlCQ0E4QzZBRTEx
RTNDMDg3MDA4MTJGQjcgLyogSW5qZWN0ZWRCdW5kbGVQYWdlVUlDbGllbnQuaCAqLywKIAkJCQlC
QzE0REY3NjEyMEI1Qjc5MDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5jcHAg
Ki8sCiAJCQkJQkMxNERGNzUxMjBCNUI3OTAwODI2QzBDIC8qIEluamVjdGVkQnVuZGxlU2NyaXB0
V29ybGQuaCAqLywKKwkJCQlCQ0IwQjBERDEyMzA1QThDMDBCMTM0MUUgLyogSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUNvZGVycy5oICovLAogCQkJKTsKIAkJCXBhdGggPSBJbmplY3RlZEJ1bmRs
ZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNTg0LDYgKzE1OTMsOSBAQAogCQkJ
CUJDQjBBRDM0MTIyRjI4NTgwMEIxMzQxRSAvKiBNdXRhYmxlQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDQjBBRUU5MTIyRjUzRTMwMEIxMzQxRSAvKiBNdXRhYmxlRGljdGlvbmFyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkNCMEFGMzUxMjMwMURGQjAwQjEzNDFFIC8qIFdLTXV0YWJsZURp
Y3Rpb25hcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQjBCMERDMTIzMDVBMjUwMEIxMzQxRSAv
KiBXZWJDb250ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDQjBC
MERFMTIzMDVBOEMwMEIxMzQxRSAvKiBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlCQ0IwQjBFMDEyMzA1QUIxMDBCMTM0MUUgLyogVXNlck1lc3Nh
Z2VDb2RlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCShyZXZpc2lvbiA2NjY3OSkK
KysrIFdlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJJbW11dGFibGVBcnJh
eS5oIgogI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCiAjaW5jbHVkZSAi
SW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIgorI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlVXNl
ck1lc3NhZ2VDb2RlcnMuaCIKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKICNpbmNsdWRlICJXS0J1
bmRsZUFQSUNhc3QuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0TWVzc2FnZUtpbmRzLmgiCkBAIC01
MCwxMjIgKzUxLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYktpdCB7
CiAKLW5hbWVzcGFjZSB7Ci0KLS8vIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIGFic3RyYWN0IG91
dCB0aGUgc2hhcmVkIGxvZ2ljIGZyb20gdGhlc2UgYW5kCi0vLyBhbmQgdGhlIFBvc3RNZXNzYWdl
RW5jb2Rlci9Qb3N0TWVzc2FnZURlY29kZXJzIGluIFdlYkNvbnRleHQuY3BwIGludG8KLS8vIGEg
c2hhcmVkIGJhc2VjbGFzcy4KLQotLy8gRW5jb2RlcyBwb3N0TWVzc2FnZSBtZXNzYWdlcyBmcm9t
IHRoZSBJbmplY3RlZEJ1bmRsZSAtPiBVSVByb2Nlc3MKLQotLy8gICAtIEFycmF5IC0+IEFycmF5
Ci0vLyAgIC0gU3RyaW5nIC0+IFN0cmluZwotLy8gICAtIEJ1bmRsZVBhZ2UgLT4gUGFnZQotCi1j
bGFzcyBQb3N0TWVzc2FnZUVuY29kZXIgewotcHVibGljOgotICAgIFBvc3RNZXNzYWdlRW5jb2Rl
cihBUElPYmplY3QqIHJvb3QpIAotICAgICAgICA6IG1fcm9vdChyb290KQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqIGVuY29kZXIpIGNv
bnN0IAotICAgIHsKLSAgICAgICAgQVBJT2JqZWN0OjpUeXBlIHR5cGUgPSBtX3Jvb3QtPnR5cGUo
KTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQzMl90Pih0eXBlKSk7
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZUFy
cmF5OiB7Ci0gICAgICAgICAgICBJbW11dGFibGVBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxJ
bW11dGFibGVBcnJheSo+KG1fcm9vdCk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KGFycmF5LT5zaXplKCkpKTsKLSAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYXJyYXktPnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShQb3N0TWVzc2FnZUVuY29kZXIoYXJyYXktPmF0KGkpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFQSU9iamVjdDo6VHlwZVN0cmluZzog
ewotICAgICAgICAgICAgV2ViU3RyaW5nKiBzdHJpbmcgPSBzdGF0aWNfY2FzdDxXZWJTdHJpbmcq
PihtX3Jvb3QpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0cmluZy0+c3RyaW5nKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBUElPYmplY3Q6
OlR5cGVCdW5kbGVQYWdlOiB7Ci0gICAgICAgICAgICBXZWJQYWdlKiBwYWdlID0gc3RhdGljX2Nh
c3Q8V2ViUGFnZSo+KG1fcm9vdCk7Ci0gICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUocGFnZS0+
cGFnZUlEKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQVBJT2JqZWN0KiBtX3Jvb3Q7Ci19
OwotCi0KLS8vIERlY29kZXMgcG9zdE1lc3NhZ2UgbWVzc2FnZXMgZ29pbmcgZnJvbSB0aGUgVUlQ
cm9jZXNzIC0+IEluamVjdGVkQnVuZGxlCi0KLS8vICAgLSBBcnJheSAtPiBBcnJheQotLy8gICAt
IFN0cmluZyAtPiBTdHJpbmcKLS8vICAgLSBQYWdlIC0+IEJ1bmRsZVBhZ2UKLQotY2xhc3MgUG9z
dE1lc3NhZ2VEZWNvZGVyIHsKLXB1YmxpYzoKLSAgICBQb3N0TWVzc2FnZURlY29kZXIoUmVmUHRy
PEFQSU9iamVjdD4mIHJvb3QpCi0gICAgICAgIDogbV9yb290KHJvb3QpCi0gICAgewotICAgIH0K
LQotICAgIHN0YXRpYyBib29sIGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIFBvc3RNZXNzYWdlRGVjb2RlciYgY29kZXIpCi0gICAgewotICAgICAgICB1aW50MzJfdCB0
eXBlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh0eXBlKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBBUElP
YmplY3Q6OlR5cGVBcnJheTogewotICAgICAgICAgICAgdWludDY0X3Qgc2l6ZTsKLSAgICAgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNpemUpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUElPYmplY3Q+ID4gdmVjdG9yOwot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiBlbGVtZW50OwotICAgICAgICAgICAgICAgIFBvc3RN
ZXNzYWdlRGVjb2RlciBtZXNzYWdlQ29kZXIoZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUobWVzc2FnZUNvZGVyKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHZlY3Rvci5hcHBlbmQoZWxlbWVudC5yZWxlYXNl
KCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBJbW11dGFi
bGVBcnJheTo6YWRvcHQodmVjdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlU3RyaW5nOiB7Ci0gICAgICAgICAgICBTdHJpbmcg
c3RyaW5nOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc3RyaW5nKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjb2Rlci5tX3Jvb3QgPSBXZWJT
dHJpbmc6OmNyZWF0ZShzdHJpbmcpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVQYWdlOiB7Ci0gICAgICAgICAgICB1aW50NjRfdCBw
YWdlSUQ7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZShwYWdlSUQpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvZGVyLm1fcm9vdCA9IFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2UocGFnZUlEKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVm
UHRyPEFQSU9iamVjdD4mIG1fcm9vdDsKLX07Ci0KLX0KLQogSW5qZWN0ZWRCdW5kbGU6OkluamVj
dGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICA6IG1fcGF0aChwYXRoKQogICAgICwg
bV9wbGF0Zm9ybUJ1bmRsZSgwKQpAQCAtMTg3LDcgKzcyLDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZTo6aW5pdGlhbGl6ZUNsaWVudChXSwogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUElPYmplY3QqIG1lc3NhZ2VCb2R5KQogewot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb24oKS0+c2VuZChXZWJDb250ZXh0TWVz
c2FnZTo6UG9zdE1lc3NhZ2UsIDAsIENvcmVJUEM6OkluKG1lc3NhZ2VOYW1lLCBQb3N0TWVzc2Fn
ZUVuY29kZXIobWVzc2FnZUJvZHkpKSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29ubmVj
dGlvbigpLT5zZW5kKFdlYkNvbnRleHRNZXNzYWdlOjpQb3N0TWVzc2FnZSwgMCwgQ29yZUlQQzo6
SW4obWVzc2FnZU5hbWUsIEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyKG1lc3NhZ2VC
b2R5KSkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRM
aW5rcyhib29sIHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQpAQCAtMzA3LDggKzE5Miw4IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJlY2VpdmVNZXNzYWdlKEMKICAgICAgICAgY2FzZSBJbmpl
Y3RlZEJ1bmRsZU1lc3NhZ2U6OlBvc3RNZXNzYWdlOiB7CiAgICAgICAgICAgICBTdHJpbmcgbWVz
c2FnZU5hbWU7ICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiBtZXNz
YWdlQm9keTsKLSAgICAgICAgICAgIFBvc3RNZXNzYWdlRGVjb2RlciBtZXNzYWdlQ29kZXIobWVz
c2FnZUJvZHkpOwotICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpP
dXQobWVzc2FnZU5hbWUsIG1lc3NhZ2VDb2RlcikpKQorICAgICAgICAgICAgSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZURlY29kZXIgbWVzc2FnZURlY29kZXIobWVzc2FnZUJvZHkpOworICAgICAg
ICAgICAgaWYgKCFhcmd1bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQobWVzc2FnZU5hbWUsIG1l
c3NhZ2VEZWNvZGVyKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICBk
aWRSZWNlaXZlTWVzc2FnZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwpJbmRleDog
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZVVzZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9uIDY2Njc5KQkoZnJvbSBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcDo2NjY3OSkKKysrIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUNvZGVycy5oCSh3b3JraW5nIGNv
cHkpCkluZGV4OiBXZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVVc2VyTWVzc2FnZUNvZGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlQ29kZXJzLmgJKHJldmlzaW9u
IDY2NjM3KQorKysgV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlVXNlck1lc3NhZ2VDb2RlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsNDkgKzIzLDIxIEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlLmgiCi0KLSNpbmNsdWRlICJBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJJbW11
dGFibGVBcnJheS5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlTWVzc2FnZUtpbmRzLmgiCi0j
aW5jbHVkZSAiSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZC5oIgotI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgotI2luY2x1ZGUgIldLQnVuZGxlQVBJQ2FzdC5oIgotI2luY2x1ZGUgIldlYkNvbnRleHRN
ZXNzYWdlS2luZHMuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNs
dWRlICJVc2VyTWVzc2FnZUNvZGVycy5oIgogI2luY2x1ZGUgIldlYlBhZ2UuaCIKLSNpbmNsdWRl
ICJXZWJQcmVmZXJlbmNlc1N0b3JlLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0pTTG9jay5oPgotI2luY2x1ZGUgPFdlYkNvcmUvR0NDb250cm9s
bGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9KU0RPTVdpbmRvdy5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZUdyb3VwLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUg
PHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci11c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotbmFtZXNwYWNlIHsKLQot
Ly8gRklYTUU6IFdlIHNob3VsZCB0cnkgdG8gYWJzdHJhY3Qgb3V0IHRoZSBzaGFyZWQgbG9naWMg
ZnJvbSB0aGVzZSBhbmQKLS8vIGFuZCB0aGUgUG9zdE1lc3NhZ2VFbmNvZGVyL1Bvc3RNZXNzYWdl
RGVjb2RlcnMgaW4gV2ViQ29udGV4dC5jcHAgaW50bwotLy8gYSBzaGFyZWQgYmFzZWNsYXNzLgot
Ci0vLyBFbmNvZGVzIHBvc3RNZXNzYWdlIG1lc3NhZ2VzIGZyb20gdGhlIEluamVjdGVkQnVuZGxl
IC0+IFVJUHJvY2VzcwotCi0vLyAgIC0gQXJyYXkgLT4gQXJyYXkKLS8vICAgLSBTdHJpbmcgLT4g
U3RyaW5nCi0vLyAgIC0gQnVuZGxlUGFnZSAtPiBQYWdlCisvLyBBZGRzCisvLyAtIEJ1bmRsZVBh
Z2UgLT4gUGFnZQogCi1jbGFzcyBQb3N0TWVzc2FnZUVuY29kZXIgeworY2xhc3MgSW5qZWN0ZWRC
dW5kbGVVc2VyTWVzc2FnZUVuY29kZXIgOiBwdWJsaWMgVXNlck1lc3NhZ2VFbmNvZGVyPEluamVj
dGVkQnVuZGxlVXNlck1lc3NhZ2VFbmNvZGVyPiB7CiBwdWJsaWM6Ci0gICAgUG9zdE1lc3NhZ2VF
bmNvZGVyKEFQSU9iamVjdCogcm9vdCkgCi0gICAgICAgIDogbV9yb290KHJvb3QpCisgICAgdHlw
ZWRlZiBVc2VyTWVzc2FnZUVuY29kZXI8SW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZUVuY29kZXI+
IEJhc2U7CisKKyAgICBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRW5jb2RlcihBUElPYmplY3Qq
IHJvb3QpIAorICAgICAgICA6IEJhc2Uocm9vdCkKICAgICB7CiAgICAgfQogCkBAIC03MywxOSAr
NDUsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgQVBJT2JqZWN0OjpUeXBlIHR5cGUgPSBt
X3Jvb3QtPnR5cGUoKTsKICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih0eXBlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoYmFzZUVuY29kZShlbmNvZGVyLCB0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKLSAg
ICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVBcnJheTogewotICAgICAgICAgICAgSW1tdXRhYmxl
QXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SW1tdXRhYmxlQXJyYXkqPihtX3Jvb3QpOwotICAg
ICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihhcnJheS0+c2l6
ZSgpKSk7Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgICAgICBlbmNvZGVyLT5lbmNvZGUoUG9zdE1lc3NhZ2VFbmNvZGVy
KGFycmF5LT5hdChpKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBUElPYmplY3Q6OlR5cGVTdHJpbmc6IHsKLSAgICAgICAgICAgIFdlYlN0cmluZyogc3Ry
aW5nID0gc3RhdGljX2Nhc3Q8V2ViU3RyaW5nKj4obV9yb290KTsKLSAgICAgICAgICAgIGVuY29k
ZXItPmVuY29kZShzdHJpbmctPnN0cmluZygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9CiAgICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlQnVuZGxlUGFnZTogewogICAgICAgICAg
ICAgV2ViUGFnZSogcGFnZSA9IHN0YXRpY19jYXN0PFdlYlBhZ2UqPihtX3Jvb3QpOwogICAgICAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlKHBhZ2UtPnBhZ2VJRCgpKTsKQEAgLTk2LDU2ICs2MCwzOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLQotcHJpdmF0
ZToKLSAgICBBUElPYmplY3QqIG1fcm9vdDsKIH07CiAKLQotLy8gRGVjb2RlcyBwb3N0TWVzc2Fn
ZSBtZXNzYWdlcyBnb2luZyBmcm9tIHRoZSBVSVByb2Nlc3MgLT4gSW5qZWN0ZWRCdW5kbGUKLQot
Ly8gICAtIEFycmF5IC0+IEFycmF5Ci0vLyAgIC0gU3RyaW5nIC0+IFN0cmluZworLy8gQWRkcwog
Ly8gICAtIFBhZ2UgLT4gQnVuZGxlUGFnZQogCi1jbGFzcyBQb3N0TWVzc2FnZURlY29kZXIgewor
Y2xhc3MgSW5qZWN0ZWRCdW5kbGVVc2VyTWVzc2FnZURlY29kZXIgOiBwdWJsaWMgVXNlck1lc3Nh
Z2VEZWNvZGVyPEluamVjdGVkQnVuZGxlVXNlck1lc3NhZ2VEZWNvZGVyPiB7CiBwdWJsaWM6Ci0g
ICAgUG9zdE1lc3NhZ2VEZWNvZGVyKFJlZlB0cjxBUElPYmplY3Q+JiByb290KQotICAgICAgICA6
IG1fcm9vdChyb290KQorICAgIHR5cGVkZWYgVXNlck1lc3NhZ2VEZWNvZGVyPEluamVjdGVkQnVu
ZGxlVXNlck1lc3NhZ2VEZWNvZGVyPiBCYXNlOworCisgICAgSW5qZWN0ZWRCdW5kbGVVc2VyTWVz
c2FnZURlY29kZXIoUmVmUHRyPEFQSU9iamVjdD4mIHJvb3QpCisgICAgICAgIDogQmFzZShyb290
KQorICAgIHsKKyAgICB9CisKKyAgICBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRGVjb2RlcihJ
bmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRGVjb2RlciYsIFJlZlB0cjxBUElPYmplY3Q+JiByb290
KQorICAgICAgICA6IEJhc2Uocm9vdCkKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wg
ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUG9zdE1lc3NhZ2VEZWNv
ZGVyJiBjb2RlcikKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBJbmplY3RlZEJ1bmRsZVVzZXJNZXNzYWdlRGVjb2RlciYgY29kZXIpCiAg
ICAgewogICAgICAgICB1aW50MzJfdCB0eXBlOwogICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZSh0eXBlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICAgICAgY2FzZSBBUElPYmplY3Q6OlR5cGVBcnJheTogewotICAgICAgICAgICAg
dWludDY0X3Qgc2l6ZTsKLSAgICAgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNpemUpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFCYXNlOjpiYXNlRGVj
b2RlKGRlY29kZXIsIGNvZGVyLCBzdGF0aWNfY2FzdDxBUElPYmplY3Q6OlR5cGU+KHR5cGUpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxB
UElPYmplY3Q+ID4gdmVjdG9yOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8QVBJT2JqZWN0PiBlbGVtZW50Owot
ICAgICAgICAgICAgICAgIFBvc3RNZXNzYWdlRGVjb2RlciBtZXNzYWdlQ29kZXIoZWxlbWVudCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobWVzc2FnZUNvZGVyKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIHZlY3Rvci5h
cHBlbmQoZWxlbWVudC5yZWxlYXNlKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAvLyBJZiB0
aGUgYmFzZSBjcmVhdGVkIHNvbWV0aGluZyBpbiByb290LCB3ZSBhcmUgZG9uZS4KKyAgICAgICAg
aWYgKGNvZGVyLm1fcm9vdCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgICAg
ICBjb2Rlci5tX3Jvb3QgPSBJbW11dGFibGVBcnJheTo6YWRvcHQodmVjdG9yKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQVBJT2JqZWN0OjpUeXBlU3RyaW5n
OiB7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoc3RyaW5nKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICBjb2Rlci5tX3Jvb3QgPSBXZWJTdHJpbmc6OmNyZWF0ZShzdHJpbmcpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNh
c2UgQVBJT2JqZWN0OjpUeXBlUGFnZTogewogICAgICAgICAgICAgdWludDY0X3QgcGFnZUlEOwog
ICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUocGFnZUlEKSkKQEAgLTE1OSwxNjQgKzEw
Niw2IEBAIHB1YmxpYzoKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0KLXByaXZhdGU6
Ci0gICAgUmVmUHRyPEFQSU9iamVjdD4mIG1fcm9vdDsKIH07CiAKLX0KLQotSW5qZWN0ZWRCdW5k
bGU6OkluamVjdGVkQnVuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLSAgICA6IG1fcGF0aChwYXRo
KQotICAgICwgbV9wbGF0Zm9ybUJ1bmRsZSgwKQotewotICAgIGluaXRpYWxpemVDbGllbnQoMCk7
Ci19Ci0KLUluamVjdGVkQnVuZGxlOjp+SW5qZWN0ZWRCdW5kbGUoKQotewotfQotCi12b2lkIElu
amVjdGVkQnVuZGxlOjppbml0aWFsaXplQ2xpZW50KFdLQnVuZGxlQ2xpZW50KiBjbGllbnQpCi17
Ci0gICAgaWYgKGNsaWVudCAmJiAhY2xpZW50LT52ZXJzaW9uKQotICAgICAgICBtX2NsaWVudCA9
ICpjbGllbnQ7Ci0gICAgZWxzZQotICAgICAgICBtZW1zZXQoJm1fY2xpZW50LCAwLCBzaXplb2Yo
bV9jbGllbnQpKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJT2JqZWN0KiBtZXNzYWdlQm9keSkKLXsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uKCktPnNlbmQoV2ViQ29udGV4dE1lc3NhZ2U6OlBv
c3RNZXNzYWdlLCAwLCBDb3JlSVBDOjpJbihtZXNzYWdlTmFtZSwgUG9zdE1lc3NhZ2VFbmNvZGVy
KG1lc3NhZ2VCb2R5KSkpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRTaG91bGRUcmFj
a1Zpc2l0ZWRMaW5rcyhib29sIHNob3VsZFRyYWNrVmlzaXRlZExpbmtzKQotewotICAgIFBhZ2VH
cm91cDo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3Moc2hvdWxkVHJhY2tWaXNpdGVkTGlua3Mp
OwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQotewot
ICAgIFBhZ2VHcm91cDo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCk7Ci19Ci0KLXZvaWQgSW5qZWN0
ZWRCdW5kbGU6Om92ZXJyaWRlWFNTQXVkaXRvckVuYWJsZWRGb3JUZXN0UnVubmVyKGJvb2wgZW5h
YmxlZCkKLXsKLSAgICAvLyBPdmVycmlkZSB0aGUgcHJlZmVyZW5jZSBmb3IgYWxsIGZ1dHVyZSBw
YWdlcy4KLSAgICBXZWJQcmVmZXJlbmNlc1N0b3JlOjpvdmVycmlkZVhTU0F1ZGl0b3JFbmFibGVk
Rm9yVGVzdFJ1bm5lcihlbmFibGVkKTsKLQotICAgIC8vIENoYW5nZSB0aGUgc2V0dGluZyBmb3Ig
ZXhpc3Rpbmcgb25lcy4KLSAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBXZWJQcm9j
ZXNzOjpzaGFyZWRQYWdlR3JvdXAoKS0+cGFnZXMoKTsKLQotICAgIGZvciAoSGFzaFNldDxQYWdl
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwYWdlcy5iZWdpbigpOyBpdGVyICE9IHBhZ2VzLmVuZCgpOyAr
K2l0ZXIpCi0gICAgICAgICgqaXRlciktPnNldHRpbmdzKCktPnNldFhTU0F1ZGl0b3JFbmFibGVk
KGVuYWJsZWQpOwotfQotCi0KLXN0YXRpYyBQYXNzT3duUHRyPFZlY3RvcjxTdHJpbmc+ID4gdG9T
dHJpbmdWZWN0b3IoSW1tdXRhYmxlQXJyYXkqIHBhdHRlcm5zKQotewotICAgIGlmICghcGF0dGVy
bnMpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgc2l6ZV90IHNpemUgPSAgcGF0dGVybnMtPnNp
emUoKTsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPFN0
cmluZz4qIHBhdHRlcm5zVmVjdG9yID0gbmV3IFZlY3RvcjxTdHJpbmc+OwotICAgIHBhdHRlcm5z
VmVjdG9yLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpemUpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFdlYlN0cmluZyogZW50cnkgPSBwYXR0ZXJu
cy0+YXQ8V2ViU3RyaW5nPihpKTsKLSAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgcGF0
dGVybnNWZWN0b3ItPnVuY2hlY2tlZEFwcGVuZChlbnRyeS0+c3RyaW5nKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gcGF0dGVybnNWZWN0b3I7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmFkZFVz
ZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29ybGQsIGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIHVybCwgSW1tdXRhYmxlQXJyYXkqIHdoaXRlbGlz
dCwgSW1tdXRhYmxlQXJyYXkqIGJsYWNrbGlzdCwgV2ViQ29yZTo6VXNlclNjcmlwdEluamVjdGlv
blRpbWUgaW5qZWN0aW9uVGltZSwgV2ViQ29yZTo6VXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyBp
bmplY3RlZEZyYW1lcykKLXsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWRQYWdlR3JvdXAoKS0+YWRk
VXNlclNjcmlwdFRvV29ybGQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBzb3VyY2UsIEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCB1cmwpLCB0b1N0cmluZ1ZlY3Rvcih3aGl0ZWxpc3QpLCB0b1N0cmlu
Z1ZlY3RvcihibGFja2xpc3QpLCBpbmplY3Rpb25UaW1lLCBpbmplY3RlZEZyYW1lcyk7Ci19Ci0K
LXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVuZGxlU2Ny
aXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiB1cmwsIEltbXV0YWJsZUFycmF5KiB3aGl0ZWxpc3QsIEltbXV0YWJsZUFycmF5KiBibGFja2xp
c3QsIFdlYkNvcmU6OlVzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCi17
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkUGFnZUdyb3VwKCktPmFkZFVzZXJTdHlsZVNoZWV0VG9X
b3JsZChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCksIHNvdXJjZSwgS1VSTChQYXJzZWRVUkxTdHJp
bmcsIHVybCksIHRvU3RyaW5nVmVjdG9yKHdoaXRlbGlzdCksIHRvU3RyaW5nVmVjdG9yKGJsYWNr
bGlzdCksIGluamVjdGVkRnJhbWVzKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6cmVtb3Zl
VXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZVNjcmlwdFdvcmxkKiBzY3JpcHRXb3JsZCwgY29uc3Qg
U3RyaW5nJiB1cmwpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkUGFnZUdyb3VwKCktPnJlbW92
ZVVzZXJTY3JpcHRGcm9tV29ybGQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBLVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsKSk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVzZXJT
dHlsZVNoZWV0KEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkLCBjb25zdCBT
dHJpbmcmIHVybCkKLXsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWRQYWdlR3JvdXAoKS0+cmVtb3Zl
VXNlclN0eWxlU2hlZXRGcm9tV29ybGQoc2NyaXB0V29ybGQtPmNvcmVXb3JsZCgpLCBLVVJMKFBh
cnNlZFVSTFN0cmluZywgdXJsKSk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnJlbW92ZVVz
ZXJTY3JpcHRzKEluamVjdGVkQnVuZGxlU2NyaXB0V29ybGQqIHNjcmlwdFdvcmxkKQotewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZFBhZ2VHcm91cCgpLT5yZW1vdmVVc2VyU2NyaXB0c0Zyb21Xb3Js
ZChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCkpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpy
ZW1vdmVVc2VyU3R5bGVTaGVldHMoSW5qZWN0ZWRCdW5kbGVTY3JpcHRXb3JsZCogc2NyaXB0V29y
bGQpCi17Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkUGFnZUdyb3VwKCktPnJlbW92ZVVzZXJTdHls
ZVNoZWV0c0Zyb21Xb3JsZChzY3JpcHRXb3JsZC0+Y29yZVdvcmxkKCkpOwotfQotCi12b2lkIElu
amVjdGVkQnVuZGxlOjpyZW1vdmVBbGxVc2VyQ29udGVudCgpCi17Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkUGFnZUdyb3VwKCktPnJlbW92ZUFsbFVzZXJDb250ZW50KCk7Ci19Ci0KLXZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKQotewotICAgIGdj
Q29udHJvbGxlcigpLmdhcmJhZ2VDb2xsZWN0Tm93KCk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5k
bGU6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVybmF0ZVRocmVhZEZvckRl
YnVnZ2luZyhib29sIHdhaXRVbnRpbERvbmUpCi17Ci0gICAgZ2NDb250cm9sbGVyKCkuZ2FyYmFn
ZUNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyh3YWl0VW50aWxEb25lKTsKLX0K
LQotc2l6ZV90IEluamVjdGVkQnVuZGxlOjpqYXZhU2NyaXB0T2JqZWN0c0NvdW50KCkKLXsKLSAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIHJldHVybiBKU0RPTVdp
bmRvdzo6Y29tbW9uSlNHbG9iYWxEYXRhKCktPmhlYXAub2JqZWN0Q291bnQoKTsKLX0KLQotdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6ZGlkQ3JlYXRlUGFnZShXZWJQYWdlKiBwYWdlKQotewotICAgIGlm
IChtX2NsaWVudC5kaWRDcmVhdGVQYWdlKQotICAgICAgICBtX2NsaWVudC5kaWRDcmVhdGVQYWdl
KHRvUmVmKHRoaXMpLCB0b1JlZihwYWdlKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZv
aWQgSW5qZWN0ZWRCdW5kbGU6OndpbGxEZXN0cm95UGFnZShXZWJQYWdlKiBwYWdlKQotewotICAg
IGlmIChtX2NsaWVudC53aWxsRGVzdHJveVBhZ2UpCi0gICAgICAgIG1fY2xpZW50LndpbGxEZXN0
cm95UGFnZSh0b1JlZih0aGlzKSwgdG9SZWYocGFnZSksIG1fY2xpZW50LmNsaWVudEluZm8pOwot
fQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2VOYW1lLCBBUElPYmplY3QqIG1lc3NhZ2VCb2R5KQotewotICAgIGlmIChtX2NsaWVu
dC5kaWRSZWNlaXZlTWVzc2FnZSkKLSAgICAgICAgbV9jbGllbnQuZGlkUmVjZWl2ZU1lc3NhZ2Uo
dG9SZWYodGhpcyksIHRvUmVmKG1lc3NhZ2VOYW1lLmltcGwoKSksIHRvUmVmKG1lc3NhZ2VCb2R5
KSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OmRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24sIENvcmVJUEM6Ok1l
c3NhZ2VJRCBtZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogYXJndW1lbnRzKQot
ewotICAgIHN3aXRjaCAobWVzc2FnZUlELmdldDxJbmplY3RlZEJ1bmRsZU1lc3NhZ2U6OktpbmQ+
KCkpIHsKLSAgICAgICAgY2FzZSBJbmplY3RlZEJ1bmRsZU1lc3NhZ2U6OlBvc3RNZXNzYWdlOiB7
Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZU5hbWU7ICAgICAgICAgICAgCi0gICAgICAgICAg
ICBSZWZQdHI8QVBJT2JqZWN0PiBtZXNzYWdlQm9keTsKLSAgICAgICAgICAgIFBvc3RNZXNzYWdl
RGVjb2RlciBtZXNzYWdlQ29kZXIobWVzc2FnZUJvZHkpOwotICAgICAgICAgICAgaWYgKCFhcmd1
bWVudHMtPmRlY29kZShDb3JlSVBDOjpPdXQobWVzc2FnZU5hbWUsIG1lc3NhZ2VDb2RlcikpKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZGlkUmVjZWl2ZU1lc3NhZ2Uo
bWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LmdldCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdDIvd2luL1dlYktpdDIudmNwcm9qCShyZXZpc2lvbiA2NjY3NikKKysrIFdl
YktpdDIvd2luL1dlYktpdDIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NDUsNiArNDQ1LDEw
IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFNoYXJlZFxVc2VyTWVzc2FnZUNvZGVycy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cU2hhcmVkXFZpc2l0ZWRMaW5rVGFibGUuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTgwMyw2ICs4MDcsMTAgQEAKIAkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxXZWJQcm9jZXNzXEluamVjdGVkQnVuZGxlXEluamVjdGVkQnVuZGxlU2NyaXB0V29y
bGQuaCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxXZWJQcm9jZXNzXEluamVjdGVkQnVuZGxlXEluamVjdGVkQnVuZGxlVXNlck1lc3Nh
Z2VDb2RlcnMuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KIAkJCQk8RmlsdGVyDQogCQkJCQlO
YW1lPSJBUEkiDQogCQkJCQk+DQpAQCAtMTEwMSw2ICsxMTA5LDEwIEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJDb250
ZXh0VXNlck1lc3NhZ2VDb2RlcnMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFVJUHJvY2Vzc1xXZWJEYXRhLmgiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQo=
</data>
<flag name="review"
          id="55444"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>