<?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>125024</bug_id>
          
          <creation_ts>2013-11-29 17:49:16 -0800</creation_ts>
          <short_desc>[Cocoa] Add a little template magic to the inline API::Object storage to remove the need for all the reinterpret_casts</short_desc>
          <delta_ts>2013-11-29 18:01:28 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>955037</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 17:49:16 -0800</bug_when>
    <thetext>[Cocoa] Add a little template magic to the inline API::Object storage to remove the need for all the reinterpret_casts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955038</commentid>
    <comment_count>1</comment_count>
      <attachid>218082</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 17:54:37 -0800</bug_when>
    <thetext>Created attachment 218082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955039</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-11-29 18:01:28 -0800</bug_when>
    <thetext>Committed r159881: &lt;http://trac.webkit.org/changeset/159881&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218082</attachid>
            <date>2013-11-29 17:54:37 -0800</date>
            <delta_ts>2013-11-29 17:58:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-125024-20131129175436.patch</filename>
            <type>text/plain</type>
            <size>30413</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1OTg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEzLTExLTI5ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW0NvY29hXSBBZGQgYSBsaXR0bGUgdGVt
cGxhdGUgbWFnaWMgdG8gdGhlIGlubGluZSBBUEk6Ok9iamVjdCBzdG9yYWdlIHRvIHJlbW92ZSB0
aGUgbmVlZCBmb3IgYWxsIHRoZSByZWludGVycHJldF9jYXN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1MDI0CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNlIEFQSTo6T2JqZWN0U3RvcmFn
ZSB3aGljaCB3cmFwcyBzdGQ6OmFsaWduZWRfc3RvcmFnZSBhbmQgYWRkcyBzb21lIGNvbnZlbmll
bmNlIGZ1bmN0aW9ucworICAgICAgICB0byByZWludGVycHJldCB0aGUgZGF0YSBhcyB0aGUgY29y
cmVzcG9uZGluZyB0eXBlLiBEZXBsb3kgaXQgZXZlcnl3aGVyZSB3ZSB3ZXJlIHByZXZpb3VzbHkg
dXNpbmcgCisgICAgICAgIHN0ZDo6YWxpZ25lZF9zdG9yYWdlLgorCisgICAgICAgICogU2hhcmVk
L0NvY29hL1dLTlNBcnJheS5tbToKKyAgICAgICAgKiBTaGFyZWQvQ29jb2EvV0tOU0RpY3Rpb25h
cnkubW06CisgICAgICAgICogU2hhcmVkL0NvY29hL1dLT2JqZWN0Lmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS0JhY2tGb3J3YXJkTGlzdC5tbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQmFja0ZvcndhcmRMaXN0SXRlbS5tbToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlci5tbToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0NvY29hL1dLQnJvd3NpbmdDb250ZXh0R3JvdXAubW06CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EYXRhLm1tOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcm9jZXNzR3JvdXAubW06CisKIDIwMTMtMTEtMjkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggY3Jhc2hpbmcgQVBJIHRlc3RzLgpJ
bmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNBcnJheS5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV0tOU0FycmF5Lm1tCShyZXZpc2lvbiAx
NTk4NzYpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29jb2EvV0tOU0FycmF5Lm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTIgQEAKICNpZiBXS19BUElfRU5BQkxFRAogCiBAaW1w
bGVtZW50YXRpb24gV0tOU0FycmF5IHsKLSAgICBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2Yo
QVBJOjpBcnJheSksIHN0ZDo6YWxpZ25tZW50X29mPEFQSTo6QXJyYXk+Ojp2YWx1ZT46OnR5cGUg
X2FycmF5OworICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxBUEk6OkFycmF5PiBfYXJyYXk7CiB9CiAK
IC0gKHZvaWQpZGVhbGxvYwogewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QVBJOjpBcnJheSo+KCZf
YXJyYXkpLT5+QXJyYXkoKTsKKyAgICBfYXJyYXktPn5BcnJheSgpOwogCiAgICAgW3N1cGVyIGRl
YWxsb2NdOwogfQpAQCAtNDMsMTIgKzQzLDEyIEBAIC0gKHZvaWQpZGVhbGxvYwogCiAtIChOU1VJ
bnRlZ2VyKWNvdW50CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QVBJOjpBcnJheSo+
KCZfYXJyYXkpLT5zaXplKCk7CisgICAgcmV0dXJuIF9hcnJheS0+c2l6ZSgpOwogfQogCiAtIChp
ZClvYmplY3RBdEluZGV4OihOU1VJbnRlZ2VyKWkKIHsKLSAgICBBUEk6Ok9iamVjdCogb2JqZWN0
ID0gcmVpbnRlcnByZXRfY2FzdDxBUEk6OkFycmF5Kj4oJl9hcnJheSktPmF0KGkpOworICAgIEFQ
STo6T2JqZWN0KiBvYmplY3QgPSBfYXJyYXktPmF0KGkpOwogICAgIHJldHVybiBvYmplY3QgPyBv
YmplY3QtPndyYXBwZXIoKSA6IFtOU051bGwgbnVsbF07CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAg
LSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6b25lCiAKIC0gKEFQSTo6T2JqZWN0JilfYXBp
T2JqZWN0CiB7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEFQSTo6QXJyYXkqPigmX2Fy
cmF5KTsKKyAgICByZXR1cm4gKl9hcnJheTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktp
dDIvU2hhcmVkL0NvY29hL1dLTlNEaWN0aW9uYXJ5Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db2NvYS9XS05TRGljdGlvbmFyeS5tbQkocmV2aXNpb24gMTU5ODc2KQor
KysgU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLTlNEaWN0aW9uYXJ5Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zMywxMiArMzMsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIEBp
bXBsZW1lbnRhdGlvbiBXS05TRGljdGlvbmFyeSB7Ci0gICAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8
c2l6ZW9mKEltbXV0YWJsZURpY3Rpb25hcnkpLCBzdGQ6OmFsaWdubWVudF9vZjxJbW11dGFibGVE
aWN0aW9uYXJ5Pjo6dmFsdWU+Ojp0eXBlIF9kaWN0aW9uYXJ5OworICAgIEFQSTo6T2JqZWN0U3Rv
cmFnZTxJbW11dGFibGVEaWN0aW9uYXJ5PiBfZGljdGlvbmFyeTsKIH0KIAogLSAodm9pZClkZWFs
bG9jCiB7Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxJbW11dGFibGVEaWN0aW9uYXJ5Kj4oJl9kaWN0
aW9uYXJ5KS0+fkltbXV0YWJsZURpY3Rpb25hcnkoKTsKKyAgICBfZGljdGlvbmFyeS0+fkltbXV0
YWJsZURpY3Rpb25hcnkoKTsKIAogICAgIFtzdXBlciBkZWFsbG9jXTsKIH0KQEAgLTUzLDcgKzUz
LDcgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoT2JqZWN0czooY29uc3QgaQogCiAtIChOU1VJ
bnRlZ2VyKWNvdW50CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW1tdXRhYmxlRGlj
dGlvbmFyeSo+KCZfZGljdGlvbmFyeSktPnNpemUoKTsKKyAgICByZXR1cm4gX2RpY3Rpb25hcnkt
PnNpemUoKTsKIH0KIAogLSAoaWQpb2JqZWN0Rm9yS2V5OihpZClrZXkKQEAgLTYyLDcgKzYyLDcg
QEAgLSAoaWQpb2JqZWN0Rm9yS2V5OihpZClrZXkKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAg
IGJvb2wgZXhpc3RzOwotICAgIEFQSTo6T2JqZWN0KiB2YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SW1tdXRhYmxlRGljdGlvbmFyeSo+KCZfZGljdGlvbmFyeSktPmdldCgoTlNTdHJpbmcgKilrZXks
IGV4aXN0cyk7CisgICAgQVBJOjpPYmplY3QqIHZhbHVlID0gX2RpY3Rpb25hcnktPmdldCgoTlNT
dHJpbmcgKilrZXksIGV4aXN0cyk7CiAgICAgaWYgKCFleGlzdHMpCiAgICAgICAgIHJldHVybiBu
aWw7CiAKQEAgLTcxLDE3ICs3MSwxNyBAQCAtIChpZClvYmplY3RGb3JLZXk6KGlkKWtleQogCiAt
IChOU0VudW1lcmF0b3IgKilrZXlFbnVtZXJhdG9yCiB7Ci0gICAgcmV0dXJuIFt3cmFwcGVyKCpy
ZWludGVycHJldF9jYXN0PEltbXV0YWJsZURpY3Rpb25hcnkqPigmX2RpY3Rpb25hcnkpLT5rZXlz
KCkpIG9iamVjdEVudW1lcmF0b3JdOworICAgIHJldHVybiBbd3JhcHBlcigqX2RpY3Rpb25hcnkt
PmtleXMoKSkgb2JqZWN0RW51bWVyYXRvcl07CiB9CiAKICNwcmFnbWEgbWFyayBOU0NvcHlpbmcg
cHJvdG9jb2wgaW1wbGVtZW50YXRpb24KIAogLSAoaWQpY29weVdpdGhab25lOihOU1pvbmUgKil6
b25lCiB7Ci0gICAgaWYgKCFyZWludGVycHJldF9jYXN0PEltbXV0YWJsZURpY3Rpb25hcnkqPigm
X2RpY3Rpb25hcnkpLT5pc011dGFibGUoKSkKKyAgICBpZiAoIV9kaWN0aW9uYXJ5LT5pc011dGFi
bGUoKSkKICAgICAgICAgcmV0dXJuIFtzZWxmIHJldGFpbl07CiAKLSAgICBhdXRvIG1hcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SW1tdXRhYmxlRGljdGlvbmFyeSo+KCZfZGljdGlvbmFyeSktPm1hcCgp
OworICAgIGF1dG8gbWFwID0gX2RpY3Rpb25hcnktPm1hcCgpOwogICAgIHJldHVybiBJbW11dGFi
bGVEaWN0aW9uYXJ5OjphZG9wdChtYXApLmxlYWtSZWYoKS0+d3JhcHBlcigpOwogfQogCkBAIC04
OSw3ICs4OSw3IEBAIC0gKGlkKWNvcHlXaXRoWm9uZTooTlNab25lICopem9uZQogCiAtIChBUEk6
Ok9iamVjdCYpX2FwaU9iamVjdAogewotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBUEk6
Ok9iamVjdCo+KCZfZGljdGlvbmFyeSk7CisgICAgcmV0dXJuICpfZGljdGlvbmFyeTsKIH0KIAog
QGVuZApJbmRleDogU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL0NvY29hL1dLT2JqZWN0LmgJKHJldmlzaW9u
IDE1OTg3NikKKysrIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db2NvYS9XS09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw4ICsyNywyMCBAQAogCiAjaWYgV0tfQVBJX0VOQUJMRUQKIAorI2lt
cG9ydCA8dHlwZV90cmFpdHM+CisKIG5hbWVzcGFjZSBBUEkgewogY2xhc3MgT2JqZWN0OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE9iamVjdFN0b3JhZ2UgeworICAgIFQqIGdldCgp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KCZkYXRhKTsgfQorICAgIFQmIG9wZXJhdG9y
KigpIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFQqPigmZGF0YSk7IH0KKyAgICBUKiBvcGVy
YXRvci0+KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oJmRhdGEpOyB9CisKKyAgICB0
eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIHN0ZDo6YWxpZ25tZW50X29m
PFQ+Ojp2YWx1ZT46OnR5cGUgZGF0YTsKK307CisKIH0KIAogQHByb3RvY29sIFdLT2JqZWN0IDxO
U09iamVjdD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCYWNr
Rm9yd2FyZExpc3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS0JhY2tGb3J3YXJkTGlzdC5tbQkocmV2aXNpb24gMTU5ODc2KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0JhY2tGb3J3YXJkTGlzdC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDEyIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBA
aW1wbGVtZW50YXRpb24gV0tCYWNrRm9yd2FyZExpc3QgewotICAgIHN0ZDo6YWxpZ25lZF9zdG9y
YWdlPHNpemVvZihXZWJCYWNrRm9yd2FyZExpc3QpLCBzdGQ6OmFsaWdubWVudF9vZjxXZWJCYWNr
Rm9yd2FyZExpc3Q+Ojp2YWx1ZT46OnR5cGUgX2xpc3Q7CisgICAgQVBJOjpPYmplY3RTdG9yYWdl
PFdlYkJhY2tGb3J3YXJkTGlzdD4gX2xpc3Q7CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwogewotICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0Kj4oJl9saXN0KS0+fldlYkJhY2tG
b3J3YXJkTGlzdCgpOworICAgIF9saXN0LT5+V2ViQmFja0ZvcndhcmRMaXN0KCk7CiAKICAgICBb
c3VwZXIgZGVhbGxvY107CiB9CkBAIC01NCwzNyArNTQsMzcgQEAgc3RhdGljIFdLQmFja0Zvcndh
cmRMaXN0SXRlbSAqdG9XS0JhY2tGbwogCiAtIChXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKiljdXJy
ZW50SXRlbQogewotICAgIHJldHVybiB0b1dLQmFja0ZvcndhcmRMaXN0SXRlbShyZWludGVycHJl
dF9jYXN0PFdlYkJhY2tGb3J3YXJkTGlzdCo+KCZfbGlzdCktPmN1cnJlbnRJdGVtKCkpOworICAg
IHJldHVybiB0b1dLQmFja0ZvcndhcmRMaXN0SXRlbShfbGlzdC0+Y3VycmVudEl0ZW0oKSk7CiB9
CiAKIC0gKFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWJhY2tJdGVtCiB7Ci0gICAgcmV0dXJuIHRv
V0tCYWNrRm9yd2FyZExpc3RJdGVtKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0
Kj4oJl9saXN0KS0+YmFja0l0ZW0oKSk7CisgICAgcmV0dXJuIHRvV0tCYWNrRm9yd2FyZExpc3RJ
dGVtKF9saXN0LT5iYWNrSXRlbSgpKTsKIH0KIAogLSAoV0tCYWNrRm9yd2FyZExpc3RJdGVtICop
Zm9yd2FyZEl0ZW0KIHsKLSAgICByZXR1cm4gdG9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0ocmVpbnRl
cnByZXRfY2FzdDxXZWJCYWNrRm9yd2FyZExpc3QqPigmX2xpc3QpLT5mb3J3YXJkSXRlbSgpKTsK
KyAgICByZXR1cm4gdG9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0oX2xpc3QtPmZvcndhcmRJdGVtKCkp
OwogfQogCiAtIChXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtQXRJbmRleDooTlNJbnRlZ2Vy
KWluZGV4CiB7Ci0gICAgcmV0dXJuIHRvV0tCYWNrRm9yd2FyZExpc3RJdGVtKHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0Kj4oJl9saXN0KS0+aXRlbUF0SW5kZXgoaW5kZXgpKTsK
KyAgICByZXR1cm4gdG9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0oX2xpc3QtPml0ZW1BdEluZGV4KGlu
ZGV4KSk7CiB9CiAKIC0gKE5TVUludGVnZXIpYmFja0xpc3RDb3VudAogewotICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFdlYkJhY2tGb3J3YXJkTGlzdCo+KCZfbGlzdCktPmJhY2tMaXN0Q291
bnQoKTsKKyAgICByZXR1cm4gX2xpc3QtPmJhY2tMaXN0Q291bnQoKTsKIH0KIAogLSAoTlNVSW50
ZWdlcilmb3J3YXJkTGlzdENvdW50CiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
QmFja0ZvcndhcmRMaXN0Kj4oJl9saXN0KS0+Zm9yd2FyZExpc3RDb3VudCgpOworICAgIHJldHVy
biBfbGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOwogfQogCiAtIChOU0FycmF5ICopYmFja0xpc3RX
aXRoTGltaXQ6KE5TVUludGVnZXIpbGltaXQKIHsKLSAgICBSZWZQdHI8QVBJOjpBcnJheT4gbGlz
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0Kj4oJl9saXN0KS0+YmFja0xp
c3RBc0FQSUFycmF5V2l0aExpbWl0KGxpbWl0KTsKKyAgICBSZWZQdHI8QVBJOjpBcnJheT4gbGlz
dCA9IF9saXN0LT5iYWNrTGlzdEFzQVBJQXJyYXlXaXRoTGltaXQobGltaXQpOwogICAgIGlmICgh
bGlzdCkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtOTMsNyArOTMsNyBAQCAtIChOU0FycmF5
ICopYmFja0xpc3RXaXRoTGltaXQ6KE5TVUludGVnCiAKIC0gKE5TQXJyYXkgKilmb3J3YXJkTGlz
dFdpdGhMaW1pdDooTlNVSW50ZWdlcilsaW1pdAogewotICAgIFJlZlB0cjxBUEk6OkFycmF5PiBs
aXN0ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJCYWNrRm9yd2FyZExpc3QqPigmX2xpc3QpLT5mb3J3
YXJkTGlzdEFzQVBJQXJyYXlXaXRoTGltaXQobGltaXQpOworICAgIFJlZlB0cjxBUEk6OkFycmF5
PiBsaXN0ID0gX2xpc3QtPmZvcndhcmRMaXN0QXNBUElBcnJheVdpdGhMaW1pdChsaW1pdCk7CiAg
ICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0xMDQsNyArMTA0LDcgQEAg
LSAoTlNBcnJheSAqKWZvcndhcmRMaXN0V2l0aExpbWl0OihOU1VJbgogCiAtIChBUEk6Ok9iamVj
dCYpX2FwaU9iamVjdAogewotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBUEk6Ok9iamVj
dCo+KCZfbGlzdCk7CisgICAgcmV0dXJuICpfbGlzdDsKIH0KIAogQGVuZApJbmRleDogU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0JhY2tGb3J3YXJkTGlzdEl0ZW0ubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0JhY2tGb3J3
YXJkTGlzdEl0ZW0ubW0JKHJldmlzaW9uIDE1OTg3NikKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tCYWNrRm9yd2FyZExpc3RJdGVtLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywzOSArMzMsMzkgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIEBpbXBsZW1lbnRh
dGlvbiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gewotICAgIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNp
emVvZihXZWJCYWNrRm9yd2FyZExpc3RJdGVtKSwgc3RkOjphbGlnbm1lbnRfb2Y8V2ViQmFja0Zv
cndhcmRMaXN0SXRlbT46OnZhbHVlPjo6dHlwZSBfaXRlbTsKKyAgICBBUEk6Ok9iamVjdFN0b3Jh
Z2U8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4gX2l0ZW07CiB9CiAKIC0gKHZvaWQpZGVhbGxvYwog
ewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0SXRlbSo+KCZfaXRlbSkt
Pn5XZWJCYWNrRm9yd2FyZExpc3RJdGVtKCk7CisgICAgX2l0ZW0tPn5XZWJCYWNrRm9yd2FyZExp
c3RJdGVtKCk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKE5TVVJMICopVVJMCiB7
Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6cmVpbnRlcnByZXRfY2Fz
dDxXZWJCYWNrRm9yd2FyZExpc3RJdGVtKj4oJl9pdGVtKS0+dXJsKCkgcmVsYXRpdmVUb1VSTDpu
aWxdOworICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOl9pdGVtLT51cmwo
KSByZWxhdGl2ZVRvVVJMOm5pbF07CiB9CiAKIC0gKE5TU3RyaW5nICopdGl0bGUKIHsKLSAgICBp
ZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0SXRlbSo+KCZfaXRlbSktPnRp
dGxlKCkpCisgICAgaWYgKCFfaXRlbS0+dGl0bGUoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAot
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qPigmX2l0
ZW0pLT50aXRsZSgpOworICAgIHJldHVybiBfaXRlbS0+dGl0bGUoKTsKIH0KIAogLSAoTlNVUkwg
KilvcmlnaW5hbFVSTAogewotICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5n
OnJlaW50ZXJwcmV0X2Nhc3Q8V2ViQmFja0ZvcndhcmRMaXN0SXRlbSo+KCZfaXRlbSktPm9yaWdp
bmFsVVJMKCkgcmVsYXRpdmVUb1VSTDpuaWxdOworICAgIHJldHVybiBbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOl9pdGVtLT5vcmlnaW5hbFVSTCgpIHJlbGF0aXZlVG9VUkw6bmlsXTsKIH0K
IAogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCiAKIC0gKEFQ
STo6T2JqZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEFQ
STo6T2JqZWN0Kj4oJl9pdGVtKTsKKyAgICByZXR1cm4gKl9pdGVtOwogfQogCiBAZW5kCkBAIC03
NCw3ICs3NCw3IEBAIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiAKIC0gKFdlYktpdDo6V2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYpX2l0ZW0KIHsKLSAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8V2ViQmFja0ZvcndhcmRMaXN0SXRlbSo+KCZfaXRlbSk7CisgICAgcmV0dXJuICpfaXRlbTsK
IH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jy
b3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIubW0JKHJldmlz
aW9uIDE1OTg4MCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tCcm93
c2luZ0NvbnRleHRDb250cm9sbGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcg
QEAgQGludGVyZmFjZSBXS0Jyb3dzaW5nQ29udGV4dENvbnRyb2xsZXIgKAogQGVuZAogCiBAaW1w
bGVtZW50YXRpb24gV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyIHsKLSAgICBzdGQ6OmFsaWdu
ZWRfc3RvcmFnZTxzaXplb2YoV2ViUGFnZVByb3h5KSwgc3RkOjphbGlnbm1lbnRfb2Y8V2ViUGFn
ZVByb3h5Pjo6dmFsdWU+Ojp0eXBlIF9wYWdlOworICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxXZWJQ
YWdlUHJveHk+IF9wYWdlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYWdlTG9hZFN0YXRlT2JzZXJ2
ZXI+IF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXI7CiB9CiAKQEAgLTExOCw4ICsxMTgsOCBAQCBAaW50
ZXJmYWNlIFdLQnJvd3NpbmdDb250ZXh0Q29udHJvbGxlciAoCiAKIC0gKHZvaWQpZGVhbGxvYwog
ewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdlKS0+cGFnZUxvYWRT
dGF0ZSgpLnJlbW92ZU9ic2VydmVyKCpfcGFnZUxvYWRTdGF0ZU9ic2VydmVyKTsKLSAgICByZWlu
dGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSktPn5XZWJQYWdlUHJveHkoKTsKKyAg
ICBfcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnJlbW92ZU9ic2VydmVyKCpfcGFnZUxvYWRTdGF0ZU9i
c2VydmVyKTsKKyAgICBfcGFnZS0+fldlYlBhZ2VQcm94eSgpOwogCiAgICAgW3N1cGVyIGRlYWxs
b2NdOwogfQpAQCAtMTI3LDEyICsxMjcsMTIgQEAgLSAodm9pZClkZWFsbG9jCiAtICh2b2lkKV9m
aW5pc2hJbml0aWFsaXphdGlvbgogewogICAgIF9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPFBhZ2VMb2FkU3RhdGVPYnNlcnZlcj4oc2VsZik7Ci0gICAgcmVpbnRlcnBy
ZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2
ZXIoKl9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIpOworICAgIF9wYWdlLT5wYWdlTG9hZFN0YXRlKCku
YWRkT2JzZXJ2ZXIoKl9wYWdlTG9hZFN0YXRlT2JzZXJ2ZXIpOwogfQogCiAtIChXS1Byb2Nlc3NH
cm91cCAqKXByb2Nlc3NHcm91cAogewotICAgIFdlYkNvbnRleHQqIGNvbnRleHQgPSByZWludGVy
cHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSktPnByb2Nlc3MoKS0+Y29udGV4dCgpOwor
ICAgIFdlYkNvbnRleHQqIGNvbnRleHQgPSBfcGFnZS0+cHJvY2VzcygpLT5jb250ZXh0KCk7CiAg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiB3cmFwcGVy
KCpjb250ZXh0KTsKQEAgLTE0MCw3ICsxNDAsNyBAQCAtIChXS1Byb2Nlc3NHcm91cCAqKXByb2Nl
c3NHcm91cAogCiAtIChXS0Jyb3dzaW5nQ29udGV4dEdyb3VwICopYnJvd3NpbmdDb250ZXh0R3Jv
dXAKIHsKLSAgICBXZWJQYWdlR3JvdXAqIHBhZ2VHcm91cCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
UGFnZVByb3h5Kj4oJl9wYWdlKS0+cGFnZUdyb3VwKCk7CisgICAgV2ViUGFnZUdyb3VwKiBwYWdl
R3JvdXAgPSBfcGFnZS0+cGFnZUdyb3VwKCk7CiAgICAgaWYgKCFwYWdlR3JvdXApCiAgICAgICAg
IHJldHVybiBuaWw7CiAgICAgcmV0dXJuIHdyYXBwZXIoKnBhZ2VHcm91cCk7CkBAIC0xNDgsNyAr
MTQ4LDcgQEAgLSAoV0tCcm93c2luZ0NvbnRleHRHcm91cCAqKWJyb3dzaW5nQ29udAogCiAtIChX
S1BhZ2VSZWYpX3BhZ2VSZWYKIHsKLSAgICByZXR1cm4gdG9BUEkocmVpbnRlcnByZXRfY2FzdDxX
ZWJQYWdlUHJveHkqPigmX3BhZ2UpKTsKKyAgICByZXR1cm4gdG9BUEkoX3BhZ2UuZ2V0KCkpOwog
fQogCiAjcHJhZ21hIG1hcmsgTG9hZGluZwpAQCAtMTg2LDcgKzE4Niw3IEBAIC0gKHZvaWQpbG9h
ZFJlcXVlc3Q6KE5TVVJMUmVxdWVzdCAqKXJlcXUKICAgICBpZiAodXNlckRhdGEpCiAgICAgICAg
IHdrVXNlckRhdGEgPSBPYmpDT2JqZWN0R3JhcGg6OmNyZWF0ZSh1c2VyRGF0YSk7CiAKLSAgICBX
S1BhZ2VMb2FkVVJMUmVxdWVzdFdpdGhVc2VyRGF0YSh0b0FQSShyZWludGVycHJldF9jYXN0PFdl
YlBhZ2VQcm94eSo+KCZfcGFnZSkpLCB3a1JlcXVlc3QuZ2V0KCksIChXS1R5cGVSZWYpd2tVc2Vy
RGF0YS5nZXQoKSk7CisgICAgV0tQYWdlTG9hZFVSTFJlcXVlc3RXaXRoVXNlckRhdGEodG9BUEko
X3BhZ2UuZ2V0KCkpLCB3a1JlcXVlc3QuZ2V0KCksIChXS1R5cGVSZWYpd2tVc2VyRGF0YS5nZXQo
KSk7CiB9CiAKIC0gKHZvaWQpbG9hZEZpbGVVUkw6KE5TVVJMICopVVJMIHJlc3RyaWN0VG9GaWxl
c1dpdGhpbjooTlNVUkwgKilhbGxvd2VkRGlyZWN0b3J5CkBAIC0yMDYsNyArMjA2LDcgQEAgLSAo
dm9pZClsb2FkRmlsZVVSTDooTlNVUkwgKilVUkwgcmVzdHJpYwogICAgIGlmICh1c2VyRGF0YSkK
ICAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNPYmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsK
IAotICAgIFdLUGFnZUxvYWRGaWxlV2l0aFVzZXJEYXRhKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViUGFnZVByb3h5Kj4oJl9wYWdlKSksIHdrVVJMLmdldCgpLCB3a0FsbG93ZWREaXJlY3Rvcnku
Z2V0KCksIChXS1R5cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7CisgICAgV0tQYWdlTG9hZEZpbGVX
aXRoVXNlckRhdGEodG9BUEkoX3BhZ2UuZ2V0KCkpLCB3a1VSTC5nZXQoKSwgd2tBbGxvd2VkRGly
ZWN0b3J5LmdldCgpLCAoV0tUeXBlUmVmKXdrVXNlckRhdGEuZ2V0KCkpOwogfQogCiAtICh2b2lk
KWxvYWRIVE1MU3RyaW5nOihOU1N0cmluZyAqKUhUTUxTdHJpbmcgYmFzZVVSTDooTlNVUkwgKili
YXNlVVJMCkBAIC0yMjgsNyArMjI4LDcgQEAgLSAodm9pZClsb2FkSFRNTFN0cmluZzooTlNTdHJp
bmcgKilIVE1MUwogICAgIGlmICh1c2VyRGF0YSkKICAgICAgICAgd2tVc2VyRGF0YSA9IE9iakNP
YmplY3RHcmFwaDo6Y3JlYXRlKHVzZXJEYXRhKTsKIAotICAgIFdLUGFnZUxvYWRIVE1MU3RyaW5n
V2l0aFVzZXJEYXRhKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdl
KSksIHdrSFRNTFN0cmluZy5nZXQoKSwgd2tCYXNlVVJMLmdldCgpLCAoV0tUeXBlUmVmKXdrVXNl
ckRhdGEuZ2V0KCkpOworICAgIFdLUGFnZUxvYWRIVE1MU3RyaW5nV2l0aFVzZXJEYXRhKHRvQVBJ
KF9wYWdlLmdldCgpKSwgd2tIVE1MU3RyaW5nLmdldCgpLCB3a0Jhc2VVUkwuZ2V0KCksIChXS1R5
cGVSZWYpd2tVc2VyRGF0YS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpbG9hZEFsdGVybmF0ZUhUTUxT
dHJpbmc6KE5TU3RyaW5nICopc3RyaW5nIGJhc2VVUkw6KE5TVVJMICopYmFzZVVSTCBmb3JVbnJl
YWNoYWJsZVVSTDooTlNVUkwgKil1bnJlYWNoYWJsZVVSTApAQCAtMjM5LDcgKzIzOSw3IEBAIC0g
KHZvaWQpbG9hZEFsdGVybmF0ZUhUTUxTdHJpbmc6KE5TU3RyaW4KICAgICBDU3RyaW5nIHVucmVh
Y2hhYmxlVVJMU3RyaW5nOwogICAgIGdldFVSTEJ5dGVzKChDRlVSTFJlZil1bnJlYWNoYWJsZVVS
TCwgdW5yZWFjaGFibGVVUkxTdHJpbmcpOwogCi0gICAgcmVpbnRlcnByZXRfY2FzdDxXZWJQYWdl
UHJveHkqPigmX3BhZ2UpLT5sb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhzdHJpbmcsIFN0cmluZzo6
ZnJvbVVURjgoYmFzZVVSTFN0cmluZyksIFN0cmluZzo6ZnJvbVVURjgodW5yZWFjaGFibGVVUkxT
dHJpbmcpKTsKKyAgICBfcGFnZS0+bG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoc3RyaW5nLCBTdHJp
bmc6OmZyb21VVEY4KGJhc2VVUkxTdHJpbmcpLCBTdHJpbmc6OmZyb21VVEY4KHVucmVhY2hhYmxl
VVJMU3RyaW5nKSk7CiB9CiAKIC0gKHZvaWQpbG9hZERhdGE6KE5TRGF0YSAqKWRhdGEgTUlNRVR5
cGU6KE5TU3RyaW5nICopTUlNRVR5cGUgdGV4dEVuY29kaW5nTmFtZTooTlNTdHJpbmcgKillbmNv
ZGluZ05hbWUgYmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCkBAIC0yNzYsNTQgKzI3Niw1NCBAQCAt
ICh2b2lkKWxvYWREYXRhOihOU0RhdGEgKilkYXRhIE1JTUVUeXBlCiAgICAgaWYgKHVzZXJEYXRh
KQogICAgICAgICB3a1VzZXJEYXRhID0gT2JqQ09iamVjdEdyYXBoOjpjcmVhdGUodXNlckRhdGEp
OwogCi0gICAgV0tQYWdlTG9hZERhdGFXaXRoVXNlckRhdGEodG9BUEkocmVpbnRlcnByZXRfY2Fz
dDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSwgdG9BUEkod2tEYXRhLmdldCgpKSwgd2tNSU1FVHlw
ZS5nZXQoKSwgd2tFbmNvZGluZ05hbWUuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgKFdLVHlwZVJl
Zil3a1VzZXJEYXRhLmdldCgpKTsKKyAgICBXS1BhZ2VMb2FkRGF0YVdpdGhVc2VyRGF0YSh0b0FQ
SShfcGFnZS5nZXQoKSksIHRvQVBJKHdrRGF0YS5nZXQoKSksIHdrTUlNRVR5cGUuZ2V0KCksIHdr
RW5jb2RpbmdOYW1lLmdldCgpLCB3a0Jhc2VVUkwuZ2V0KCksIChXS1R5cGVSZWYpd2tVc2VyRGF0
YS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc3RvcExvYWRpbmcKIHsKLSAgICBXS1BhZ2VTdG9wTG9h
ZGluZyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAg
ICBXS1BhZ2VTdG9wTG9hZGluZyh0b0FQSShfcGFnZS5nZXQoKSkpOwogfQogCiAtICh2b2lkKXJl
bG9hZAogewotICAgIFdLUGFnZVJlbG9hZCh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQ
cm94eSo+KCZfcGFnZSkpKTsKKyAgICBXS1BhZ2VSZWxvYWQodG9BUEkoX3BhZ2UuZ2V0KCkpKTsK
IH0KIAogLSAodm9pZClyZWxvYWRGcm9tT3JpZ2luCiB7Ci0gICAgV0tQYWdlUmVsb2FkRnJvbU9y
aWdpbih0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAg
ICBXS1BhZ2VSZWxvYWRGcm9tT3JpZ2luKHRvQVBJKF9wYWdlLmdldCgpKSk7CiB9CiAKICNwcmFn
bWEgbWFyayBCYWNrL0ZvcndhcmQKIAogLSAodm9pZClnb0ZvcndhcmQKIHsKLSAgICBXS1BhZ2VH
b0ZvcndhcmQodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSk7
CisgICAgV0tQYWdlR29Gb3J3YXJkKHRvQVBJKF9wYWdlLmdldCgpKSk7CiB9CiAKIC0gKEJPT0wp
Y2FuR29Gb3J3YXJkCiB7Ci0gICAgcmV0dXJuIFdLUGFnZUNhbkdvRm9yd2FyZCh0b0FQSShyZWlu
dGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAgICByZXR1cm4gV0tQYWdl
Q2FuR29Gb3J3YXJkKHRvQVBJKF9wYWdlLmdldCgpKSk7CiB9CiAKIC0gKHZvaWQpZ29CYWNrCiB7
Ci0gICAgV0tQYWdlR29CYWNrKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4o
Jl9wYWdlKSkpOworICAgIFdLUGFnZUdvQmFjayh0b0FQSShfcGFnZS5nZXQoKSkpOwogfQogCiAt
IChCT09MKWNhbkdvQmFjawogewotICAgIHJldHVybiBXS1BhZ2VDYW5Hb0JhY2sodG9BUEkocmVp
bnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSk7CisgICAgcmV0dXJuIFdLUGFn
ZUNhbkdvQmFjayh0b0FQSShfcGFnZS5nZXQoKSkpOwogfQogCiAtICh2b2lkKWdvVG9CYWNrRm9y
d2FyZExpc3RJdGVtOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtCiB7Ci0gICAgcmVpbnRl
cnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpLT5nb1RvQmFja0ZvcndhcmRJdGVtKCZp
dGVtLl9pdGVtKTsKKyAgICBfcGFnZS0+Z29Ub0JhY2tGb3J3YXJkSXRlbSgmaXRlbS5faXRlbSk7
CiB9CiAKIC0gKFdLQmFja0ZvcndhcmRMaXN0ICopYmFja0ZvcndhcmRMaXN0CiB7Ci0gICAgV2Vi
QmFja0ZvcndhcmRMaXN0KiBsaXN0ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigm
X3BhZ2UpLT5iYWNrRm9yd2FyZExpc3QoKTsKKyAgICBXZWJCYWNrRm9yd2FyZExpc3QqIGxpc3Qg
PSBfcGFnZS0+YmFja0ZvcndhcmRMaXN0KCk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1
cm4gbmlsOwogCkBAIC0zMzQsNTYgKzMzNCw1NiBAQCAtIChXS0JhY2tGb3J3YXJkTGlzdCAqKWJh
Y2tGb3J3YXJkTGlzdAogCiAtIChOU1VSTCAqKWFjdGl2ZVVSTAogewotICAgIHJldHVybiBhdXRv
cmVsZWFzZWQoV0tQYWdlQ29weUFjdGl2ZVVSTCh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBh
Z2VQcm94eSo+KCZfcGFnZSkpKSk7CisgICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5
QWN0aXZlVVJMKHRvQVBJKF9wYWdlLmdldCgpKSkpOwogfQogCiAtIChOU1VSTCAqKXByb3Zpc2lv
bmFsVVJMCiB7Ci0gICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VDb3B5UHJvdmlzaW9uYWxV
UkwodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSkpOworICAg
IHJldHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weVByb3Zpc2lvbmFsVVJMKHRvQVBJKF9wYWdl
LmdldCgpKSkpOwogfQogCiAtIChOU1VSTCAqKWNvbW1pdHRlZFVSTAogewotICAgIHJldHVybiBh
dXRvcmVsZWFzZWQoV0tQYWdlQ29weUNvbW1pdHRlZFVSTCh0b0FQSShyZWludGVycHJldF9jYXN0
PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKSk7CisgICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1Bh
Z2VDb3B5Q29tbWl0dGVkVVJMKHRvQVBJKF9wYWdlLmdldCgpKSkpOwogfQogCiAtIChOU1VSTCAq
KXVucmVhY2hhYmxlVVJMCiB7Ci0gICAgcmV0dXJuIFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJp
bmc6cmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpLT5wYWdlTG9hZFN0YXRl
KCkudW5yZWFjaGFibGVVUkwoKSByZWxhdGl2ZVRvVVJMOm5pbF07CisgICAgcmV0dXJuIFtOU1VS
TCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS51bnJlYWNoYWJs
ZVVSTCgpIHJlbGF0aXZlVG9VUkw6bmlsXTsKIH0KIAogLSAoZG91YmxlKWVzdGltYXRlZFByb2dy
ZXNzCiB7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdl
KS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKKyAgICByZXR1cm4gX3BhZ2UtPmVzdGltYXRlZFByb2dy
ZXNzKCk7CiB9CiAKICNwcmFnbWEgbWFyayBBY3RpdmUgRG9jdW1lbnQgSW50cm9zcGVjdGlvbgog
CiAtIChOU1N0cmluZyAqKXRpdGxlCiB7Ci0gICAgcmV0dXJuIGF1dG9yZWxlYXNlZChXS1BhZ2VD
b3B5VGl0bGUodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSkp
OworICAgIHJldHVybiBhdXRvcmVsZWFzZWQoV0tQYWdlQ29weVRpdGxlKHRvQVBJKF9wYWdlLmdl
dCgpKSkpOwogfQogCiAjcHJhZ21hIG1hcmsgWm9vbQogCiAtIChDR0Zsb2F0KXRleHRab29tCiB7
Ci0gICAgcmV0dXJuIFdLUGFnZUdldFRleHRab29tRmFjdG9yKHRvQVBJKHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdlKSkpOworICAgIHJldHVybiBXS1BhZ2VHZXRUZXh0Wm9v
bUZhY3Rvcih0b0FQSShfcGFnZS5nZXQoKSkpOwogfQogCiAtICh2b2lkKXNldFRleHRab29tOihD
R0Zsb2F0KXRleHRab29tCiB7Ci0gICAgcmV0dXJuIFdLUGFnZVNldFRleHRab29tRmFjdG9yKHRv
QVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdlKSksIHRleHRab29tKTsK
KyAgICByZXR1cm4gV0tQYWdlU2V0VGV4dFpvb21GYWN0b3IodG9BUEkoX3BhZ2UuZ2V0KCkpLCB0
ZXh0Wm9vbSk7CiB9CiAKIC0gKENHRmxvYXQpcGFnZVpvb20KIHsKLSAgICByZXR1cm4gV0tQYWdl
R2V0UGFnZVpvb21GYWN0b3IodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigm
X3BhZ2UpKSk7CisgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2Vab29tRmFjdG9yKHRvQVBJKF9wYWdl
LmdldCgpKSk7CiB9CiAKIC0gKHZvaWQpc2V0UGFnZVpvb206KENHRmxvYXQpcGFnZVpvb20KIHsK
LSAgICByZXR1cm4gV0tQYWdlU2V0UGFnZVpvb21GYWN0b3IodG9BUEkocmVpbnRlcnByZXRfY2Fz
dDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSwgcGFnZVpvb20pOworICAgIHJldHVybiBXS1BhZ2VT
ZXRQYWdlWm9vbUZhY3Rvcih0b0FQSShfcGFnZS5nZXQoKSksIHBhZ2Vab29tKTsKIH0KIAogc3Rh
dGljIE5TRXJyb3IgKmNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKFdLRXJyb3JSZWYg
d2tFcnJvciwgV0tGcmFtZVJlZiBmcmFtZSwgV0tCcm93c2luZ0NvbnRleHRDb250cm9sbGVyICpi
cm93c2luZ0NvbnRleHQpCkBAIC02MTcsOSArNjE3LDkgQEAgLSAodm9pZClzZXRMb2FkRGVsZWdh
dGU6KGlkIDxXS0Jyb3dzaW5nQwogewogICAgIF9sb2FkRGVsZWdhdGUgPSBsb2FkRGVsZWdhdGU7
CiAgICAgaWYgKF9sb2FkRGVsZWdhdGUpCi0gICAgICAgIHNldFVwUGFnZUxvYWRlckNsaWVudChz
ZWxmLCB0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAg
ICAgICAgc2V0VXBQYWdlTG9hZGVyQ2xpZW50KHNlbGYsIHRvQVBJKF9wYWdlLmdldCgpKSk7CiAg
ICAgZWxzZQotICAgICAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KHRvQVBJKHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdlKSksIG51bGxwdHIpOzsKKyAgICAgICAgV0tQ
YWdlU2V0UGFnZUxvYWRlckNsaWVudCh0b0FQSShfcGFnZS5nZXQoKSksIG51bGxwdHIpOzsKIH0K
IAogLSAoaWQgPFdLQnJvd3NpbmdDb250ZXh0UG9saWN5RGVsZWdhdGU+KXBvbGljeURlbGVnYXRl
CkBAIC02MzEsOSArNjMxLDkgQEAgLSAodm9pZClzZXRQb2xpY3lEZWxlZ2F0ZTooaWQgPFdLQnJv
d3NpbgogewogICAgIF9wb2xpY3lEZWxlZ2F0ZSA9IHBvbGljeURlbGVnYXRlOwogICAgIGlmIChf
cG9saWN5RGVsZWdhdGUpCi0gICAgICAgIHNldFVwUGFnZVBvbGljeUNsaWVudChzZWxmLCB0b0FQ
SShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAgICAgICAgc2V0
VXBQYWdlUG9saWN5Q2xpZW50KHNlbGYsIHRvQVBJKF9wYWdlLmdldCgpKSk7CiAgICAgZWxzZQot
ICAgICAgICBXS1BhZ2VTZXRQYWdlUG9saWN5Q2xpZW50KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViUGFnZVByb3h5Kj4oJl9wYWdlKSksIG51bGxwdHIpOzsKKyAgICAgICAgV0tQYWdlU2V0UGFn
ZVBvbGljeUNsaWVudCh0b0FQSShfcGFnZS5nZXQoKSksIG51bGxwdHIpOzsKIH0KIAogKyAoTlNN
dXRhYmxlU2V0ICopY3VzdG9tU2NoZW1lcwpAQCAtNjk5LDEyICs2OTksMTIgQEAgLSAodm9pZClz
ZXRQYWdpbmF0aW9uTW9kZTooV0tCcm93c2luZ0NvbgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgV0tQYWdlU2V0UGFnaW5hdGlvbk1vZGUodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQ
YWdlUHJveHkqPigmX3BhZ2UpKSwgbW9kZSk7CisgICAgV0tQYWdlU2V0UGFnaW5hdGlvbk1vZGUo
dG9BUEkoX3BhZ2UuZ2V0KCkpLCBtb2RlKTsKIH0KIAogLSAoV0tCcm93c2luZ0NvbnRleHRQYWdp
bmF0aW9uTW9kZSlwYWdpbmF0aW9uTW9kZQogewotICAgIHN3aXRjaCAoV0tQYWdlR2V0UGFnaW5h
dGlvbk1vZGUodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSkp
IHsKKyAgICBzd2l0Y2ggKFdLUGFnZUdldFBhZ2luYXRpb25Nb2RlKHRvQVBJKF9wYWdlLmdldCgp
KSkpIHsKICAgICBjYXNlIGtXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ6CiAgICAgICAgIHJl
dHVybiBXS1BhZ2luYXRpb25Nb2RlVW5wYWdpbmF0ZWQ7CiAgICAgY2FzZSBrV0tQYWdpbmF0aW9u
TW9kZUxlZnRUb1JpZ2h0OgpAQCAtNzIzLDQyICs3MjMsNDIgQEAgLSAoV0tCcm93c2luZ0NvbnRl
eHRQYWdpbmF0aW9uTW9kZSlwYWdpbgogCiAtICh2b2lkKXNldFBhZ2luYXRpb25CZWhhdmVzTGlr
ZUNvbHVtbnM6KEJPT0wpYmVoYXZlc0xpa2VDb2x1bW5zCiB7Ci0gICAgV0tQYWdlU2V0UGFnaW5h
dGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94
eSo+KCZfcGFnZSkpLCBiZWhhdmVzTGlrZUNvbHVtbnMpOworICAgIFdLUGFnZVNldFBhZ2luYXRp
b25CZWhhdmVzTGlrZUNvbHVtbnModG9BUEkoX3BhZ2UuZ2V0KCkpLCBiZWhhdmVzTGlrZUNvbHVt
bnMpOwogfQogCiAtIChCT09MKXBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMKIHsKLSAgICBy
ZXR1cm4gV0tQYWdlR2V0UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyh0b0FQSShyZWludGVy
cHJldF9jYXN0PFdlYlBhZ2VQcm94eSo+KCZfcGFnZSkpKTsKKyAgICByZXR1cm4gV0tQYWdlR2V0
UGFnaW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyh0b0FQSShfcGFnZS5nZXQoKSkpOwogfQogCiAt
ICh2b2lkKXNldFBhZ2VMZW5ndGg6KENHRmxvYXQpcGFnZUxlbmd0aAogewotICAgIFdLUGFnZVNl
dFBhZ2VMZW5ndGgodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2Up
KSwgcGFnZUxlbmd0aCk7CisgICAgV0tQYWdlU2V0UGFnZUxlbmd0aCh0b0FQSShfcGFnZS5nZXQo
KSksIHBhZ2VMZW5ndGgpOwogfQogCiAtIChDR0Zsb2F0KXBhZ2VMZW5ndGgKIHsKLSAgICByZXR1
cm4gV0tQYWdlR2V0UGFnZUxlbmd0aCh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VQcm94
eSo+KCZfcGFnZSkpKTsKKyAgICByZXR1cm4gV0tQYWdlR2V0UGFnZUxlbmd0aCh0b0FQSShfcGFn
ZS5nZXQoKSkpOwogfQogCiAtICh2b2lkKXNldEdhcEJldHdlZW5QYWdlczooQ0dGbG9hdClnYXBC
ZXR3ZWVuUGFnZXMKIHsKLSAgICBXS1BhZ2VTZXRHYXBCZXR3ZWVuUGFnZXModG9BUEkocmVpbnRl
cnByZXRfY2FzdDxXZWJQYWdlUHJveHkqPigmX3BhZ2UpKSwgZ2FwQmV0d2VlblBhZ2VzKTsKKyAg
ICBXS1BhZ2VTZXRHYXBCZXR3ZWVuUGFnZXModG9BUEkoX3BhZ2UuZ2V0KCkpLCBnYXBCZXR3ZWVu
UGFnZXMpOwogfQogCiAtIChDR0Zsb2F0KWdhcEJldHdlZW5QYWdlcwogewotICAgIHJldHVybiBX
S1BhZ2VHZXRHYXBCZXR3ZWVuUGFnZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJv
eHkqPigmX3BhZ2UpKSk7CisgICAgcmV0dXJuIFdLUGFnZUdldEdhcEJldHdlZW5QYWdlcyh0b0FQ
SShfcGFnZS5nZXQoKSkpOwogfQogCiAtIChOU1VJbnRlZ2VyKXBhZ2VDb3VudAogewotICAgIHJl
dHVybiBXS1BhZ2VHZXRQYWdlQ291bnQodG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlUHJv
eHkqPigmX3BhZ2UpKSk7CisgICAgcmV0dXJuIFdLUGFnZUdldFBhZ2VDb3VudCh0b0FQSShfcGFn
ZS5nZXQoKSkpOwogfQogCiAtIChXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKWhhbmRsZQogewot
ICAgIHJldHVybiBbW1tXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSBhbGxvY10gX2luaXRXaXRoUGFn
ZUlEOnJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZVByb3h5Kj4oJl9wYWdlKS0+cGFnZUlEKCldIGF1
dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgYWxsb2Nd
IF9pbml0V2l0aFBhZ2VJRDpfcGFnZS0+cGFnZUlEKCldIGF1dG9yZWxlYXNlXTsKIH0KIAogQGVu
ZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29u
dGV4dEdyb3VwLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tCcm93c2luZ0NvbnRleHRHcm91cC5tbQkocmV2aXNpb24gMTU5ODc2KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS0Jyb3dzaW5nQ29udGV4dEdyb3VwLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiArNDQsMTIgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiAKIEBpbXBsZW1lbnRhdGlvbiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwIHsKLSAgICBzdGQ6
OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoV2ViUGFnZUdyb3VwKSwgc3RkOjphbGlnbm1lbnRfb2Y8
V2ViUGFnZUdyb3VwPjo6dmFsdWU+Ojp0eXBlIF9wYWdlR3JvdXA7CisgICAgQVBJOjpPYmplY3RT
dG9yYWdlPFdlYlBhZ2VHcm91cD4gX3BhZ2VHcm91cDsKIH0KIAogLSAodm9pZClkZWFsbG9jCiB7
Ci0gICAgcmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCktPn5XZWJQ
YWdlR3JvdXAoKTsKKyAgICBfcGFnZUdyb3VwLT5+V2ViUGFnZUdyb3VwKCk7CiAKICAgICBbc3Vw
ZXIgZGVhbGxvY107CiB9CkBAIC02NiwzOSArNjYsMzkgQEAgLSAoaWQpaW5pdFdpdGhJZGVudGlm
aWVyOihOU1N0cmluZyAqKWlkZQogICAgIC8vIGRvbid0IGdldCBhdXRvbWF0aWNhbGx5IHdyaXR0
ZW4gdG8gdGhlIGRpc2suIFRoZSBhdXRvbWF0aWMgd3JpdGluZyBoYXMgcHJvdmVuCiAgICAgLy8g
Y29uZnVzaW5nIHRvIHVzZXJzIG9mIHRoZSBBUEkuCiAgICAgV0tSZXRhaW5QdHI8V0tQcmVmZXJl
bmNlc1JlZj4gcHJlZmVyZW5jZXMgPSBhZG9wdFdLKFdLUHJlZmVyZW5jZXNDcmVhdGUoKSk7Ci0g
ICAgV0tQYWdlR3JvdXBTZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBh
Z2VHcm91cCo+KCZfcGFnZUdyb3VwKSksIHByZWZlcmVuY2VzLmdldCgpKTsKKyAgICBXS1BhZ2VH
cm91cFNldFByZWZlcmVuY2VzKHRvQVBJKF9wYWdlR3JvdXAuZ2V0KCkpLCBwcmVmZXJlbmNlcy5n
ZXQoKSk7CiAKICAgICByZXR1cm4gc2VsZjsKIH0KIAogLSAoQk9PTClhbGxvd3NKYXZhU2NyaXB0
CiB7Ci0gICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0RW5hYmxlZChXS1BhZ2VH
cm91cEdldFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4o
Jl9wYWdlR3JvdXApKSkpOworICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdEVu
YWJsZWQoV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShfcGFnZUdyb3VwLmdldCgpKSkp
OwogfQogCiAtICh2b2lkKXNldEFsbG93c0phdmFTY3JpcHQ6KEJPT0wpYWxsb3dzSmF2YVNjcmlw
dAogewotICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0RW5hYmxlZChXS1BhZ2VHcm91cEdl
dFByZWZlcmVuY2VzKHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdl
R3JvdXApKSksIGFsbG93c0phdmFTY3JpcHQpOworICAgIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2Ny
aXB0RW5hYmxlZChXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKHRvQVBJKF9wYWdlR3JvdXAuZ2V0
KCkpKSwgYWxsb3dzSmF2YVNjcmlwdCk7CiB9CiAKIC0gKEJPT0wpYWxsb3dzSmF2YVNjcmlwdE1h
cmt1cAogewotICAgIHJldHVybiBXS1ByZWZlcmVuY2VzR2V0SmF2YVNjcmlwdE1hcmt1cEVuYWJs
ZWQoV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBh
Z2VHcm91cCo+KCZfcGFnZUdyb3VwKSkpKTsKKyAgICByZXR1cm4gV0tQcmVmZXJlbmNlc0dldEph
dmFTY3JpcHRNYXJrdXBFbmFibGVkKFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkoX3Bh
Z2VHcm91cC5nZXQoKSkpKTsKIH0KIAogLSAodm9pZClzZXRBbGxvd3NKYXZhU2NyaXB0TWFya3Vw
OihCT09MKWFsbG93c0phdmFTY3JpcHRNYXJrdXAKIHsKLSAgICBXS1ByZWZlcmVuY2VzU2V0SmF2
YVNjcmlwdE1hcmt1cEVuYWJsZWQoV0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShyZWlu
dGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3VwKSkpLCBhbGxvd3NKYXZhU2Ny
aXB0TWFya3VwKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0SmF2YVNjcmlwdE1hcmt1cEVuYWJsZWQo
V0tQYWdlR3JvdXBHZXRQcmVmZXJlbmNlcyh0b0FQSShfcGFnZUdyb3VwLmdldCgpKSksIGFsbG93
c0phdmFTY3JpcHRNYXJrdXApOwogfQogCiAtIChCT09MKWFsbG93c1BsdWdJbnMKIHsKLSAgICBy
ZXR1cm4gV0tQcmVmZXJlbmNlc0dldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3VwR2V0UHJlZmVy
ZW5jZXModG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCkp
KSk7CisgICAgcmV0dXJuIFdLUHJlZmVyZW5jZXNHZXRQbHVnaW5zRW5hYmxlZChXS1BhZ2VHcm91
cEdldFByZWZlcmVuY2VzKHRvQVBJKF9wYWdlR3JvdXAuZ2V0KCkpKSk7CiB9CiAKIC0gKHZvaWQp
c2V0QWxsb3dzUGx1Z0luczooQk9PTClhbGxvd3NQbHVnSW5zCiB7Ci0gICAgV0tQcmVmZXJlbmNl
c1NldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3VwR2V0UHJlZmVyZW5jZXModG9BUEkocmVpbnRl
cnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCkpKSwgYWxsb3dzUGx1Z0lucyk7
CisgICAgV0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUGFnZUdyb3VwR2V0UHJlZmVy
ZW5jZXModG9BUEkoX3BhZ2VHcm91cC5nZXQoKSkpLCBhbGxvd3NQbHVnSW5zKTsKIH0KIAogc3Rh
dGljIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IGNyZWF0ZVdLQXJyYXkoTlNBcnJheSAqYXJyYXkp
CkBAIC0xMzAsMTIgKzEzMCwxMiBAQCAtKHZvaWQpYWRkVXNlclN0eWxlU2hlZXQ6KE5TU3RyaW5n
ICopc291CiAgICAgYXV0byB3a0JsYWNrbGlzdCA9IGNyZWF0ZVdLQXJyYXkoYmxhY2tsaXN0KTsK
ICAgICBXS1VzZXJDb250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMgPSBtYWluRnJh
bWVPbmx5ID8ga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkgOiBrV0tJbmplY3RJbkFsbEZyYW1lczsK
IAotICAgIFdLUGFnZUdyb3VwQWRkVXNlclN0eWxlU2hlZXQodG9BUEkocmVpbnRlcnByZXRfY2Fz
dDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCkpLCB3a1NvdXJjZS5nZXQoKSwgd2tCYXNlVVJM
LmdldCgpLCB3a1doaXRlbGlzdC5nZXQoKSwgd2tCbGFja2xpc3QuZ2V0KCksIGluamVjdGVkRnJh
bWVzKTsKKyAgICBXS1BhZ2VHcm91cEFkZFVzZXJTdHlsZVNoZWV0KHRvQVBJKF9wYWdlR3JvdXAu
Z2V0KCkpLCB3a1NvdXJjZS5nZXQoKSwgd2tCYXNlVVJMLmdldCgpLCB3a1doaXRlbGlzdC5nZXQo
KSwgd2tCbGFja2xpc3QuZ2V0KCksIGluamVjdGVkRnJhbWVzKTsKIH0KIAogLSAodm9pZClyZW1v
dmVBbGxVc2VyU3R5bGVTaGVldHMKIHsKLSAgICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTdHls
ZVNoZWV0cyh0b0FQSShyZWludGVycHJldF9jYXN0PFdlYlBhZ2VHcm91cCo+KCZfcGFnZUdyb3Vw
KSkpOworICAgIFdLUGFnZUdyb3VwUmVtb3ZlQWxsVXNlclN0eWxlU2hlZXRzKHRvQVBJKF9wYWdl
R3JvdXAuZ2V0KCkpKTsKIH0KIAogLSAodm9pZClhZGRVc2VyU2NyaXB0OihOU1N0cmluZyAqKXNv
dXJjZSBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwgd2hpdGVsaXN0ZWRVUkxQYXR0ZXJuczooTlNB
cnJheSAqKXdoaXRlbGlzdCBibGFja2xpc3RlZFVSTFBhdHRlcm5zOihOU0FycmF5ICopYmxhY2ts
aXN0IGluamVjdGlvblRpbWU6KFdLVXNlclNjcmlwdEluamVjdGlvblRpbWUpaW5qZWN0aW9uVGlt
ZSBtYWluRnJhbWVPbmx5OihCT09MKW1haW5GcmFtZU9ubHkKQEAgLTE0OSwxOSArMTQ5LDE5IEBA
IC0gKHZvaWQpYWRkVXNlclNjcmlwdDooTlNTdHJpbmcgKilzb3VyY2UKICAgICBhdXRvIHdrQmxh
Y2tsaXN0ID0gY3JlYXRlV0tBcnJheShibGFja2xpc3QpOwogICAgIFdLVXNlckNvbnRlbnRJbmpl
Y3RlZEZyYW1lcyBpbmplY3RlZEZyYW1lcyA9IG1haW5GcmFtZU9ubHkgPyBrV0tJbmplY3RJblRv
cEZyYW1lT25seSA6IGtXS0luamVjdEluQWxsRnJhbWVzOwogCi0gICAgV0tQYWdlR3JvdXBBZGRV
c2VyU2NyaXB0KHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFnZUdyb3VwKj4oJl9wYWdlR3Jv
dXApKSwgd2tTb3VyY2UuZ2V0KCksIHdrQmFzZVVSTC5nZXQoKSwgd2tXaGl0ZWxpc3QuZ2V0KCks
IHdrQmxhY2tsaXN0LmdldCgpLCBpbmplY3RlZEZyYW1lcywgaW5qZWN0aW9uVGltZSk7CisgICAg
V0tQYWdlR3JvdXBBZGRVc2VyU2NyaXB0KHRvQVBJKF9wYWdlR3JvdXAuZ2V0KCkpLCB3a1NvdXJj
ZS5nZXQoKSwgd2tCYXNlVVJMLmdldCgpLCB3a1doaXRlbGlzdC5nZXQoKSwgd2tCbGFja2xpc3Qu
Z2V0KCksIGluamVjdGVkRnJhbWVzLCBpbmplY3Rpb25UaW1lKTsKIH0KIAogLSAodm9pZClyZW1v
dmVBbGxVc2VyU2NyaXB0cwogewotICAgIFdLUGFnZUdyb3VwUmVtb3ZlQWxsVXNlclNjcmlwdHMo
dG9BUEkocmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCkpKTsKKyAg
ICBXS1BhZ2VHcm91cFJlbW92ZUFsbFVzZXJTY3JpcHRzKHRvQVBJKF9wYWdlR3JvdXAuZ2V0KCkp
KTsKIH0KIAogI3ByYWdtYSBtYXJrIFdLT2JqZWN0IHByb3RvY29sIGltcGxlbWVudGF0aW9uCiAK
IC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0CiB7Ci0gICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEFQSTo6T2JqZWN0Kj4oJl9wYWdlR3JvdXApOworICAgIHJldHVybiAqX3BhZ2VHcm91cDsK
IH0KIAogQGVuZApAQCAtMTcwLDcgKzE3MCw3IEBAIC0gKEFQSTo6T2JqZWN0JilfYXBpT2JqZWN0
CiAKIC0gKFdLUGFnZUdyb3VwUmVmKV9wYWdlR3JvdXBSZWYKIHsKLSAgICByZXR1cm4gdG9BUEko
cmVpbnRlcnByZXRfY2FzdDxXZWJQYWdlR3JvdXAqPigmX3BhZ2VHcm91cCkpOworICAgIHJldHVy
biB0b0FQSShfcGFnZUdyb3VwLmdldCgpKTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EYXRhLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9uRGF0YS5tbQko
cmV2aXNpb24gMTU5ODc2KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S05hdmlnYXRpb25EYXRhLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw0MSArMzUsNDEgQEAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIEBpbXBsZW1lbnRhdGlvbiBXS05hdmlnYXRpb25EYXRh
IHsKLSAgICBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoQVBJOjpOYXZpZ2F0aW9uRGF0YSks
IHN0ZDo6YWxpZ25tZW50X29mPEFQSTo6TmF2aWdhdGlvbkRhdGE+Ojp2YWx1ZT46OnR5cGUgX2Rh
dGE7CisgICAgQVBJOjpPYmplY3RTdG9yYWdlPEFQSTo6TmF2aWdhdGlvbkRhdGE+IF9kYXRhOwog
fQogCiAtICh2b2lkKWRlYWxsb2MKIHsKLSAgICByZWludGVycHJldF9jYXN0PEFQSTo6TmF2aWdh
dGlvbkRhdGEqPigmX2RhdGEpLT5+TmF2aWdhdGlvbkRhdGEoKTsKKyAgICBfZGF0YS0+fk5hdmln
YXRpb25EYXRhKCk7CiAKICAgICBbc3VwZXIgZGVhbGxvY107CiB9CiAKIC0gKE5TU3RyaW5nICop
dGl0bGUKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBUEk6Ok5hdmlnYXRpb25EYXRh
Kj4oJl9kYXRhKS0+dGl0bGUoKTsKKyAgICByZXR1cm4gX2RhdGEtPnRpdGxlKCk7CiB9CiAKIC0g
KE5TVVJMUmVxdWVzdCAqKW9yaWdpbmFsUmVxdWVzdAogewotICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PEFQSTo6TmF2aWdhdGlvbkRhdGEqPigmX2RhdGEpLT5vcmlnaW5hbFJlcXVlc3QoKS5u
c1VSTFJlcXVlc3QoV2ViQ29yZTo6RG9Ob3RVcGRhdGVIVFRQQm9keSk7CisgICAgcmV0dXJuIF9k
YXRhLT5vcmlnaW5hbFJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6RG9Ob3RVcGRhdGVI
VFRQQm9keSk7CiB9CiAKIC0gKE5TVVJMICopZGVzdGluYXRpb25VUkwKIHsKLSAgICByZXR1cm4g
W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpyZWludGVycHJldF9jYXN0PEFQSTo6TmF2aWdh
dGlvbkRhdGEqPigmX2RhdGEpLT51cmwoKSByZWxhdGl2ZVRvVVJMOm5pbF07CisgICAgcmV0dXJu
IFtOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6X2RhdGEtPnVybCgpIHJlbGF0aXZlVG9VUkw6
bmlsXTsKIH0KIAogLSAoTlNVUkxSZXNwb25zZSAqKXJlc3BvbnNlCiB7Ci0gICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QVBJOjpOYXZpZ2F0aW9uRGF0YSo+KCZfZGF0YSktPnJlc3BvbnNlKCku
bnNVUkxSZXNwb25zZSgpOworICAgIHJldHVybiBfZGF0YS0+cmVzcG9uc2UoKS5uc1VSTFJlc3Bv
bnNlKCk7CiB9CiAKICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlv
bgogCiAtIChBUEk6Ok9iamVjdCYpX2FwaU9iamVjdAogewotICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxBUEk6Ok9iamVjdCo+KCZfZGF0YSk7CisgICAgcmV0dXJuICpfZGF0YTsKIH0KIAog
QGVuZApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1Byb2Nlc3NH
cm91cC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJvY2Vzc0dyb3VwLm1tCShyZXZpc2lvbiAxNTk4NzcpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJvY2Vzc0dyb3VwLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01
MiwxMyArNTIsMjAgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIEBpbXBsZW1lbnRhdGlv
biBXS1Byb2Nlc3NHcm91cCB7Ci0gICAgc3RkOjphbGlnbmVkX3N0b3JhZ2U8c2l6ZW9mKFdlYkNv
bnRleHQpLCBzdGQ6OmFsaWdubWVudF9vZjxXZWJDb250ZXh0Pjo6dmFsdWU+Ojp0eXBlIF9jb250
ZXh0OworICAgIEFQSTo6T2JqZWN0U3RvcmFnZTxXZWJDb250ZXh0PiBfY29udGV4dDsKIAogI2lm
IFBMQVRGT1JNKElPUykKICAgICBSZXRhaW5QdHI8V0tHZW9sb2NhdGlvblByb3ZpZGVySU9TPiBf
Z2VvbG9jYXRpb25Qcm92aWRlcjsKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiB9CiAKKy0gKHZv
aWQpZGVhbGxvYworeworICAgIF9jb250ZXh0LT5+V2ViQ29udGV4dCgpOworCisgICAgW3N1cGVy
IGRlYWxsb2NdOworfQorCiBzdGF0aWMgdm9pZCBkaWRDcmVhdGVDb25uZWN0aW9uKFdLQ29udGV4
dFJlZiwgV0tDb25uZWN0aW9uUmVmIGNvbm5lY3Rpb25SZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CiAgICAgV0tQcm9jZXNzR3JvdXAgKnByb2Nlc3NHcm91cCA9IChXS1Byb2Nlc3NHcm91
cCAqKWNsaWVudEluZm87CkBAIC0xNzcsMjUgKzE4NCwxOCBAQCAtIChpZClpbml0V2l0aEluamVj
dGVkQnVuZGxlVVJMOihOU1VSTCAqCiAKICAgICBBUEk6Ok9iamVjdDo6Y29uc3RydWN0SW5XcmFw
cGVyPFdlYkNvbnRleHQ+KHNlbGYsIGJ1bmRsZVVSTCA/IFN0cmluZyhbYnVuZGxlVVJMIHBhdGhd
KSA6IFN0cmluZygpKTsKIAotICAgIHNldFVwQ29ubmVjdGlvbkNsaWVudChzZWxmLCB0b0FQSShy
ZWludGVycHJldF9jYXN0PFdlYkNvbnRleHQqPigmX2NvbnRleHQpKSk7Ci0gICAgc2V0VXBJbmVj
dGVkQnVuZGxlQ2xpZW50KHNlbGYsIHRvQVBJKHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4dCo+
KCZfY29udGV4dCkpKTsKLSAgICBzZXRVcEhpc3RvcnlDbGllbnQoc2VsZiwgdG9BUEkocmVpbnRl
cnByZXRfY2FzdDxXZWJDb250ZXh0Kj4oJl9jb250ZXh0KSkpOworICAgIHNldFVwQ29ubmVjdGlv
bkNsaWVudChzZWxmLCB0b0FQSShfY29udGV4dC5nZXQoKSkpOworICAgIHNldFVwSW5lY3RlZEJ1
bmRsZUNsaWVudChzZWxmLCB0b0FQSShfY29udGV4dC5nZXQoKSkpOworICAgIHNldFVwSGlzdG9y
eUNsaWVudChzZWxmLCB0b0FQSShfY29udGV4dC5nZXQoKSkpOwogCiAgICAgcmV0dXJuIHNlbGY7
CiB9CiAKLS0gKHZvaWQpZGVhbGxvYwotewotICAgIHJlaW50ZXJwcmV0X2Nhc3Q8V2ViQ29udGV4
dCo+KCZfY29udGV4dCktPn5XZWJDb250ZXh0KCk7Ci0KLSAgICBbc3VwZXIgZGVhbGxvY107Ci19
Ci0KICNwcmFnbWEgbWFyayBXS09iamVjdCBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbgogCiAtIChB
UEk6Ok9iamVjdCYpX2FwaU9iamVjdAogewotICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxB
UEk6Ok9iamVjdCo+KCZfY29udGV4dCk7CisgICAgcmV0dXJuICpfY29udGV4dDsKIH0KIAogQGVu
ZApAQCAtMjA0LDE0ICsyMDQsMTQgQEAgLSAoQVBJOjpPYmplY3QmKV9hcGlPYmplY3QKIAogLSAo
V0tDb250ZXh0UmVmKV9jb250ZXh0UmVmCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViQ29udGV4dCo+KCZfY29udGV4dCkpOworICAgIHJldHVybiB0b0FQSShfY29udGV4
dC5nZXQoKSk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiAtIChXS0dlb2xvY2F0aW9uUHJvdmlk
ZXJJT1MgKilfZ2VvbG9jYXRpb25Qcm92aWRlcgogewogICAgIGlmICghX2dlb2xvY2F0aW9uUHJv
dmlkZXIpCi0gICAgICAgIF9nZW9sb2NhdGlvblByb3ZpZGVyID0gYWRvcHROUyhbW1dLR2VvbG9j
YXRpb25Qcm92aWRlcklPUyBhbGxvY10gaW5pdFdpdGhDb250ZXh0OnJlaW50ZXJwcmV0X2Nhc3Q8
V2ViQ29udGV4dCo+KCZfY29udGV4dCldKTsKKyAgICAgICAgX2dlb2xvY2F0aW9uUHJvdmlkZXIg
PSBhZG9wdE5TKFtbV0tHZW9sb2NhdGlvblByb3ZpZGVySU9TIGFsbG9jXSBpbml0V2l0aENvbnRl
eHQ6X2NvbnRleHQuZ2V0KCldKTsKICAgICByZXR1cm4gX2dlb2xvY2F0aW9uUHJvdmlkZXIuZ2V0
KCk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQo=
</data>
<flag name="review"
          id="241398"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>