<?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>154436</bug_id>
          
          <creation_ts>2016-02-18 22:24:07 -0800</creation_ts>
          <short_desc>bmalloc: Remove the concept of medium objects</short_desc>
          <delta_ts>2016-02-19 16:03:52 -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>WebKit 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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1166318</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 22:24:07 -0800</bug_when>
    <thetext>bmalloc: Remove the concept of medium objects</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166325</commentid>
    <comment_count>1</comment_count>
      <attachid>271733</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 22:47:07 -0800</bug_when>
    <thetext>Created attachment 271733
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166326</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-18 22:47:57 -0800</bug_when>
    <thetext>Attachment 271733 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Heap.cpp:169:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166327</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 22:48:24 -0800</bug_when>
    <thetext>~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                
                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 88ms                           80ms                  ^ 1.1x faster
    list_allocate                                         88ms                           83ms                 ^ 1.06x faster
    tree_allocate                                         88ms                           84ms                 ^ 1.05x faster
    tree_churn                                            92ms                           90ms                 ^ 1.02x faster
    fragment                                             104ms                           99ms                 ^ 1.05x faster
    fragment_iterate                                      68ms                           66ms                 ^ 1.03x faster
    medium                                               202ms                          203ms                  ! 1.0x slower
    big                                                  152ms                          152ms                               
    facebook                                             431ms                          435ms                 ! 1.01x slower
    reddit                                                89ms                           91ms                 ! 1.02x slower
    flickr                                                94ms                           99ms                 ! 1.05x slower
    theverge                                             114ms                          119ms                 ! 1.04x slower
    message_one                                          225ms                          221ms                 ^ 1.02x faster
    message_many                                         121ms                          119ms                 ^ 1.02x faster
    churn --parallel                                      40ms                           39ms                 ^ 1.03x faster
    list_allocate --parallel                              73ms                           70ms                 ^ 1.04x faster
    tree_allocate --parallel                              88ms                           85ms                 ^ 1.04x faster
    tree_churn --parallel                                 86ms                           85ms                 ^ 1.01x faster
    fragment --parallel                                   55ms                           52ms                 ^ 1.06x faster
    fragment_iterate --parallel                           33ms                           32ms                 ^ 1.03x faster
    medium --parallel                                    189ms                          188ms                 ^ 1.01x faster
    big --parallel                                       135ms                          136ms                 ! 1.01x slower

    &lt;geometric mean&gt;                                     102ms                          100ms                 ^ 1.02x faster
    &lt;arithmetic mean&gt;                                    121ms                          119ms                 ^ 1.01x faster
    &lt;harmonic mean&gt;                                       88ms                           86ms                 ^ 1.03x faster

Peak Memory:
    churn                                                780kB                          784kB                 ! 1.01x bigger
    list_allocate                                      2,100kB                        2,100kB                               
    tree_allocate                                      5,536kB                        5,512kB                 ^ 1.0x smaller
    tree_churn                                         4,828kB                        4,808kB                 ^ 1.0x smaller
    fragment                                           7,048kB                        7,024kB                 ^ 1.0x smaller
    fragment_iterate                                  25,824kB                       25,712kB                 ^ 1.0x smaller
    medium                                         1,071,080kB                    1,071,084kB                  ! 1.0x bigger
    big                                            1,064,808kB                    1,065,832kB                  ! 1.0x bigger
    facebook                                          77,932kB                       77,704kB                 ^ 1.0x smaller
    reddit                                            15,060kB                       14,100kB                ^ 1.07x smaller
    flickr                                            27,476kB                       25,356kB                ^ 1.08x smaller
    theverge                                          28,840kB                       26,764kB                ^ 1.08x smaller
    message_one                                        4,632kB                        4,516kB                ^ 1.03x smaller
    message_many                                       5,036kB                        4,928kB                ^ 1.02x smaller
    churn --parallel                                     968kB                          948kB                ^ 1.02x smaller
    list_allocate --parallel                           2,212kB                        2,248kB                 ! 1.02x bigger
    tree_allocate --parallel                           3,364kB                        3,308kB                ^ 1.02x smaller
    tree_churn --parallel                              3,040kB                        3,040kB                               
    fragment --parallel                                7,196kB                        7,176kB                 ^ 1.0x smaller
    fragment_iterate --parallel                       25,944kB                       25,848kB                 ^ 1.0x smaller
    medium --parallel                              1,069,564kB                    1,070,048kB                  ! 1.0x bigger
    big --parallel                                 1,060,860kB                    1,057,056kB                 ^ 1.0x smaller

    &lt;geometric mean&gt;                                  16,808kB                       16,571kB                ^ 1.01x smaller
    &lt;arithmetic mean&gt;                                205,188kB                      204,813kB                 ^ 1.0x smaller
    &lt;harmonic mean&gt;                                    4,244kB                        4,215kB                ^ 1.01x smaller

Memory at End:
    churn                                                376kB                          380kB                 ! 1.01x bigger
    list_allocate                                        412kB                          412kB                               
    tree_allocate                                        512kB                          488kB                ^ 1.05x smaller
    tree_churn                                           484kB                          464kB                ^ 1.04x smaller
    fragment                                             500kB                          476kB                ^ 1.05x smaller
    fragment_iterate                                     832kB                          720kB                ^ 1.16x smaller
    medium                                             6,704kB                        6,708kB                  ! 1.0x bigger
    big                                                6,692kB                        6,692kB                               
    facebook                                           3,484kB                        3,672kB                 ! 1.05x bigger
    reddit                                             2,132kB                        2,268kB                 ! 1.06x bigger
    flickr                                             3,196kB                        3,268kB                 ! 1.02x bigger
    theverge                                           3,280kB                        3,340kB                 ! 1.02x bigger
    message_one                                          696kB                          680kB                ^ 1.02x smaller
    message_many                                       1,120kB                        1,176kB                 ! 1.05x bigger
    churn --parallel                                     564kB                          540kB                ^ 1.04x smaller
    list_allocate --parallel                             588kB                          588kB                               
    tree_allocate --parallel                             720kB                          688kB                ^ 1.05x smaller
    tree_churn --parallel                              1,140kB                        1,180kB                 ! 1.04x bigger
    fragment --parallel                                1,352kB                        1,356kB                  ! 1.0x bigger
    fragment_iterate --parallel                        1,044kB                          908kB                ^ 1.15x smaller
    medium --parallel                                  6,836kB                        6,824kB                 ^ 1.0x smaller
    big --parallel                                     6,800kB                        6,792kB                 ^ 1.0x smaller

    &lt;geometric mean&gt;                                   1,353kB                        1,336kB                ^ 1.01x smaller
    &lt;arithmetic mean&gt;                                  2,248kB                        2,255kB                  ! 1.0x bigger
    &lt;harmonic mean&gt;                                      915kB                          892kB                ^ 1.03x smaller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166329</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-18 22:48:42 -0800</bug_when>
    <thetext>~/OpenSource/PerformanceTests/MallocBench&gt; ./run-malloc-benchmarks Baseline:~/OpenSource/WebKitBuildBaseline/Release/ Patch:~/OpenSource/WebKitBuild/Release/
                                                                                     
                                                                Baseline                               Patch                                   Δ
Peak Memory:
    reddit_memory_warning --runs 0                              14,940kB                            14,000kB                     ^ 1.07x smaller
    flickr_memory_warning --runs 0                              27,360kB                            25,356kB                     ^ 1.08x smaller
    theverge_memory_warning --runs 0                            28,504kB                            26,500kB                     ^ 1.08x smaller

    &lt;geometric mean&gt;                                            22,670kB                            21,110kB                     ^ 1.07x smaller
    &lt;arithmetic mean&gt;                                           23,601kB                            21,952kB                     ^ 1.08x smaller
    &lt;harmonic mean&gt;                                             21,650kB                            20,188kB                     ^ 1.07x smaller

Memory at End:
    reddit_memory_warning --runs 0                               9,604kB                             9,264kB                     ^ 1.04x smaller
    flickr_memory_warning --runs 0                              12,576kB                            12,312kB                     ^ 1.02x smaller
    theverge_memory_warning --runs 0                            22,344kB                            21,252kB                     ^ 1.05x smaller

    &lt;geometric mean&gt;                                            13,923kB                            13,433kB                     ^ 1.04x smaller
    &lt;arithmetic mean&gt;                                           14,841kB                            14,276kB                     ^ 1.04x smaller
    &lt;harmonic mean&gt;                                             13,135kB                            12,700kB                     ^ 1.03x smaller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166597</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-19 16:03:52 -0800</bug_when>
    <thetext>Committed r196845: &lt;http://trac.webkit.org/changeset/196845&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271733</attachid>
            <date>2016-02-18 22:47:07 -0800</date>
            <delta_ts>2016-02-19 12:49:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154436-20160218224648.patch</filename>
            <type>text/plain</type>
            <size>56390</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njc5OCkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0MyBAQAorMjAxNi0wMi0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IFJlbW92ZSB0
aGUgY29uY2VwdCBvZiBtZWRpdW0gb2JqZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlcmUncyBubyBuZWVkIHRvIGRpc3Rpbmd1aXNoIG1lZGl1
bSBvYmplY3RzIGZyb20gc21hbGw6IFNtYWxsIG9iamVjdAorICAgICAgICBtZXRhZGF0YSB3b3Jr
cyBuYXR1cmFsbHkgZm9yIGJvdGggYXMgbG9uZyBhcyB3ZSBhbGxvdyBhbiBvYmplY3QgdG8KKyAg
ICAgICAgc3BhbiBtb3JlIHRoYW4gdHdvIHNtYWxsIGxpbmVzLiAoV2UgYWxyZWFkeSBhbGxvdyBh
biBvYmplY3QgdG8gc3BhbgorICAgICAgICBtb3JlIHRoYW4gb25lIHNtYWxsIGxpbmUuKQorCisg
ICAgICAgIFRoaXMgY2hhbmdlIHJlZHVjZXMgbWVtb3J5IHVzZSBiZWNhdXNlIGl0IGVsaW1pbmF0
ZXMgdGhlIDFrQiBsaW5lIHNpemUsCisgICAgICAgIHNvIHdlIGRvbid0IGhhdmUgdG8gaG9sZCBk
b3duIDFrQiBsaW5lcyBmb3IgaW5kaXZpZHVhbCAyNjQrIGJ5dGUgb2JqZWN0cy4KKworICAgICAg
ICAxa0IgbGluZXMgd2VyZSBhbHdheXMgYSBiaXQgb2YgYSBjb21wcm9taXNlLiBUaGUgbWFpbiBw
b2ludCBvZiBidW1wCisgICAgICAgIGFsbG9jYXRpb24gaXMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2Yg
Y2FjaGUgbGluZXMuIENhY2hlIGxpbmVzIGFyZSB1c3VhbGx5CisgICAgICAgIDY0IGJ5dGVzLCBz
byBsaW5lIHNpemVzIGFib3ZlIDI1NiBieXRlcyBhcmUgYSBiaXQgb2YgYSBzdHJldGNoLgorCisg
ICAgICAgIFRoaXMgY2hhbmdlIHNwZWVkcyB1cCBzbWFsbCBvYmplY3QgYmVuY2htYXJrcyBiZWNh
dXNlIGl0IGVsaW1pbmF0ZXMgdGhlCisgICAgICAgIGJyYW5jaCB0byBkZXRlY3QgbWVkaXVtIG9i
amVjdHMgaW4gZGVhbGxvY2F0aW9uIGxvZyBwcm9jZXNzaW5nLgorCisgICAgICAgIFRoaXMgY2hh
bmdlIHJlZHVjZXMgdmlydHVhbCBtZW1vcnkgdXNlIGZyb20gd29yc3QgY2FzdCA0WCB0byB3b3Jz
dCBjYXNlCisgICAgICAgIDJYIGJlY2F1c2UgdGhlIG1lZGl1bSBjaHVuayBpcyBnb25lLiBpT1Mg
Y2FyZXMgYWJvdXQgdmlydHVhbCBtZW1vcnkgdXNlCisgICAgICAgIGFuZCB0ZXJtaW5hdGVzIGFw
cHMgYWJvdmUgfjFHQiwgc28gdGhpcyBjaGFuZ2UgZ2l2ZXMgdXMgbW9yZSBicmVhdGhpbmcgcm9v
bS4KKworICAgICAgICBUaGlzIGNoYW5nZSBzbG93cyBkb3duIG1lZGl1bSBiZW5jaG1hcmtzIGEg
Yml0IGJlY2F1c2Ugd2UgZW5kIHVwIGRvaW5nCisgICAgICAgIG1vcmUgd29yayB0byByZWN5Y2xl
IGZyYWdtZW50ZWQgbWVkaXVtIG9iamVjdHMuIE92ZXJhbGwsIHRoZSB0cmFkZW9mZgorICAgICAg
ICBzZWVtcyBqdXN0aWZpZWQsIHNpbmNlIHdlIGhhdmUgYSBuZXQgc3BlZWR1cCBhbmQgYSBtZW1v
cnkgdXNlIHNhdmluZ3MuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IFJlbW92ZWQgYWxsIHRoZSBtZWRpdW0gZmlsZXMuIFdlCisgICAgICAgIGNhbiBzaW1w
bGlmeSBldmVuIGZ1cnRoZXIgaW4gYSBmb2xsb3ctdXAgcGF0Y2gsIHJlbW92aW5nIHRoZSBiYXNl
IGNsYXNzCisgICAgICAgIHRlbXBsYXRlcyBmb3IgQ2h1bmssIFBhZ2UsIGFuZCBMaW5lIGFzIHdl
bGwuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5jcHA6CisgICAgICAgIChibWFsbG9j
OjpBbGxvY2F0b3I6OkFsbG9jYXRvcik6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFs
bG9jYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9jYXRvcjo6cmVhbGxvY2F0ZSk6CisgICAg
ICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6OkFs
bG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxs
b2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjph
bGxvY2F0ZVNsb3dDYXNlKTogTWVkaXVtIGlzIGdvbmUuIFNtYWxsIG1heCBpcyB0aGUKKyAgICAg
ICAgbmV3IG1lZGl1bSBtYXguCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZUZhc3RDYXNlKTogRGl0dG8uCisKKyAg
ICAgICAgKiBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaDoKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBB
bGxvY2F0b3I6OnZhbGlkYXRlKToKKyAgICAgICAgKGJtYWxsb2M6OkJ1bXBBbGxvY2F0b3I6OmFs
bG9jYXRlKTogTm8gbW9yZSBtZWRpdW0uCisKKyAgICAgICAgKiBibWFsbG9jL0NodW5rLmg6IE5v
IG1vcmUgbWVkaXVtLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyk6IE5vIGNoZWNrIGZv
ciBtZWRpdW0uIFRoaXMgaXMKKyAgICAgICAgYSBzcGVlZHVwLgorCisgICAgICAgIChibWFsbG9j
OjpEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZVNsb3dDYXNlKTogTm8gbW9yZSBtZWRpdW0uCisKKyAg
ICAgICAgKiBibWFsbG9jL0RlYWxsb2NhdG9yLmg6CisgICAgICAgIChibWFsbG9jOjpEZWFsbG9j
YXRvcjo6ZGVhbGxvY2F0ZUZhc3RDYXNlKTogRGl0dG8uCisKKyAgICAgICAgKiBibWFsbG9jL0hl
YXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSk6
IFRoZSBhbGdvcml0aG0gaGVyZSBjaGFuZ2VkIGZyb20KKyAgICAgICAgaXRlcmF0aW5nIGVhY2gg
bGluZSB0byBpdGVyYXRpbmcgZWFjaCBvYmplY3QuIFRoaXMgaGVscHMgdXMgYWNjb21vZGF0ZQor
ICAgICAgICBvYmplY3RzIHRoYXQgbWlnaHQgc3BhbiBtb3JlIHRoYW4gdHdvIGxpbmVzIC0tIGku
ZS4sIGFsbCBvYmplY3RzIGJldHdlZW4KKyAgICAgICAgKDUxMiBieXRlcywgMTAyNCBieXRlc10u
CisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNjYXZlbmdlKToKKyAgICAgICAgKGJtYWxsb2M6
OkhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjpzY2F2
ZW5nZUxhcmdlT2JqZWN0cyk6IE1lZGl1bSBpcyBnb25lLgorCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyk6IEFsbG93IGZvciBsaW5lcyB0aGF0IGFsbG9j
YXRlCisgICAgICAgIHplcm8gb2JqZWN0cy4gVGhpcyBoYXBwZW5zIHdoZW4gYW4gb2JqZWN0IHNw
YW5zIG1vcmUgdGhhbiB0aHJlZSBsaW5lcyAtLQorICAgICAgICB0aGUgbWlkZGxlIGxpbmUgYWxs
b2NhdGVzIHplcm8gb2JqZWN0cy4KKworICAgICAgICBBbHNvIHNldCB0aGUgImhhcyBmcmVlIGxp
bmVzIiBiaXQgdG8gZmFsc2UgaWYgd2UgY29uc3VtZSB0aGUgbGFzdCBmcmVlCisgICAgICAgIGxp
bmUuIFRoaXMgbmVlZHMgdG8gYmUgYSBiaXQgbm93IGJlY2F1c2Ugbm90IGFsbCBwYWdlcyBhZ3Jl
ZSBvbiB0aGVpcgorICAgICAgICBtYXhpbXVtIHJlZmNvdW50IGFueW1vcmUsIHNvIHdlIG5lZWQg
YW4gZXhwbGljaXQgc2lnbmFsIGZvciB0aGUgdHJhbnNpdGlvbgorICAgICAgICBmcm9tIG1heGlt
dW0gdG8gbWF4aW11bSAtIDEuCisKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmFsbG9jYXRlU21h
bGxQYWdlKTogVGhpcyBjb2RlIGRpZG4ndCBjaGFuZ2U7IEkganVzdCByZW1vdmVkCisgICAgICAg
IHRoZSBtZWRpdW0gY29kZS4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZVNt
YWxsTGluZSk6IENoYW5nZWQgdGhlIGFsZ29yaXRobSB0byBjaGVjaworICAgICAgICBzY2F2ZW5n
ZUxhcmdlT2JqZWN0cy4gU2VlIGFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzLgorCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjpzY2F2ZW5nZU1lZGl1bVBhZ2VzKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OmFsbG9jYXRlTWVkaXVtQnVtcFJhbmdlcyk6IERlbGV0ZWQuCisgICAgICAg
IChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZU1lZGl1bVBhZ2UpOiBEZWxldGVkLgorICAgICAgICAo
Ym1hbGxvYzo6SGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bUxpbmUpOiBEZWxldGVkLgorICAgICAgICAq
IGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6ZGVyZWZNZWRpdW1MaW5l
KTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvTGFyZ2VDaHVuay5oOgorICAgICAgICAo
Ym1hbGxvYzo6TGFyZ2VDaHVuazo6Z2V0KToKKyAgICAgICAgKGJtYWxsb2M6OkxhcmdlQ2h1bms6
OmVuZFRhZyk6CisgICAgICAgICogYm1hbGxvYy9MaW5lLmg6IE5vIG1vcmUgbWVkaXVtLgorCisg
ICAgICAgICogYm1hbGxvYy9NZWRpdW1DaHVuay5oOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvTWVkaXVtTGluZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxsb2MvTWVkaXVtUGFnZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxsb2MvTWVkaXVtVHJhaXRzLmg6IFJlbW92ZWQuCisK
KyAgICAgICAgKiBibWFsbG9jL09iamVjdFR5cGUuY3BwOgorICAgICAgICAoYm1hbGxvYzo6b2Jq
ZWN0VHlwZSk6CisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmg6CisgICAgICAgIChibWFs
bG9jOjppc1NtYWxsKToKKyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKToKKyAgICAgICAgKGJt
YWxsb2M6OmlzU21hbGxPck1lZGl1bSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjppc01l
ZGl1bSk6IERlbGV0ZWQuIE5vIG1vcmUgbWVkaXVtLgorCisgICAgICAgICogYm1hbGxvYy9QYWdl
Lmg6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzaXplQ2xhc3MpOgorICAgICAgICAoYm1hbGxv
Yzo6UGFnZTo6c2V0U2l6ZUNsYXNzKToKKyAgICAgICAgKGJtYWxsb2M6OlBhZ2U6Omhhc0ZyZWVM
aW5lcyk6CisgICAgICAgIChibWFsbG9jOjpQYWdlOjpzZXRIYXNGcmVlTGluZXMpOiBBZGRlZCB0
aGUgZnJlZSBsaW5lcyBiaXQuIFlvdSBnZXQgYmV0dGVyCisgICAgICAgIGNvZGVnZW4gaWYgeW91
IG1ha2UgaXQgdGhlIGxvdyBiaXQsIHNpbmNlIHJlZiAvIGRlcmVmIGNhbiB0aGVuIGFkZCAvIHN1
YgorICAgICAgICAyLiBTbyBJIGRpZCB0aGF0LgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OgorICAgICAgICAoYm1hbGxvYzo6U2l6ZXM6OnNpemVDbGFzcyk6IEV4cGFuZGVkIHRoZSBzbWFs
bCBzaXplIGNsYXNzIHRvIGluY2x1ZGUgdGhlCisgICAgICAgIG1lZGl1bSBzaXplIGNsYXNzLgor
CisgICAgICAgICogYm1hbGxvYy9TdXBlckNodW5rLmg6CisgICAgICAgIChibWFsbG9jOjpTdXBl
ckNodW5rOjpTdXBlckNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlN1cGVyQ2h1bms6OnNtYWxs
Q2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6U3VwZXJDaHVuazo6bGFyZ2VDaHVuayk6CisgICAg
ICAgIChibWFsbG9jOjpTdXBlckNodW5rOjptZWRpdW1DaHVuayk6IERlbGV0ZWQuIE5vIG1vcmUg
bWVkaXVtLgorCisgICAgICAgICogYm1hbGxvYy9WTUhlYXAuY3BwOgorICAgICAgICAoYm1hbGxv
Yzo6Vk1IZWFwOjpncm93KToKKyAgICAgICAgKiBibWFsbG9jL1ZNSGVhcC5oOgorICAgICAgICAo
Ym1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IFNldCB0aGUgaGFzIGZyZWUgbGlu
ZXMgYml0IGJlZm9yZQorICAgICAgICByZXR1cm5pbmcgYSBQYWdlIHRvIHRoZSBIZWFwIHNpbmNl
IHRoaXMgaXMgdGhlIGNvcnJlY3QgZGVmYXVsdCBzdGF0ZQorICAgICAgICB3aGVuIHdlIGZpcnN0
IGFsbG9jYXRlIGEgcGFnZS4KKworICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZU1l
ZGl1bVBhZ2UpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRl
TWVkaXVtUGFnZSk6IERlbGV0ZWQuCisKIDIwMTYtMDItMTIgIE1pY2hhZWwgU2Fib2ZmICA8bXNh
Ym9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgQkFTU0VSVHMgYWRkZWQgaW4gcjE5NjQyMSBhcmUg
Y2F1c2luZyBkZWJ1ZyB0ZXN0IGZhaWx1cmVzCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY3OTgpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDEwICszOSw2IEBACiAJCTE0REQ3ODlDMThGNDhENEEwMDk1MDcwMiAvKiBC
dW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEI0MThGNDhE
NkIwMDk1MDcwMiAvKiBDaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ3QUFBOTQxOENFNUNBNjAwMjIwMUU0IC8qIENodW5rLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QjUxOEY0OEQ2
QjAwOTUwNzAyIC8qIExpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0REEzMjA3MTg4NUY5RTYwMDcyNjlFMCAvKiBMaW5lLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4QjYxOEY0OEQ2QjAw
OTUwNzAyIC8qIE1lZGl1bUNodW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDdBQUE4RTE4Q0Q4OUUzMDAyMjAxRTQgLyogTWVkaXVtQ2h1bmsuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzhC
NzE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1MjQ3ODUxOEJDNzU3QzAwRjgwMDk4IC8qIE1lZGl1
bUxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkxNERENzhCODE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtUGFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzRTI5RTkxOENBRThCRTAwRkU4QTBG
IC8qIE1lZGl1bVBhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkxNERENzhCOTE4RjQ4RDZCMDA5NTA3MDIgLyogTWVkaXVtVHJhaXRzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDdBQUE5NjE4Q0U1
RkI2MDAyMjAxRTQgLyogTWVkaXVtVHJhaXRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkExOEY0OEQ2QjAwOTUwNzAyIC8qIFBhZ2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NkJFRTIz
MThDOTgwRDYwMDAyRDVBMiAvKiBQYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkIxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsQ2h1
bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0N0FB
QThDMThDRDM2QTcwMDIyMDFFNCAvKiBTbWFsbENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8q
IFNtYWxsTGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ1MjQ3ODYxOEJDNzU3QzAwRjgwMDk4IC8qIFNtYWxsTGluZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05Myw3ICs4OSw2IEBACiAJCTE0
MjFBODc3MThFRTQ2MkEwMEI0REQ2OCAvKiBBbGdvcml0aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxn
b3JpdGhtLmg7IHBhdGggPSBibWFsbG9jL0FsZ29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDNDQjgxQTE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU3RhdGljTXV0ZXguY3BwOyBwYXRo
ID0gYm1hbGxvYy9TdGF0aWNNdXRleC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0M0NCODFCMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTdGF0aWNNdXRleC5oOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNN
dXRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDNFMjlFOTE4Q0FFOEJFMDBG
RThBMEYgLyogTWVkaXVtUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBN
ZWRpdW1QYWdlLmg7IHBhdGggPSBibWFsbG9jL01lZGl1bVBhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBGIC8qIFNtYWxsUGFnZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTbWFsbFBhZ2UuaDsgcGF0aCA9IGJtYWxs
b2MvU21hbGxQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0VGOUFEMUE5
RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBGcmVlTGlzdC5jcHA7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZy
ZWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZyZWVMaXN0Lmg7IHBh
dGggPSBibWFsbG9jL0ZyZWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDksNyArMTA0LDYgQEAKIAkJMTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE11dGV4Lmg7IHBhdGggPSBibWFsbG9jL011
dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NEY3QkZCMThCRkM1MTcwMDM1
MzdGMyAvKiBWTUhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
Vk1IZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQ0RjdCRkMxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWTUhlYXAuaDsgcGF0aCA9IGJtYWxsb2MvVk1IZWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NTI0Nzg1MThCQzc1N0MwMEY4MDA5
OCAvKiBNZWRpdW1MaW5lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGl1
bUxpbmUuaDsgcGF0aCA9IGJtYWxsb2MvTWVkaXVtTGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTggLyogU21hbGxMaW5lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNtYWxsTGluZS5oOyBwYXRoID0gYm1hbGxvYy9T
bWFsbExpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ1RjY4NTUxNzlEQzhD
QTAwRDY1NTk4IC8qIEFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gQWxsb2NhdG9yLmNwcDsgcGF0aCA9IGJtYWxsb2MvQWxs
b2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRp
b25JZGVudGlmaWVyID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTE0NUY2ODU2MTc5REM4Q0EwMEQ2
NTU5OCAvKiBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5n
ID0gMDsgbmFtZSA9IEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9BbGxvY2F0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0g
eGNvZGUubGFuZy5vYmpjcHA7IH07CkBAIC0xMjQsOSArMTE4LDcgQEAKIAkJMTQ3OUUyMTQxN0Ex
QTYzRTAwNkQ0RTlEIC8qIFZNQWxsb2NhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBs
aW5lRW5kaW5nID0gMDsgbmFtZSA9IFZNQWxsb2NhdGUuaDsgcGF0aCA9IGJtYWxsb2MvVk1BbGxv
Y2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklk
ZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTQ3QUFBODgxOENEMTdDRTAwMjIw
MUU0IC8qIExhcmdlQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGFy
Z2VDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9MYXJnZUNodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0N0FBQThDMThDRDM2QTcwMDIyMDFFNCAvKiBTbWFsbENodW5rLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNtYWxsQ2h1bmsuaDsgcGF0aCA9IGJtYWxs
b2MvU21hbGxDaHVuay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDdBQUE4RTE4
Q0Q4OUUzMDAyMjAxRTQgLyogTWVkaXVtQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTWVkaXVtQ2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvTWVkaXVtQ2h1bmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3QUFBOTQxOENFNUNBNjAwMjIwMUU0IC8qIENo
dW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENodW5rLmg7IHBhdGggPSBi
bWFsbG9jL0NodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0N0FBQTk2MThD
RTVGQjYwMDIyMDFFNCAvKiBNZWRpdW1UcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTWVkaXVtVHJhaXRzLmg7IHBhdGggPSBibWFsbG9jL01lZGl1bVRyYWl0cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDdBQUE5NzE4Q0U1RkI2MDAyMjAxRTQgLyog
U21hbGxUcmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxUcmFp
dHMuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnLmg7IHBhdGggPSBibWFsbG9j
L0JvdW5kYXJ5VGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTYwMThB
NDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IE9iamVjdFR5cGUuaDsgcGF0aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgwLDcgKzE3Miw3IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkxNDQ4QzJGRDE4RjM3NTJCMDA1MDI4MzkgLyogYXBpICovLAogCQkJCTE0RDlEQjREMTdG
Mjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKLQkJCQkxNDdBQUE5QzE4Q0U2MDEwMDAyMjAxRTQg
LyogaGVhcDogbGFyZ2UgfCB4bGFyZ2UgKi8sCisJCQkJMTQ3QUFBOUMxOENFNjAxMDAwMjIwMUU0
IC8qIGhlYXA6IGxhcmdlICovLAogCQkJCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFw
OiBzbWFsbCB8IG1lZGl1bSAqLywKIAkJCQkxNEQ5REI0RTE3RjI4NjZFMDBFQUFCNzkgLyogaGVh
cCAqLywKIAkJCQkxNEQ5REI0RjE3RjI4Njg5MDBFQUFCNzkgLyogc3RkbGliICovLApAQCAtMjAz
LDEwICsxOTUsNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMTQ3QUFBOTQxOENFNUNBNjAwMjIw
MUU0IC8qIENodW5rLmggKi8sCiAJCQkJMTREQTMyMDcxODg1RjlFNjAwNzI2OUUwIC8qIExpbmUu
aCAqLywKLQkJCQkxNDdBQUE4RTE4Q0Q4OUUzMDAyMjAxRTQgLyogTWVkaXVtQ2h1bmsuaCAqLywK
LQkJCQkxNDUyNDc4NTE4QkM3NTdDMDBGODAwOTggLyogTWVkaXVtTGluZS5oICovLAotCQkJCTE0
M0UyOUU5MThDQUU4QkUwMEZFOEEwRiAvKiBNZWRpdW1QYWdlLmggKi8sCi0JCQkJMTQ3QUFBOTYx
OENFNUZCNjAwMjIwMUU0IC8qIE1lZGl1bVRyYWl0cy5oICovLAogCQkJCTE0NkJFRTIzMThDOTgw
RDYwMDAyRDVBMiAvKiBQYWdlLmggKi8sCiAJCQkJMTQ3QUFBOEMxOENEMzZBNzAwMjIwMUU0IC8q
IFNtYWxsQ2h1bmsuaCAqLywKIAkJCQkxNDUyNDc4NjE4QkM3NTdDMDBGODAwOTggLyogU21hbGxM
aW5lLmggKi8sCkBAIC0yMTYsNyArMjA0LDcgQEAKIAkJCW5hbWUgPSAiaGVhcDogc21hbGwgfCBt
ZWRpdW0iOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJMTQ3QUFBOUMxOENF
NjAxMDAwMjIwMUU0IC8qIGhlYXA6IGxhcmdlIHwgeGxhcmdlICovID0geworCQkxNDdBQUE5QzE4
Q0U2MDEwMDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAogCQkJCTE0MTdGNjQ1MThCNTRBNzAwMDc2RkEzRiAvKiBCZWdpblRh
Zy5oICovLApAQCAtMjMwLDcgKzIxOCw3IEBACiAJCQkJMTQ2QkVFMjExOEM4NDVBRTAwMDJENUEy
IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8sCiAJCQkJMTQ2QkVFMUUxOEM4NDFDNTAwMDJE
NUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovLAogCQkJKTsKLQkJCW5hbWUgPSAiaGVhcDog
bGFyZ2UgfCB4bGFyZ2UiOworCQkJbmFtZSA9ICJoZWFwOiBsYXJnZSI7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OwogCQkxNEI2NTBDNDE4RjM5RjQ4MDA3NTE5NjggLyogQ29uZmln
dXJhdGlvbnMgKi8gPSB7CkBAIC0zMjYsNyArMzE0LDYgQEAKIAkJCQkxNERENzhCNDE4RjQ4RDZC
MDA5NTA3MDIgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENBMThGNDhENzUw
MDk1MDcwMiAvKiBNdXRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzQ0I4MUQxOTAyMkJDOTAw
QjE2QTQ1IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhCOTE4RjQ4
RDZCMDA5NTA3MDIgLyogTWVkaXVtVHJhaXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4QzMw
MTE4RjM3NTRDMDA1MDI4MzkgLyogYm1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDNjIx
NkYxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NERENzg5QTE4RjQ4RDRBMDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtMzQ5LDE1ICszMzYsMTIgQEAKIAkJCQkxNDg5NUQ5MjFBM0EzMTlDMDAwNjIzNUQgLyogRW52
aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAv
KiBWTUhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAv
KiBIZWFwLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzhCODE4RjQ4RDZCMDA5NTA3MDIgLyog
TWVkaXVtUGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZEM0M4
IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUw
NzAyIC8qIEFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAw
OTUwNzAyIC8qIFNtYWxsUGFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OEUxOEY0OEND
RDAwOTUwNzAyIC8qIEJvdW5kYXJ5VGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDODE4
RjQ4RDc1MDA5NTA3MDIgLyogRml4ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3
OEI3MThGNDhENkIwMDk1MDcwMiAvKiBNZWRpdW1MaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogT3duZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0
REQ3OEI2MThGNDhENkIwMDk1MDcwMiAvKiBNZWRpdW1DaHVuay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRERDc4QkMxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsTGluZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRERDc4OTgxOEY0OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRERDc4Q0IxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclByb2Nlc3MuaCBpbiBIZWFk
ZXJzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTk2Nzk4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIEFsbG9jYXRvcjo6QWxsb2NhdG9yKEhlYXAqIGhlYXAs
IERlYWxsb2MKICAgICA6IG1faXNCbWFsbG9jRW5hYmxlZChoZWFwLT5lbnZpcm9ubWVudCgpLmlz
Qm1hbGxvY0VuYWJsZWQoKSkKICAgICAsIG1fZGVhbGxvY2F0b3IoZGVhbGxvY2F0b3IpCiB7Ci0g
ICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxpZ25tZW50OyBzaXplIDw9IG1lZGl1bU1h
eDsgc2l6ZSArPSBhbGlnbm1lbnQpCisgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxp
Z25tZW50OyBzaXplIDw9IHNtYWxsTWF4OyBzaXplICs9IGFsaWdubWVudCkKICAgICAgICAgbV9i
dW1wQWxsb2NhdG9yc1tzaXplQ2xhc3Moc2l6ZSldLmluaXQoc2l6ZSk7CiB9CiAKQEAgLTg3LDE2
ICs4Nyw2IEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChzaXplIDw9IG1lZGl1bU1heCAmJiBhbGlnbm1lbnQgPD0g
bWVkaXVtTGluZVNpemUpIHsKLSAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KHNpemUsIHNtYWxsTWF4
ICsgU2l6ZXM6OmFsaWdubWVudCk7Ci0gICAgICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxp
Z25tZW50IC0gMTsKLSAgICAgICAgd2hpbGUgKHZvaWQqIHAgPSBhbGxvY2F0ZShzaXplKSkgewot
ICAgICAgICAgICAgaWYgKCF0ZXN0KHAsIGFsaWdubWVudE1hc2spKQotICAgICAgICAgICAgICAg
IHJldHVybiBwOwotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5kZWFsbG9jYXRlKHApOwotICAg
ICAgICB9Ci0gICAgfQotCiAgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9
IGxhcmdlTWF4KSB7CiAgICAgICAgIHNpemUgPSBzdGQ6Om1heChsYXJnZU1pbiwgcm91bmRVcFRv
TXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSkpOwogICAgICAgICBhbGlnbm1lbnQgPSBy
b3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwpAQCAtMTMwLDE3
ICsxMjAsMTIgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogICAg
ICAgICBvbGRTaXplID0gb2JqZWN0U2l6ZShwYWdlLT5zaXplQ2xhc3MoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBjYXNlIE1lZGl1bTogewotICAgICAgICBNZWRpdW1QYWdlKiBwYWdl
ID0gTWVkaXVtUGFnZTo6Z2V0KE1lZGl1bUxpbmU6OmdldChvYmplY3QpKTsKLSAgICAgICAgb2xk
U2l6ZSA9IG9iamVjdFNpemUocGFnZS0+c2l6ZUNsYXNzKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9CiAgICAgY2FzZSBMYXJnZTogewogICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwogICAgICAgICBMYXJnZU9iamVj
dCBsYXJnZU9iamVjdChvYmplY3QpOwogICAgICAgICBvbGRTaXplID0gbGFyZ2VPYmplY3Quc2l6
ZSgpOwogCi0gICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbWVkaXVt
TWF4KSB7CisgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gc21hbGxN
YXgpIHsKICAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxp
Z25tZW50PihuZXdTaXplKTsKICAgICAgICAgICAgIGlmIChvbGRTaXplIC0gbmV3U2l6ZSA+PSBs
YXJnZU1pbikgewogICAgICAgICAgICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VP
YmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7CkBAIC0yMDIsNyArMTg3
LDcgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogCiB2b2lkIEFs
bG9jYXRvcjo6c2NhdmVuZ2UoKQogewotICAgIGZvciAodW5zaWduZWQgc2hvcnQgaSA9IGFsaWdu
bWVudDsgaSA8PSBtZWRpdW1NYXg7IGkgKz0gYWxpZ25tZW50KSB7CisgICAgZm9yICh1bnNpZ25l
ZCBzaG9ydCBpID0gYWxpZ25tZW50OyBpIDw9IHNtYWxsTWF4OyBpICs9IGFsaWdubWVudCkgewog
ICAgICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3JzW3NpemVD
bGFzcyhpKV07CiAgICAgICAgIEJ1bXBSYW5nZUNhY2hlJiBidW1wUmFuZ2VDYWNoZSA9IG1fYnVt
cFJhbmdlQ2FjaGVzW3NpemVDbGFzcyhpKV07CiAKQEAgLTIyNCwxMCArMjA5LDcgQEAgTk9fSU5M
SU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0bwogICAgIEJ1bXBSYW5nZUNhY2hlJiBi
dW1wUmFuZ2VDYWNoZSA9IG1fYnVtcFJhbmdlQ2FjaGVzW3NpemVDbGFzc107CiAKICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7
Ci0gICAgaWYgKHNpemVDbGFzcyA8PSBibWFsbG9jOjpzaXplQ2xhc3Moc21hbGxNYXgpKQotICAg
ICAgICBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlcyhsb2NrLCBzaXplQ2xhc3MsIGFsbG9jYXRvciwgYnVtcFJhbmdlQ2FjaGUpOwotICAgIGVs
c2UKLSAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVNZWRp
dW1CdW1wUmFuZ2VzKGxvY2ssIHNpemVDbGFzcywgYWxsb2NhdG9yLCBidW1wUmFuZ2VDYWNoZSk7
CisgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVTbWFsbEJ1bXBS
YW5nZXMobG9jaywgc2l6ZUNsYXNzLCBhbGxvY2F0b3IsIGJ1bXBSYW5nZUNhY2hlKTsKIH0KIAog
SU5MSU5FIHZvaWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRvciYgYWxs
b2NhdG9yLCBzaXplX3Qgc2l6ZUNsYXNzKQpAQCAtMjU3LDEwICsyMzksMTEgQEAgdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNpemVfdAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFi
bGVkKQogICAgICAgICByZXR1cm4gbWFsbG9jKHNpemUpOwogCi0gICAgaWYgKHNpemUgPD0gbWVk
aXVtTWF4KSB7CisgICAgaWYgKHNpemUgPD0gc21hbGxNYXgpIHsKICAgICAgICAgc2l6ZV90IHNp
emVDbGFzcyA9IGJtYWxsb2M6OnNpemVDbGFzcyhzaXplKTsKICAgICAgICAgQnVtcEFsbG9jYXRv
ciYgYWxsb2NhdG9yID0gbV9idW1wQWxsb2NhdG9yc1tzaXplQ2xhc3NdOwotICAgICAgICByZWZp
bGxBbGxvY2F0b3IoYWxsb2NhdG9yLCBzaXplQ2xhc3MpOworICAgICAgICBpZiAoIWFsbG9jYXRv
ci5jYW5BbGxvY2F0ZSgpKSAvLyBQb3NzaWJsZSBpbiB0aGUgemVybyBjYXNlLgorICAgICAgICAg
ICAgcmVmaWxsQWxsb2NhdG9yKGFsbG9jYXRvciwgc2l6ZUNsYXNzKTsKICAgICAgICAgcmV0dXJu
IGFsbG9jYXRvci5hbGxvY2F0ZSgpOwogICAgIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5oCShyZXZpc2lvbiAxOTY3OTgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MiwxNSArNTIsMTQgQEAgcHJpdmF0ZToKICAg
ICBib29sIGFsbG9jYXRlRmFzdENhc2Uoc2l6ZV90LCB2b2lkKiYpOwogICAgIHZvaWQqIGFsbG9j
YXRlU2xvd0Nhc2Uoc2l6ZV90KTsKICAgICAKLSAgICB2b2lkKiBhbGxvY2F0ZU1lZGl1bShzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc2l6ZV90KTsKICAgICB2b2lkKiBhbGxvY2F0
ZVhMYXJnZShzaXplX3QpOwogICAgIAogICAgIHZvaWQgcmVmaWxsQWxsb2NhdG9yKEJ1bXBBbGxv
Y2F0b3ImLCBzaXplX3Qgc2l6ZUNsYXNzKTsKICAgICB2b2lkIHJlZmlsbEFsbG9jYXRvclNsb3dD
YXNlKEJ1bXBBbGxvY2F0b3ImLCBzaXplX3Qgc2l6ZUNsYXNzKTsKICAgICAKLSAgICBzdGQ6OmFy
cmF5PEJ1bXBBbGxvY2F0b3IsIG1lZGl1bU1heCAvIGFsaWdubWVudD4gbV9idW1wQWxsb2NhdG9y
czsKLSAgICBzdGQ6OmFycmF5PEJ1bXBSYW5nZUNhY2hlLCBtZWRpdW1NYXggLyBhbGlnbm1lbnQ+
IG1fYnVtcFJhbmdlQ2FjaGVzOworICAgIHN0ZDo6YXJyYXk8QnVtcEFsbG9jYXRvciwgc21hbGxN
YXggLyBhbGlnbm1lbnQ+IG1fYnVtcEFsbG9jYXRvcnM7CisgICAgc3RkOjphcnJheTxCdW1wUmFu
Z2VDYWNoZSwgc21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fYnVtcFJhbmdlQ2FjaGVzOwogCiAgICAg
Ym9vbCBtX2lzQm1hbGxvY0VuYWJsZWQ7CiAgICAgRGVhbGxvY2F0b3ImIG1fZGVhbGxvY2F0b3I7
CkBAIC02OCw3ICs2Nyw3IEBAIHByaXZhdGU6CiAKIGlubGluZSBib29sIEFsbG9jYXRvcjo6YWxs
b2NhdGVGYXN0Q2FzZShzaXplX3Qgc2l6ZSwgdm9pZComIG9iamVjdCkKIHsKLSAgICBpZiAoc2l6
ZSA+IG1lZGl1bU1heCkKKyAgICBpZiAoc2l6ZSA+IHNtYWxsTWF4KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBCdW1wQWxsb2NhdG9yJiBhbGxvY2F0b3IgPSBtX2J1bXBBbGxvY2F0b3Jz
W3NpemVDbGFzcyhzaXplKV07CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxv
Y2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0
b3IuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CdW1wQWxs
b2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIGJt
YWxsb2MgewogCi0vLyBIZWxwZXIgb2JqZWN0IGZvciBhbGxvY2F0aW5nIHNtYWxsIGFuZCBtZWRp
dW0gb2JqZWN0cy4KKy8vIEhlbHBlciBvYmplY3QgZm9yIGFsbG9jYXRpbmcgc21hbGwgb2JqZWN0
cy4KIAogY2xhc3MgQnVtcEFsbG9jYXRvciB7CiBwdWJsaWM6CkBAIC03OSw4ICs3OSw4IEBAIGlu
bGluZSB2b2lkIEJ1bXBBbGxvY2F0b3I6OnZhbGlkYXRlKHZvaWQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKLSAgICBCQVNTRVJUKG1fc2l6ZSA8PSBtZWRpdW1NYXgpOwotICAgIEJBU1NF
UlQoaXNNZWRpdW0ocHRyKSk7CisgICAgQkFTU0VSVChtX3NpemUgPD0gc21hbGxNYXgpOworICAg
IEJBU1NFUlQoaXNTbWFsbChwdHIpKTsKIH0KIAogaW5saW5lIHZvaWQqIEJ1bXBBbGxvY2F0b3I6
OmFsbG9jYXRlKCkKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHJldmlzaW9uIDE5Njc5OCkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NyArNzcsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgVHJhaXRzPgogaW5saW5lIGF1dG8g
Q2h1bms8VHJhaXRzPjo6Z2V0KHZvaWQqIG9iamVjdCkgLT4gQ2h1bmsqCiB7Ci0gICAgQkFTU0VS
VChpc1NtYWxsT3JNZWRpdW0ob2JqZWN0KSk7CisgICAgQkFTU0VSVChpc1NtYWxsKG9iamVjdCkp
OwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHVuayo+KG1hc2sob2JqZWN0LCBjaHVua01hc2sp
KTsKIH0KIApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDE5Njc5OCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NywxNCArNzcsOCBAQCB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNz
T2JqZWN0TG9nKCkKICAgICBIZWFwKiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENh
c2UoKTsKICAgICAKICAgICBmb3IgKGF1dG8qIG9iamVjdCA6IG1fb2JqZWN0TG9nKSB7Ci0gICAg
ICAgIGlmIChpc1NtYWxsKG9iamVjdCkpIHsKLSAgICAgICAgICAgIFNtYWxsTGluZSogbGluZSA9
IFNtYWxsTGluZTo6Z2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBoZWFwLT5kZXJlZlNtYWxsTGlu
ZShsb2NrLCBsaW5lKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEJBU1NFUlQoaXNN
ZWRpdW0ob2JqZWN0KSk7Ci0gICAgICAgICAgICBNZWRpdW1MaW5lKiBsaW5lID0gTWVkaXVtTGlu
ZTo6Z2V0KG9iamVjdCk7Ci0gICAgICAgICAgICBoZWFwLT5kZXJlZk1lZGl1bUxpbmUobG9jaywg
bGluZSk7Ci0gICAgICAgIH0KKyAgICAgICAgU21hbGxMaW5lKiBsaW5lID0gU21hbGxMaW5lOjpn
ZXQob2JqZWN0KTsKKyAgICAgICAgaGVhcC0+ZGVyZWZTbWFsbExpbmUobG9jaywgbGluZSk7CiAg
ICAgfQogICAgIAogICAgIG1fb2JqZWN0TG9nLmNsZWFyKCk7CkBAIC0xMDMsNyArOTcsNyBAQCB2
b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pCiAgICAgaWYgKCFvYmplY3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc1NtYWxsT3JNZWRpdW0ob2JqZWN0KSkgewor
ICAgIGlmIChpc1NtYWxsKG9iamVjdCkpIHsKICAgICAgICAgcHJvY2Vzc09iamVjdExvZygpOwog
ICAgICAgICBtX29iamVjdExvZy5wdXNoKG9iamVjdCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgJKHJldmlzaW9uIDE5Njc5OCkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCBwcml2YXRlOgogCiBpbmxpbmUgYm9vbCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0
ZUZhc3RDYXNlKHZvaWQqIG9iamVjdCkKIHsKLSAgICBpZiAoIWlzU21hbGxPck1lZGl1bShvYmpl
Y3QpKQorICAgIGlmICghaXNTbWFsbChvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBCQVNTRVJUKG9iamVjdCk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlz
aW9uIDE5Njc5OCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCiAjaW5jbHVk
ZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNsdWRlICJMaW5lLmgiCi0jaW5jbHVkZSAiTWVkaXVtQ2h1
bmsuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogI2luY2x1
ZGUgIlNtYWxsQ2h1bmsuaCIKQEAgLTQ2LDM2ICs0NSwzMiBAQCBIZWFwOjpIZWFwKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mCiAKIHZvaWQgSGVhcDo6aW5pdGlhbGl6ZUxpbmVNZXRhZGF0
YSgpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBzaG9ydCBzaXplID0gYWxpZ25tZW50OyBzaXplIDw9
IHNtYWxsTWF4OyBzaXplICs9IGFsaWdubWVudCkgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBz
dGFydE9mZnNldCA9IDA7Ci0gICAgICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAwOyBsaW5l
TnVtYmVyIDwgU21hbGxQYWdlOjpsaW5lQ291bnQgLSAxOyArK2xpbmVOdW1iZXIpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50OwotICAgICAgICAgICAgdW5zaWduZWQg
c2hvcnQgcmVtYWluZGVyOwotICAgICAgICAgICAgZGl2aWRlUm91bmRpbmdVcChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBzaG9ydD4oU21hbGxQYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6
ZSwgb2JqZWN0Q291bnQsIHJlbWFpbmRlcik7Ci0gICAgICAgICAgICBCQVNTRVJUKG9iamVjdENv
dW50KTsKLSAgICAgICAgICAgIG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVts
aW5lTnVtYmVyXSA9IHsgc3RhcnRPZmZzZXQsIG9iamVjdENvdW50IH07Ci0gICAgICAgICAgICBz
dGFydE9mZnNldCA9IHJlbWFpbmRlciA/IHNpemUgLSByZW1haW5kZXIgOiAwOwotICAgICAgICB9
CisgICAgLy8gV2UgYXNzdW1lIHRoYXQgbV9zbWFsbExpbmVNZXRhZGF0YSBpcyB6ZXJvLWZpbGxl
ZC4KIAotICAgICAgICAvLyBUaGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIHJvdW5kcyBkb3duIGlu
c3RlYWQgb2YgdXAgYmVjYXVzZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJsYXAgaW50byBpdHMg
bmVpZ2hib3IuCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgc2hvcnQ+KChTbWFsbFBhZ2U6OmxpbmVTaXplIC0gc3RhcnRPZmZzZXQpIC8g
c2l6ZSk7Ci0gICAgICAgIG1fc21hbGxMaW5lTWV0YWRhdGFbc2l6ZUNsYXNzKHNpemUpXVtTbWFs
bFBhZ2U6OmxpbmVDb3VudCAtIDFdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQgfTsKLSAg
ICB9CisgICAgZm9yIChzaXplX3Qgc2l6ZSA9IGFsaWdubWVudDsgc2l6ZSA8PSBzbWFsbE1heDsg
c2l6ZSArPSBhbGlnbm1lbnQpIHsKKyAgICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IGJtYWxsb2M6
OnNpemVDbGFzcyhzaXplKTsKKyAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBtX3NtYWxsTGluZU1l
dGFkYXRhW3NpemVDbGFzc107CisKKyAgICAgICAgc2l6ZV90IG9iamVjdCA9IDA7CisgICAgICAg
IHNpemVfdCBsaW5lID0gMDsKKyAgICAgICAgd2hpbGUgKG9iamVjdCA8IHZtUGFnZVNpemUpIHsK
KyAgICAgICAgICAgIGxpbmUgPSBvYmplY3QgLyBTbWFsbFBhZ2U6OmxpbmVTaXplOworICAgICAg
ICAgICAgc2l6ZV90IGxlZnRvdmVyID0gb2JqZWN0ICUgU21hbGxQYWdlOjpsaW5lU2l6ZTsKKwor
ICAgICAgICAgICAgc2l6ZV90IG9iamVjdENvdW50OworICAgICAgICAgICAgc2l6ZV90IHJlbWFp
bmRlcjsKKyAgICAgICAgICAgIGRpdmlkZVJvdW5kaW5nVXAoU21hbGxQYWdlOjpsaW5lU2l6ZSAt
IGxlZnRvdmVyLCBzaXplLCBvYmplY3RDb3VudCwgcmVtYWluZGVyKTsKKworICAgICAgICAgICAg
bWV0YWRhdGFbbGluZV0gPSB7IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihsZWZ0b3Zlciks
IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihvYmplY3RDb3VudCkgfTsKIAotICAgIGZvciAo
dW5zaWduZWQgc2hvcnQgc2l6ZSA9IHNtYWxsTWF4ICsgYWxpZ25tZW50OyBzaXplIDw9IG1lZGl1
bU1heDsgc2l6ZSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RhcnRP
ZmZzZXQgPSAwOwotICAgICAgICBmb3IgKHNpemVfdCBsaW5lTnVtYmVyID0gMDsgbGluZU51bWJl
ciA8IE1lZGl1bVBhZ2U6OmxpbmVDb3VudCAtIDE7ICsrbGluZU51bWJlcikgewotICAgICAgICAg
ICAgdW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzaG9y
dCByZW1haW5kZXI7Ci0gICAgICAgICAgICBkaXZpZGVSb3VuZGluZ1VwKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihNZWRpdW1QYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSwgc2l6ZSwg
b2JqZWN0Q291bnQsIHJlbWFpbmRlcik7Ci0gICAgICAgICAgICBCQVNTRVJUKG9iamVjdENvdW50
KTsKLSAgICAgICAgICAgIG1fbWVkaXVtTGluZU1ldGFkYXRhW3NpemVDbGFzcyhzaXplKV1bbGlu
ZU51bWJlcl0gPSB7IHN0YXJ0T2Zmc2V0LCBvYmplY3RDb3VudCB9OwotICAgICAgICAgICAgc3Rh
cnRPZmZzZXQgPSByZW1haW5kZXIgPyBzaXplIC0gcmVtYWluZGVyIDogMDsKKyAgICAgICAgICAg
IG9iamVjdCArPSBvYmplY3RDb3VudCAqIHNpemU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBU
aGUgbGFzdCBsaW5lIGluIHRoZSBwYWdlIHJvdW5kcyBkb3duIGluc3RlYWQgb2YgdXAgYmVjYXVz
ZSBpdCdzIG5vdCBhbGxvd2VkIHRvIG92ZXJsYXAgaW50byBpdHMgbmVpZ2hib3IuCi0gICAgICAg
IHVuc2lnbmVkIHNob3J0IG9iamVjdENvdW50ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KChNZWRpdW1QYWdlOjpsaW5lU2l6ZSAtIHN0YXJ0T2Zmc2V0KSAvIHNpemUpOwotICAgICAgICBt
X21lZGl1bUxpbmVNZXRhZGF0YVtzaXplQ2xhc3Moc2l6ZSldW01lZGl1bVBhZ2U6OmxpbmVDb3Vu
dCAtIDFdID0geyBzdGFydE9mZnNldCwgb2JqZWN0Q291bnQgfTsKKyAgICAgICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGxhc3Qgb2JqZWN0IGluIGEgcGFnZSB0byBlc2NhcGUgdGhlIHBhZ2UuCisgICAg
ICAgIGlmIChvYmplY3QgPiB2bVBhZ2VTaXplKSB7CisgICAgICAgICAgICBCQVNTRVJUKG1ldGFk
YXRhW2xpbmVdLm9iamVjdENvdW50KTsKKyAgICAgICAgICAgIC0tbWV0YWRhdGFbbGluZV0ub2Jq
ZWN0Q291bnQ7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTkwLDcgKzg1LDYgQEAgdm9pZCBI
ZWFwOjpzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YQogICAgIHdhaXRVbnRpbEZhbHNlKGxv
Y2ssIHNsZWVwRHVyYXRpb24sIG1faXNBbGxvY2F0aW5nUGFnZXMpOwogCiAgICAgc2NhdmVuZ2VT
bWFsbFBhZ2VzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwotICAgIHNjYXZlbmdlTWVkaXVtUGFnZXMo
bG9jaywgc2xlZXBEdXJhdGlvbik7CiAgICAgc2NhdmVuZ2VMYXJnZU9iamVjdHMobG9jaywgc2xl
ZXBEdXJhdGlvbik7CiAKICAgICBzbGVlcChsb2NrLCBzbGVlcER1cmF0aW9uKTsKQEAgLTEwNCwx
NCArOTgsNiBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1CiAgICAg
fQogfQogCi12b2lkIEhlYXA6OnNjYXZlbmdlTWVkaXVtUGFnZXMoc3RkOjp1bmlxdWVfbG9jazxT
dGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlv
bikKLXsKLSAgICB3aGlsZSAobV9tZWRpdW1QYWdlcy5zaXplKCkpIHsKLSAgICAgICAgbV92bUhl
YXAuZGVhbGxvY2F0ZU1lZGl1bVBhZ2UobG9jaywgbV9tZWRpdW1QYWdlcy5wb3AoKSk7Ci0gICAg
ICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1faXNBbGxvY2F0aW5nUGFn
ZXMpOwotICAgIH0KLX0KLQogdm9pZCBIZWFwOjpzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBz
bGVlcER1cmF0aW9uKQogewogICAgIHdoaWxlIChMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1f
bGFyZ2VPYmplY3RzLnRha2VHcmVlZHkoKSkgewpAQCAtMTI1LDgxICsxMTEsMzcgQEAgdm9pZCBI
ZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OgogICAgIEJBU1NFUlQoIXJhbmdlQ2Fj
aGUuc2l6ZSgpKTsKICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBhbGxvY2F0ZVNtYWxsUGFnZShsb2Nr
LCBzaXplQ2xhc3MpOwogICAgIFNtYWxsTGluZSogbGluZXMgPSBwYWdlLT5iZWdpbigpOwotCi0g
ICAgLy8gRHVlIHRvIG92ZXJsYXAgZnJvbSB0aGUgcHJldmlvdXMgbGluZSwgdGhlIGxhc3QgbGlu
ZSBpbiB0aGUgcGFnZSBtYXkgbm90IGJlIGFibGUgdG8gZml0IGFueSBvYmplY3RzLgotICAgIHNp
emVfdCBlbmQgPSBTbWFsbFBhZ2U6OmxpbmVDb3VudDsKLSAgICBpZiAoIW1fc21hbGxMaW5lTWV0
YWRhdGFbc2l6ZUNsYXNzXVtTbWFsbFBhZ2U6OmxpbmVDb3VudCAtIDFdLm9iamVjdENvdW50KQot
ICAgICAgICAtLWVuZDsKKyAgICBCQVNTRVJUKHBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSk7CiAK
ICAgICAvLyBGaW5kIGEgZnJlZSBsaW5lLgotICAgIGZvciAoc2l6ZV90IGxpbmVOdW1iZXIgPSAw
OyBsaW5lTnVtYmVyIDwgZW5kOyArK2xpbmVOdW1iZXIpIHsKKyAgICBmb3IgKHNpemVfdCBsaW5l
TnVtYmVyID0gMDsgbGluZU51bWJlciA8IFNtYWxsUGFnZTo6bGluZUNvdW50OyArK2xpbmVOdW1i
ZXIpIHsKICAgICAgICAgaWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQogICAg
ICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEg
PSBtX3NtYWxsTGluZU1ldGFkYXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CisgICAgICAgIGlm
ICghbGluZU1ldGFkYXRhLm9iamVjdENvdW50KQorICAgICAgICAgICAgY29udGludWU7CisKICAg
ICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMgbWlnaHQgbm90
IGZpdCBpbiB0aGUgY2FjaGUuCiAgICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUoKSA9PSByYW5n
ZUNhY2hlLmNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIG1fc21hbGxQYWdlc1dpdGhGcmVlTGlu
ZXNbc2l6ZUNsYXNzXS5wdXNoKHBhZ2UpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX3NtYWxsTGluZU1ldGFk
YXRhW3NpemVDbGFzc11bbGluZU51bWJlcl07CiAgICAgICAgIGNoYXIqIGJlZ2luID0gbGluZXNb
bGluZU51bWJlcl0uYmVnaW4oKSArIGxpbmVNZXRhZGF0YS5zdGFydE9mZnNldDsKICAgICAgICAg
dW5zaWduZWQgc2hvcnQgb2JqZWN0Q291bnQgPSBsaW5lTWV0YWRhdGEub2JqZWN0Q291bnQ7CiAg
ICAgICAgIGxpbmVzW2xpbmVOdW1iZXJdLnJlZihsb2NrLCBsaW5lTWV0YWRhdGEub2JqZWN0Q291
bnQpOwogICAgICAgICBwYWdlLT5yZWYobG9jayk7CiAKICAgICAgICAgLy8gTWVyZ2Ugd2l0aCBz
dWJzZXF1ZW50IGZyZWUgbGluZXMuCi0gICAgICAgIHdoaWxlICgrK2xpbmVOdW1iZXIgPCBlbmQp
IHsKKyAgICAgICAgd2hpbGUgKCsrbGluZU51bWJlciA8IFNtYWxsUGFnZTo6bGluZUNvdW50KSB7
CiAgICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0ucmVmQ291bnQobG9jaykpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIExpbmVNZXRhZGF0YSYgbGluZU1ldGFk
YXRhID0gbV9zbWFsbExpbmVNZXRhZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOwotICAgICAg
ICAgICAgb2JqZWN0Q291bnQgKz0gbGluZU1ldGFkYXRhLm9iamVjdENvdW50OwotICAgICAgICAg
ICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCk7
Ci0gICAgICAgICAgICBwYWdlLT5yZWYobG9jayk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IWFsbG9jYXRvci5jYW5BbGxvY2F0ZSgpKQotICAgICAgICAgICAgYWxsb2NhdG9yLnJlZmlsbCh7
IGJlZ2luLCBvYmplY3RDb3VudCB9KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmFuZ2VD
YWNoZS5wdXNoKHsgYmVnaW4sIG9iamVjdENvdW50IH0pOwotICAgIH0KLX0KLQotdm9pZCBIZWFw
OjphbGxvY2F0ZU1lZGl1bUJ1bXBSYW5nZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYg
bG9jaywgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYgYWxsb2NhdG9yLCBCdW1wUmFu
Z2VDYWNoZSYgcmFuZ2VDYWNoZSkKLXsKLSAgICBNZWRpdW1QYWdlKiBwYWdlID0gYWxsb2NhdGVN
ZWRpdW1QYWdlKGxvY2ssIHNpemVDbGFzcyk7Ci0gICAgQkFTU0VSVCghcmFuZ2VDYWNoZS5zaXpl
KCkpOwotICAgIE1lZGl1bUxpbmUqIGxpbmVzID0gcGFnZS0+YmVnaW4oKTsKLQotICAgIC8vIER1
ZSB0byBvdmVybGFwIGZyb20gdGhlIHByZXZpb3VzIGxpbmUsIHRoZSBsYXN0IGxpbmUgaW4gdGhl
IHBhZ2UgbWF5IG5vdCBiZSBhYmxlIHRvIGZpdCBhbnkgb2JqZWN0cy4KLSAgICBzaXplX3QgZW5k
ID0gTWVkaXVtUGFnZTo6bGluZUNvdW50OwotICAgIGlmICghbV9tZWRpdW1MaW5lTWV0YWRhdGFb
c2l6ZUNsYXNzXVtNZWRpdW1QYWdlOjpsaW5lQ291bnQgLSAxXS5vYmplY3RDb3VudCkKLSAgICAg
ICAgLS1lbmQ7Ci0KLSAgICAvLyBGaW5kIGEgZnJlZSBsaW5lLgotICAgIGZvciAoc2l6ZV90IGxp
bmVOdW1iZXIgPSAwOyBsaW5lTnVtYmVyIDwgZW5kOyArK2xpbmVOdW1iZXIpIHsKLSAgICAgICAg
aWYgKGxpbmVzW2xpbmVOdW1iZXJdLnJlZkNvdW50KGxvY2spKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgLy8gSW4gYSBmcmFnbWVudGVkIHBhZ2UsIHNvbWUgZnJlZSByYW5nZXMg
bWlnaHQgbm90IGZpdCBpbiB0aGUgY2FjaGUuCi0gICAgICAgIGlmIChyYW5nZUNhY2hlLnNpemUo
KSA9PSByYW5nZUNhY2hlLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICAgIG1fbWVkaXVtUGFnZXNX
aXRoRnJlZUxpbmVzW3NpemVDbGFzc10ucHVzaChwYWdlKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotCi0gICAgICAgIExpbmVNZXRhZGF0YSYgbGluZU1ldGFkYXRhID0gbV9tZWRp
dW1MaW5lTWV0YWRhdGFbc2l6ZUNsYXNzXVtsaW5lTnVtYmVyXTsKLSAgICAgICAgY2hhciogYmVn
aW4gPSBsaW5lc1tsaW5lTnVtYmVyXS5iZWdpbigpICsgbGluZU1ldGFkYXRhLnN0YXJ0T2Zmc2V0
OwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBvYmplY3RDb3VudCA9IGxpbmVNZXRhZGF0YS5vYmpl
Y3RDb3VudDsKLSAgICAgICAgbGluZXNbbGluZU51bWJlcl0ucmVmKGxvY2ssIGxpbmVNZXRhZGF0
YS5vYmplY3RDb3VudCk7Ci0gICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE1lcmdlIHdpdGggc3Vic2VxdWVudCBmcmVlIGxpbmVzLgotICAgICAgICB3aGlsZSAo
KytsaW5lTnVtYmVyIDwgZW5kKSB7Ci0gICAgICAgICAgICBpZiAobGluZXNbbGluZU51bWJlcl0u
cmVmQ291bnQobG9jaykpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
IWxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgTGluZU1ldGFkYXRhJiBsaW5lTWV0YWRhdGEgPSBtX21lZGl1bUxpbmVNZXRh
ZGF0YVtzaXplQ2xhc3NdW2xpbmVOdW1iZXJdOwogICAgICAgICAgICAgb2JqZWN0Q291bnQgKz0g
bGluZU1ldGFkYXRhLm9iamVjdENvdW50OwogICAgICAgICAgICAgbGluZXNbbGluZU51bWJlcl0u
cmVmKGxvY2ssIGxpbmVNZXRhZGF0YS5vYmplY3RDb3VudCk7CiAgICAgICAgICAgICBwYWdlLT5y
ZWYobG9jayk7CkBAIC0yMTAsNiArMTUyLDggQEAgdm9pZCBIZWFwOjphbGxvY2F0ZU1lZGl1bUJ1
bXBSYW5nZXMoc3RkOgogICAgICAgICBlbHNlCiAgICAgICAgICAgICByYW5nZUNhY2hlLnB1c2go
eyBiZWdpbiwgb2JqZWN0Q291bnQgfSk7CiAgICAgfQorCisgICAgcGFnZS0+c2V0SGFzRnJlZUxp
bmVzKGxvY2ssIGZhbHNlKTsKIH0KIAogU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZUNsYXNzKQpA
QCAtMjIyLDM0ICsxNjYsMTMgQEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShz
dGQ6OgogICAgICAgICByZXR1cm4gcGFnZTsKICAgICB9CiAKLSAgICBTbWFsbFBhZ2UqIHBhZ2Ug
PSBbdGhpcywgc2l6ZUNsYXNzXSgpIHsKKyAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBbdGhpcywgJmxv
Y2tdKCkgewogICAgICAgICBpZiAobV9zbWFsbFBhZ2VzLnNpemUoKSkKICAgICAgICAgICAgIHJl
dHVybiBtX3NtYWxsUGFnZXMucG9wKCk7CiAKICAgICAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9
IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3ZtSGVhcC5hbGxvY2F0ZVNtYWxsUGFnZSgpOwotICAg
IH0oKTsKLQotICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwotICAgIHJldHVybiBw
YWdlOwotfQotCi1NZWRpdW1QYWdlKiBIZWFwOjphbGxvY2F0ZU1lZGl1bVBhZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcykKLXsKLSAgICBWZWN0
b3I8TWVkaXVtUGFnZSo+JiBtZWRpdW1QYWdlc1dpdGhGcmVlTGluZXMgPSBtX21lZGl1bVBhZ2Vz
V2l0aEZyZWVMaW5lc1tzaXplQ2xhc3NdOwotICAgIHdoaWxlIChtZWRpdW1QYWdlc1dpdGhGcmVl
TGluZXMuc2l6ZSgpKSB7Ci0gICAgICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBtZWRpdW1QYWdlc1dp
dGhGcmVlTGluZXMucG9wKCk7Ci0gICAgICAgIGlmICghcGFnZS0+cmVmQ291bnQobG9jaykgfHwg
cGFnZS0+c2l6ZUNsYXNzKCkgIT0gc2l6ZUNsYXNzKSAvLyBQYWdlIHdhcyBwcm9tb3RlZCB0byB0
aGUgcGFnZXMgbGlzdC4KLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTbWFsbFBhZ2Uq
IHBhZ2UgPSBtX3ZtSGVhcC5hbGxvY2F0ZVNtYWxsUGFnZShsb2NrKTsKICAgICAgICAgcmV0dXJu
IHBhZ2U7Ci0gICAgfQotCi0gICAgTWVkaXVtUGFnZSogcGFnZSA9IFt0aGlzLCBzaXplQ2xhc3Nd
KCkgewotICAgICAgICBpZiAobV9tZWRpdW1QYWdlcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9tZWRpdW1QYWdlcy5wb3AoKTsKLQotICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0g
dHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fdm1IZWFwLmFsbG9jYXRlTWVkaXVtUGFnZSgpOwogICAg
IH0oKTsKIAogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwpAQCAtMjYwLDQ0ICsx
ODMsMjEgQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxMaW5lKHN0ZDo6bG9jawogewogICAg
IEJBU1NFUlQoIWxpbmUtPnJlZkNvdW50KGxvY2spKTsKICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBT
bWFsbFBhZ2U6OmdldChsaW5lKTsKLSAgICBzaXplX3QgcmVmQ291bnQgPSBwYWdlLT5yZWZDb3Vu
dChsb2NrKTsKICAgICBwYWdlLT5kZXJlZihsb2NrKTsKIAotICAgIHN3aXRjaCAocmVmQ291bnQp
IHsKLSAgICBjYXNlIFNtYWxsUGFnZTo6bGluZUNvdW50OiB7Ci0gICAgICAgIC8vIEZpcnN0IGZy
ZWUgbGluZSBpbiB0aGUgcGFnZS4KKyAgICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkg
eworICAgICAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1f
c21hbGxQYWdlc1dpdGhGcmVlTGluZXNbcGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIDE6IHsKLSAgICAgICAgLy8gTGFzdCBmcmVl
IGxpbmUgaW4gdGhlIHBhZ2UuCi0gICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKHBhZ2UpOwotICAg
ICAgICBtX3NjYXZlbmdlci5ydW4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCisgICAgICAg
IEJBU1NFUlQocGFnZS0+cmVmQ291bnQobG9jaykpOworICAgICAgICByZXR1cm47CiAgICAgfQot
fQogCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVNZWRpdW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIE1lZGl1bUxpbmUqIGxpbmUpCi17Ci0gICAgQkFTU0VSVCghbGluZS0+
cmVmQ291bnQobG9jaykpOwotICAgIE1lZGl1bVBhZ2UqIHBhZ2UgPSBNZWRpdW1QYWdlOjpnZXQo
bGluZSk7Ci0gICAgc2l6ZV90IHJlZkNvdW50ID0gcGFnZS0+cmVmQ291bnQobG9jayk7Ci0gICAg
cGFnZS0+ZGVyZWYobG9jayk7CisgICAgaWYgKHBhZ2UtPnJlZkNvdW50KGxvY2spKQorICAgICAg
ICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKHJlZkNvdW50KSB7Ci0gICAgY2FzZSBNZWRpdW1QYWdl
OjpsaW5lQ291bnQ6IHsKLSAgICAgICAgLy8gRmlyc3QgZnJlZSBsaW5lIGluIHRoZSBwYWdlLgot
ICAgICAgICBtX21lZGl1bVBhZ2VzV2l0aEZyZWVMaW5lc1twYWdlLT5zaXplQ2xhc3MoKV0ucHVz
aChwYWdlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgMTogewotICAgICAgICAv
LyBMYXN0IGZyZWUgbGluZSBpbiB0aGUgcGFnZS4KLSAgICAgICAgbV9tZWRpdW1QYWdlcy5wdXNo
KHBhZ2UpOwotICAgICAgICBtX3NjYXZlbmdlci5ydW4oKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIH0KKyAgICBtX3NtYWxsUGFnZXMucHVzaChwYWdlKTsKKyAgICBtX3NjYXZlbmdlci5y
dW4oKTsKIH0KIAogdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYgQEAKICNpbmNsdWRlICJC
dW1wUmFuZ2UuaCIKICNpbmNsdWRlICJFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkxpbmVNZXRh
ZGF0YS5oIgotI2luY2x1ZGUgIk1lZGl1bUNodW5rLmgiCi0jaW5jbHVkZSAiTWVkaXVtTGluZS5o
IgotI2luY2x1ZGUgIk1lZGl1bVBhZ2UuaCIKICNpbmNsdWRlICJNdXRleC5oIgogI2luY2x1ZGUg
IlNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIgogI2luY2x1ZGUgIlNtYWxsQ2h1bmsuaCIKQEAgLTU3LDkg
KzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3Im
LCBCdW1wUmFuZ2VDYWNoZSYpOwogICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIFNtYWxsTGluZSopOwogCi0gICAgdm9pZCBhbGxvY2F0ZU1lZGl1
bUJ1bXBSYW5nZXMoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xh
c3MsIEJ1bXBBbGxvY2F0b3ImLCBCdW1wUmFuZ2VDYWNoZSYpOwotICAgIHZvaWQgZGVyZWZNZWRp
dW1MaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBNZWRpdW1MaW5lKik7Ci0KICAg
ICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXpl
X3QpOwogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwogICAg
IHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lk
Kik7CkBAIC03OCwxMSArNzIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVN
ZXRhZGF0YSgpOwogCiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcyk7Ci0gICAgTWVkaXVtUGFnZSog
YWxsb2NhdGVNZWRpdW1QYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qg
c2l6ZUNsYXNzKTsKIAogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+JiwgU21hbGxMaW5lKik7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTWVkaXVt
TGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTWVkaXVtTGluZSopOwotCiAgICAg
dm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0
IExhcmdlT2JqZWN0Jik7CiAKICAgICB2b2lkIHNwbGl0TGFyZ2UoQmVnaW5UYWcqLCBzaXplX3Qs
IEVuZFRhZyomLCBSYW5nZSYpOwpAQCAtOTIsMTcgKzgzLDEzIEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBjb25jdXJyZW50U2NhdmVuZ2UoKTsKICAgICB2b2lkIHNjYXZlbmdlU21hbGxQYWdl
cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMpOwotICAgIHZvaWQgc2NhdmVuZ2VNZWRpdW1QYWdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRp
Y011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogICAgIHZvaWQgc2NhdmVuZ2VM
YXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzKTsKIAogICAgIHN0ZDo6YXJyYXk8c3RkOjphcnJheTxMaW5lTWV0YWRhdGEs
IFNtYWxsUGFnZTo6bGluZUNvdW50Piwgc21hbGxNYXggLyBhbGlnbm1lbnQ+IG1fc21hbGxMaW5l
TWV0YWRhdGE7Ci0gICAgc3RkOjphcnJheTxzdGQ6OmFycmF5PExpbmVNZXRhZGF0YSwgTWVkaXVt
UGFnZTo6bGluZUNvdW50PiwgbWVkaXVtTWF4IC8gYWxpZ25tZW50PiBtX21lZGl1bUxpbmVNZXRh
ZGF0YTsKIAogICAgIHN0ZDo6YXJyYXk8VmVjdG9yPFNtYWxsUGFnZSo+LCBzbWFsbE1heCAvIGFs
aWdubWVudD4gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lczsKLSAgICBzdGQ6OmFycmF5PFZlY3Rv
cjxNZWRpdW1QYWdlKj4sIG1lZGl1bU1heCAvIGFsaWdubWVudD4gbV9tZWRpdW1QYWdlc1dpdGhG
cmVlTGluZXM7CiAKICAgICBWZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFsbFBhZ2VzOwotICAgIFZl
Y3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsKIAogICAgIFNlZ3JlZ2F0ZWRGcmVlTGlz
dCBtX2xhcmdlT2JqZWN0czsKICAgICBWZWN0b3I8UmFuZ2U+IG1feExhcmdlT2JqZWN0czsKQEAg
LTEyMiwxMyArMTA5LDYgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVyZWZTbWFsbExpbmUoc3RkOjps
bwogICAgIGRlYWxsb2NhdGVTbWFsbExpbmUobG9jaywgbGluZSk7CiB9CiAKLWlubGluZSB2b2lk
IEhlYXA6OmRlcmVmTWVkaXVtTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBNZWRpdW1MaW5lKiBsaW5lKQotewotICAgIGlmICghbGluZS0+ZGVyZWYobG9jaykpCi0gICAg
ICAgIHJldHVybjsKLSAgICBkZWFsbG9jYXRlTWVkaXVtTGluZShsb2NrLCBsaW5lKTsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCiAjZW5kaWYgLy8gSGVhcF9oCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0xhcmdlQ2h1bmsuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9MYXJnZUNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzLDcgKzgzLDcgQEAg
c3RhdGljX2Fzc2VydChsYXJnZUNodW5rTWV0YWRhdGFTaXplICsgbAogCiBpbmxpbmUgTGFyZ2VD
aHVuayogTGFyZ2VDaHVuazo6Z2V0KHZvaWQqIG9iamVjdCkKIHsKLSAgICBCQVNTRVJUKCFpc1Nt
YWxsT3JNZWRpdW0ob2JqZWN0KSk7CisgICAgQkFTU0VSVCghaXNTbWFsbChvYmplY3QpKTsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8TGFyZ2VDaHVuayo+KG1hc2sob2JqZWN0LCBsYXJnZUNodW5r
TWFzaykpOwogfQogCkBAIC05Niw3ICs5Niw3IEBAIGlubGluZSBCZWdpblRhZyogTGFyZ2VDaHVu
azo6YmVnaW5UYWcodm8KIAogaW5saW5lIEVuZFRhZyogTGFyZ2VDaHVuazo6ZW5kVGFnKHZvaWQq
IG9iamVjdCwgc2l6ZV90IHNpemUpCiB7Ci0gICAgQkFTU0VSVCghaXNTbWFsbE9yTWVkaXVtKG9i
amVjdCkpOworICAgIEJBU1NFUlQoIWlzU21hbGwob2JqZWN0KSk7CiAKICAgICBMYXJnZUNodW5r
KiBjaHVuayA9IGdldChvYmplY3QpOwogICAgIGNoYXIqIGVuZCA9IHN0YXRpY19jYXN0PGNoYXIq
PihvYmplY3QpICsgc2l6ZTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGluZS5oCShyZXZpc2lvbiAxOTY3
OTgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NjAsNyArNjAsNyBAQCBwcml2YXRlOgogdGVtcGxhdGU8Y2xhc3MgVHJhaXRzPgogaW5saW5lIGF1
dG8gTGluZTxUcmFpdHM+OjpnZXQodm9pZCogb2JqZWN0KSAtPiBMaW5lKgogewotICAgIEJBU1NF
UlQoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkpOworICAgIEJBU1NFUlQoaXNTbWFsbChvYmplY3Qp
KTsKICAgICBDaHVuayogY2h1bmsgPSBDaHVuazo6Z2V0KG9iamVjdCk7CiAgICAgc2l6ZV90IGxp
bmVOdW1iZXIgPSAocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob2JqZWN0KSAtIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGNodW5rKSkgLyBsaW5lU2l6ZTsKICAgICByZXR1cm4gJmNodW5rLT5saW5l
cygpW2xpbmVOdW1iZXJdOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1DaHVu
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWVkaXVtQ2h1bmsuaAko
cmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1DaHVuay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBNZWRpdW1DaHVua19oCi0jZGVmaW5lIE1l
ZGl1bUNodW5rX2gKLQotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiTWVkaXVtTGluZS5o
IgotI2luY2x1ZGUgIk1lZGl1bVBhZ2UuaCIKLSNpbmNsdWRlICJNZWRpdW1UcmFpdHMuaCIKLQot
bmFtZXNwYWNlIGJtYWxsb2MgewotCi10eXBlZGVmIENodW5rPE1lZGl1bVRyYWl0cz4gTWVkaXVt
Q2h1bms7Ci0KLX07IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBNZWRpdW1DaHVu
awpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1MaW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRpdW1MaW5lLmgJKHJldmlzaW9uIDE5Njc5OCkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWVkaXVtTGluZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmbmRlZiBNZWRpdW1MaW5lX2gKLSNkZWZpbmUgTWVkaXVtTGluZV9oCi0KLSNpbmNs
dWRlICJMaW5lLmgiCi0jaW5jbHVkZSAiTWVkaXVtVHJhaXRzLmgiCi0KLW5hbWVzcGFjZSBibWFs
bG9jIHsKLQotdHlwZWRlZiBMaW5lPE1lZGl1bVRyYWl0cz4gTWVkaXVtTGluZTsKLQotfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gTWVkaXVtTGluZV9oCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL01lZGl1bVBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL01lZGl1bVBhZ2UuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9NZWRpdW1QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIE1l
ZGl1bVBhZ2VfaAotI2RlZmluZSBNZWRpdW1QYWdlX2gKLQotI2luY2x1ZGUgIk1lZGl1bVRyYWl0
cy5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi10eXBlZGVm
IFBhZ2U8TWVkaXVtVHJhaXRzPiBNZWRpdW1QYWdlOwotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9j
Ci0KLSNlbmRpZiAvLyBNZWRpdW1QYWdlX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TWVkaXVtVHJhaXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NZWRp
dW1UcmFpdHMuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9N
ZWRpdW1UcmFpdHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTWVkaXVtVHJhaXRz
X2gKLSNkZWZpbmUgTWVkaXVtVHJhaXRzX2gKLQotI2luY2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVk
ZSAiVk1BbGxvY2F0ZS5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXRlbXBsYXRlPGNsYXNz
IFRyYWl0cz4gY2xhc3MgQ2h1bms7Ci10ZW1wbGF0ZTxjbGFzcyBUcmFpdHM+IGNsYXNzIExpbmU7
Ci10ZW1wbGF0ZTxjbGFzcyBUcmFpdHM+IGNsYXNzIFBhZ2U7Ci0KLXN0cnVjdCBNZWRpdW1UcmFp
dHMgewotICAgIHR5cGVkZWYgQ2h1bms8TWVkaXVtVHJhaXRzPiBDaHVua1R5cGU7Ci0gICAgdHlw
ZWRlZiBMaW5lPE1lZGl1bVRyYWl0cz4gTGluZVR5cGU7Ci0gICAgdHlwZWRlZiBQYWdlPE1lZGl1
bVRyYWl0cz4gUGFnZVR5cGU7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxpbmVTaXplID0g
bWVkaXVtTGluZVNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBtaW5pbXVtT2JqZWN0U2l6
ZSA9IHNtYWxsTWF4ICsgYWxpZ25tZW50OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtT
aXplID0gbWVkaXVtQ2h1bmtTaXplOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtPZmZz
ZXQgPSBtZWRpdW1DaHVua09mZnNldDsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGNodW5r
TWFzayA9IG1lZGl1bUNodW5rTWFzazsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQot
I2VuZGlmIC8vIE1lZGl1bVRyYWl0c19oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09i
amVjdFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0
VHlwZS5jcHAJKHJldmlzaW9uIDE5Njc5OCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2Jq
ZWN0VHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCw4IEBAIG5hbWVzcGFjZSBi
bWFsbG9jIHsKIAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqIG9iamVjdCkKIHsKLSAgICBp
ZiAoaXNTbWFsbE9yTWVkaXVtKG9iamVjdCkpIHsKLSAgICAgICAgaWYgKGlzU21hbGwob2JqZWN0
KSkKLSAgICAgICAgICAgIHJldHVybiBTbWFsbDsKLSAgICAgICAgcmV0dXJuIE1lZGl1bTsKLSAg
ICB9CisgICAgaWYgKGlzU21hbGwob2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIFNtYWxsOwogICAg
IAogICAgIGlmICghaXNYTGFyZ2Uob2JqZWN0KSkKICAgICAgICAgcmV0dXJuIExhcmdlOwpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgJKHJldmlzaW9uIDE5Njc5OCkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
OSArMzEsMTggQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1lbnVtIE9iamVjdFR5cGUgeyBT
bWFsbCwgTWVkaXVtLCBMYXJnZSwgWExhcmdlIH07CitlbnVtIE9iamVjdFR5cGUgeyBTbWFsbCwg
TGFyZ2UsIFhMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUodm9pZCopOwogCi1pbmxp
bmUgYm9vbCBpc1NtYWxsT3JNZWRpdW0odm9pZCogb2JqZWN0KQoraW5saW5lIGJvb2wgaXNTbWFs
bCh2b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIHRlc3Qob2JqZWN0LCBzbWFsbE9yTWVkaXVt
VHlwZU1hc2spOwotfQotCi1pbmxpbmUgYm9vbCBpc1NtYWxsKHZvaWQqIHNtYWxsT3JNZWRpdW0p
Ci17Ci0gICAgQkFTU0VSVChpc1NtYWxsT3JNZWRpdW0oc21hbGxPck1lZGl1bSkpOwotICAgIHJl
dHVybiB0ZXN0KHNtYWxsT3JNZWRpdW0sIHNtYWxsT3JNZWRpdW1TbWFsbFR5cGVNYXNrKTsKLX0K
LQotaW5saW5lIGJvb2wgaXNNZWRpdW0odm9pZCogc21hbGxPck1lZGl1bSkKLXsKLSAgICByZXR1
cm4gIWlzU21hbGwoc21hbGxPck1lZGl1bSk7CisgICAgcmV0dXJuIHRlc3Qob2JqZWN0LCBzbWFs
bE1hc2spOwogfQogCiBpbmxpbmUgYm9vbCBpc1hMYXJnZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAg
cmV0dXJuICF0ZXN0KG9iamVjdCwgc3VwZXJDaHVua1NpemUgLSAxKTsKKyAgICByZXR1cm4gIXRl
c3Qob2JqZWN0LCB+c3VwZXJDaHVua01hc2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1BhZ2UuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDExICs1NCwxNSBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemVDbGFzcygpIHsgcmV0dXJuIG1fc2l6ZUNsYXNzOyB9CiAg
ICAgdm9pZCBzZXRTaXplQ2xhc3Moc2l6ZV90IHNpemVDbGFzcykgeyBtX3NpemVDbGFzcyA9IHNp
emVDbGFzczsgfQogICAgIAorICAgIGJvb2wgaGFzRnJlZUxpbmVzKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mKSBjb25zdCB7IHJldHVybiBtX2hhc0ZyZWVMaW5lczsgfQorICAgIHZvaWQg
c2V0SGFzRnJlZUxpbmVzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBib29sIGhhc0Zy
ZWVMaW5lcykgeyBtX2hhc0ZyZWVMaW5lcyA9IGhhc0ZyZWVMaW5lczsgfQorICAgIAogICAgIExp
bmUqIGJlZ2luKCk7CiAgICAgTGluZSogZW5kKCk7CiAKIHByaXZhdGU6Ci0gICAgdW5zaWduZWQg
Y2hhciBtX3JlZkNvdW50OworICAgIHVuc2lnbmVkIGNoYXIgbV9oYXNGcmVlTGluZXM6IDE7Cisg
ICAgdW5zaWduZWQgY2hhciBtX3JlZkNvdW50OiA3OwogICAgIHVuc2lnbmVkIGNoYXIgbV9zaXpl
Q2xhc3M7CiB9OwogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTY3OTgp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0
LDIzICs1NCwxNiBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
dm1QYWdlTWFzayA9IH4odm1QYWdlU2l6ZSAtIDEpOwogICAgIAogICAgIHN0YXRpYyBjb25zdCBz
aXplX3Qgc3VwZXJDaHVua1NpemUgPSAyICogTUI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
dXBlckNodW5rTWFzayA9IH4oc3VwZXJDaHVua1NpemUgLSAxKTsKIAotICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc21hbGxNYXggPSAyNTY7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1h
eCA9IDEwMjQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gMjU2Owog
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lTWFzayA9IH4oc21hbGxMaW5lU2l6ZSAt
IDF1bCk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsQ2h1bmtTaXplID0gc3VwZXJD
aHVua1NpemUgLyA0OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxDaHVua09mZnNldCA9
IHN1cGVyQ2h1bmtTaXplICogMyAvIDQ7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbENo
dW5rU2l6ZSA9IHN1cGVyQ2h1bmtTaXplIC8gMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNt
YWxsQ2h1bmtPZmZzZXQgPSBzdXBlckNodW5rU2l6ZSAvIDI7CiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzbWFsbENodW5rTWFzayA9IH4oc21hbGxDaHVua1NpemUgLSAxdWwpOwogCi0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBtZWRpdW1NYXggPSAxMDI0OwotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbWVkaXVtTGluZVNpemUgPSAxMDI0OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVt
TGluZU1hc2sgPSB+KG1lZGl1bUxpbmVTaXplIC0gMXVsKTsKLQotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWVkaXVtQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyA0OwotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbWVkaXVtQ2h1bmtPZmZzZXQgPSBzdXBlckNodW5rU2l6ZSAqIDIgLyA0Owot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWVkaXVtQ2h1bmtNYXNrID0gfihtZWRpdW1DaHVua1Np
emUgLSAxdWwpOwotCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUNodW5rU2l6ZSA9IHN1
cGVyQ2h1bmtTaXplIC8gMjsKICNpZiBCUExBVEZPUk0oSU9TKQogICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VDaHVua01ldGFkYXRhU2l6ZSA9IDE2ICoga0I7CkBAIC04Miw3ICs3NSw3IEBA
IG5hbWVzcGFjZSBTaXplcyB7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQWxpZ25t
ZW50ID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlQ2h1bmtT
aXplIC0gbGFyZ2VDaHVua01ldGFkYXRhU2l6ZTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxh
cmdlTWluID0gbWVkaXVtTWF4OworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNaW4gPSBz
bWFsbE1heDsKICAgICAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdubWVudCA9
IHZtUGFnZVNpemU7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VNYXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0geExhcmdlQWxpZ25tZW50OyAvLyBNYWtlIHN1
cmUgdGhhdCByb3VuZGluZyB1cCB0byB4TGFyZ2VBbGlnbm1lbnQgZG9lcyBub3Qgb3ZlcmZsb3cu
CkBAIC05MCwxMiArODMsOSBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgZnJlZUxpc3RTZWFyY2hEZXB0aCA9IDE2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
ZnJlZUxpc3RHcm93RmFjdG9yID0gMjsKIAotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdHlw
ZU1hc2sgPSAoc3VwZXJDaHVua1NpemUgLSAxKSAmIH4oKHN1cGVyQ2h1bmtTaXplIC8gNCkgLSAx
KTsgLy8gNCB0YWdnYWJsZSBjaHVua3MKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHNtYWxs
VHlwZSA9IChzdXBlckNodW5rU2l6ZSArIHNtYWxsQ2h1bmtPZmZzZXQpICYgdHlwZU1hc2s7Ci0g
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBtZWRpdW1UeXBlID0gKHN1cGVyQ2h1bmtTaXplICsg
bWVkaXVtQ2h1bmtPZmZzZXQpICYgdHlwZU1hc2s7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJf
dCBsYXJnZVR5cGVNYXNrID0gfihtZWRpdW1UeXBlICYgc21hbGxUeXBlKTsKLSAgICBzdGF0aWMg
Y29uc3QgdWludHB0cl90IHNtYWxsT3JNZWRpdW1UeXBlTWFzayA9IG1lZGl1bVR5cGUgJiBzbWFs
bFR5cGU7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBzbWFsbE9yTWVkaXVtU21hbGxUeXBl
TWFzayA9IHNtYWxsVHlwZSBeIG1lZGl1bVR5cGU7IC8vIE9ubHkgdmFsaWQgaWYgb2JqZWN0IGlz
IGtub3duIHRvIGJlIHNtYWxsIG9yIG1lZGl1bS4KKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IHR5cGVNYXNrID0gKHN1cGVyQ2h1bmtTaXplIC0gMSkgJiB+KChzdXBlckNodW5rU2l6ZSAvIDIp
IC0gMSk7IC8vIDIgdGFnZ2FibGUgY2h1bmtzCisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBs
YXJnZU1hc2sgPSB0eXBlTWFzayAmIChzdXBlckNodW5rU2l6ZSArIGxhcmdlQ2h1bmtPZmZzZXQp
OworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3Qgc21hbGxNYXNrID0gdHlwZU1hc2sgJiAoc3Vw
ZXJDaHVua1NpemUgKyBzbWFsbENodW5rT2Zmc2V0KTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eSA9IDI1NjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGJ1bXBSYW5nZUNhY2hlQ2FwYWNpdHkgPSAzOwpAQCAtMTA0LDcgKzk0LDcgQEAgbmFtZXNwYWNl
IFNpemVzIHsKIAogICAgIGlubGluZSBzaXplX3Qgc2l6ZUNsYXNzKHNpemVfdCBzaXplKQogICAg
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQ2xhc3NNYXNrID0gKG1lZGl1bU1h
eCAvIGFsaWdubWVudCkgLSAxOworICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemVDbGFz
c01hc2sgPSAoc21hbGxNYXggLyBhbGlnbm1lbnQpIC0gMTsKICAgICAgICAgcmV0dXJuIG1hc2so
KHNpemUgLSAxKSAvIGFsaWdubWVudCwgc2l6ZUNsYXNzTWFzayk7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1N1cGVyQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1N1cGVyQ2h1bmsuaAkocmV2aXNpb24gMTk2Nzk4KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TdXBlckNodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDYgQEAKICNkZWZpbmUgU3VwZXJDaHVua19oCiAKICNpbmNsdWRlICJMYXJnZUNodW5rLmgiCi0j
aW5jbHVkZSAiTWVkaXVtQ2h1bmsuaCIKICNpbmNsdWRlICJTbWFsbENodW5rLmgiCiAKIG5hbWVz
cGFjZSBibWFsbG9jIHsKQEAgLTM3LDcgKzM2LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdXBl
ckNodW5rKiBjcmVhdGUoKTsKIAogICAgIFNtYWxsQ2h1bmsqIHNtYWxsQ2h1bmsoKTsKLSAgICBN
ZWRpdW1DaHVuayogbWVkaXVtQ2h1bmsoKTsKICAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rKCk7
CiAKIHByaXZhdGU6CkBAIC01Myw3ICs1MSw2IEBAIGlubGluZSBTdXBlckNodW5rKiBTdXBlckNo
dW5rOjpjcmVhdGUoKQogaW5saW5lIFN1cGVyQ2h1bms6OlN1cGVyQ2h1bmsoKQogewogICAgIG5l
dyAoc21hbGxDaHVuaygpKSBTbWFsbENodW5rOwotICAgIG5ldyAobWVkaXVtQ2h1bmsoKSkgTWVk
aXVtQ2h1bms7CiAgICAgbmV3IChsYXJnZUNodW5rKCkpIExhcmdlQ2h1bms7CiB9CiAKQEAgLTYz
LDEyICs2MCw2IEBAIGlubGluZSBTbWFsbENodW5rKiBTdXBlckNodW5rOjpzbWFsbENodW4KICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBzbWFsbENodW5rT2Zmc2V0KTsK
IH0KIAotaW5saW5lIE1lZGl1bUNodW5rKiBTdXBlckNodW5rOjptZWRpdW1DaHVuaygpCi17Ci0g
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaXVtQ2h1bmsqPigKLSAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBtZWRpdW1DaHVua09mZnNldCk7Ci19Ci0KIGlubGlu
ZSBMYXJnZUNodW5rKiBTdXBlckNodW5rOjpsYXJnZUNodW5rKCkKIHsKICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxMYXJnZUNodW5rKj4oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1ZNSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAu
Y3BwCShyZXZpc2lvbiAxOTY3OTgpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiAjaW5jbHVkZSAiTGFy
Z2VPYmplY3QuaCIKLSNpbmNsdWRlICJMaW5lLmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIlN1cGVyQ2h1bmsuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKQEAgLTQ4LDEwICs0
Nyw2IEBAIHZvaWQgVk1IZWFwOjpncm93KCkKICAgICBmb3IgKGF1dG8qIGl0ID0gc21hbGxDaHVu
ay0+YmVnaW4oKTsgaXQgIT0gc21hbGxDaHVuay0+ZW5kKCk7ICsraXQpCiAgICAgICAgIG1fc21h
bGxQYWdlcy5wdXNoKGl0KTsKIAotICAgIE1lZGl1bUNodW5rKiBtZWRpdW1DaHVuayA9IHN1cGVy
Q2h1bmstPm1lZGl1bUNodW5rKCk7Ci0gICAgZm9yIChhdXRvKiBpdCA9IG1lZGl1bUNodW5rLT5i
ZWdpbigpOyBpdCAhPSBtZWRpdW1DaHVuay0+ZW5kKCk7ICsraXQpCi0gICAgICAgIG1fbWVkaXVt
UGFnZXMucHVzaChpdCk7Ci0KICAgICBMYXJnZUNodW5rKiBsYXJnZUNodW5rID0gc3VwZXJDaHVu
ay0+bGFyZ2VDaHVuaygpOwogICAgIExhcmdlT2JqZWN0IHJlc3VsdChMYXJnZU9iamVjdDo6aW5p
dChsYXJnZUNodW5rKS5iZWdpbigpKTsKICAgICBCQVNTRVJUKHJlc3VsdC5zaXplKCkgPT0gbGFy
Z2VNYXgpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTY3OTgpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiRml4ZWRWZWN0b3IuaCIKICNpbmNsdWRlICJMYXJnZUNodW5r
LmgiCiAjaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKLSNpbmNsdWRlICJNZWRpdW1DaHVuay5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCiAjaW5j
bHVkZSAiU21hbGxDaHVuay5oIgpAQCAtNTAsMTMgKzQ5LDExIEBAIGNsYXNzIFZNSGVhcCB7CiBw
dWJsaWM6CiAgICAgVk1IZWFwKCk7CiAKLSAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdl
KCk7Ci0gICAgTWVkaXVtUGFnZSogYWxsb2NhdGVNZWRpdW1QYWdlKCk7CisgICAgU21hbGxQYWdl
KiBhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAg
TGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzaXplX3QpOwogICAgIExhcmdlT2JqZWN0
IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5h
bGlnbmVkU2l6ZSk7CiAKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1bmlxdWVf
bG9jazxTdGF0aWNNdXRleD4mLCBTbWFsbFBhZ2UqKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVNZWRp
dW1QYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgTWVkaXVtUGFnZSopOwogICAg
IHZvaWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
JiwgTGFyZ2VPYmplY3QpOwogCiBwcml2YXRlOgpAQCAtNjQsMjkgKzYxLDE5IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBncm93KCk7CiAKICAgICBWZWN0b3I8U21hbGxQYWdlKj4gbV9zbWFsbFBhZ2Vz
OwotICAgIFZlY3RvcjxNZWRpdW1QYWdlKj4gbV9tZWRpdW1QYWdlczsKICAgICBTZWdyZWdhdGVk
RnJlZUxpc3QgbV9sYXJnZU9iamVjdHM7CiAjaWYgQk9TKERBUldJTikKICAgICBab25lIG1fem9u
ZTsKICNlbmRpZgogfTsKIAotaW5saW5lIFNtYWxsUGFnZSogVk1IZWFwOjphbGxvY2F0ZVNtYWxs
UGFnZSgpCitpbmxpbmUgU21hbGxQYWdlKiBWTUhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCiB7CiAgICAgaWYgKCFtX3NtYWxsUGFnZXMu
c2l6ZSgpKQogICAgICAgICBncm93KCk7CiAKICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3NtYWxs
UGFnZXMucG9wKCk7Ci0gICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXMocGFnZS0+YmVnaW4oKS0+
YmVnaW4oKSwgdm1QYWdlU2l6ZSk7Ci0gICAgcmV0dXJuIHBhZ2U7Ci19Ci0KLWlubGluZSBNZWRp
dW1QYWdlKiBWTUhlYXA6OmFsbG9jYXRlTWVkaXVtUGFnZSgpCi17Ci0gICAgaWYgKCFtX21lZGl1
bVBhZ2VzLnNpemUoKSkKLSAgICAgICAgZ3JvdygpOwotCi0gICAgTWVkaXVtUGFnZSogcGFnZSA9
IG1fbWVkaXVtUGFnZXMucG9wKCk7CisgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRy
dWUpOwogICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzKHBhZ2UtPmJlZ2luKCktPmJlZ2luKCks
IHZtUGFnZVNpemUpOwogICAgIHJldHVybiBwYWdlOwogfQpAQCAtMTUxLDE1ICsxMzgsNiBAQCBp
bmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVTbWFsbFBhZ2UoCiAgICAgbV9zbWFsbFBhZ2Vz
LnB1c2gocGFnZSk7CiB9CiAKLWlubGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZU1lZGl1bVBh
Z2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIE1lZGl1bVBhZ2UqIHBhZ2Up
Ci17Ci0gICAgbG9jay51bmxvY2soKTsKLSAgICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzKHBh
Z2UtPmJlZ2luKCktPmJlZ2luKCksIHZtUGFnZVNpemUpOwotICAgIGxvY2subG9jaygpOwotICAg
IAotICAgIG1fbWVkaXVtUGFnZXMucHVzaChwYWdlKTsKLX0KLQogaW5saW5lIHZvaWQgVk1IZWFw
OjpkZWFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxv
Y2ssIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KQogewogICAgIGxhcmdlT2JqZWN0LnNldE93bmVy
KE93bmVyOjpWTUhlYXApOwo=
</data>
<flag name="review"
          id="296562"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>