<?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>195691</bug_id>
          
          <creation_ts>2019-03-13 12:05:43 -0700</creation_ts>
          <short_desc>[bmalloc] Add StaticPerProcess for known types to save pages</short_desc>
          <delta_ts>2019-03-14 01:19:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>mark.lam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1516086</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-13 12:05:43 -0700</bug_when>
    <thetext>[bmalloc] Add StaticPerProcess for known types to save pages</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516099</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-13 12:33:32 -0700</bug_when>
    <thetext>This is revival of SafePerProcess for known types. As initial memory footprint of VM + JSGlobalObject becomes 488KB dirty size in fast malloc memory (w/ JSC_useJIT=0 and Malloc=1), pages for PerProcess is costly. For example, under Malloc=1 mode, we still need to allocate PerProcess&lt;DebugHeap&gt; and PerProcess&lt;Environment&gt;. And sizeof(Environment) is only 1 (bool flag!), and sizeof(DebugHeap) is 120. But we are allocating 1 pages for them. Since page size in iOS is 16KB, this 121B consumes 16KB dirty memory, and it is not negligible size if we keep in mind that the current fast malloc heap size is 488KB.
Putting them into a __DATA, close to the other mutable data, can save a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516101</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-13 12:35:59 -0700</bug_when>
    <thetext>==== Summary for process 31657
ReadOnly portion of Libraries: Total=355.8M resident=132.7M(37%) swapped_out_or_unallocated=223.2M(63%)
Writable regions: Total=1.1G written=1032K(0%) resident=1200K(0%) swapped_out=0K(0%) unallocated=1.1G(100%)

                                VIRTUAL RESIDENT    DIRTY  SWAPPED VOLATILE   NONVOL    EMPTY   REGION
REGION TYPE                        SIZE     SIZE     SIZE     SIZE     SIZE     SIZE     SIZE    COUNT (non-coalesced)
===========                     ======= ========    =====  ======= ========   ======    =====  =======
Dispatch continuations            56.0M      24K      24K       0K       0K       0K       0K        1
JS JIT generated code              1.0G       0K       0K       0K       0K       0K       0K        3
Kernel Alloc Once                    8K       4K       4K       0K       0K       0K       0K        1
MALLOC guard page                   32K       0K       0K       0K       0K       0K       0K        8
MALLOC metadata                    324K     308K     308K       0K       0K       0K       0K        9
MALLOC_SMALL                      24.0M     444K     444K       0K       0K       0K       0K        3         see MALLOC ZONE table below
MALLOC_SMALL (empty)              8192K      12K      12K       0K       0K       0K       0K        1         see MALLOC ZONE table below
MALLOC_TINY                       6144K     212K     212K       0K       0K       0K       0K        4         see MALLOC ZONE table below
MALLOC_TINY (empty)               1024K      12K      12K       0K       0K       0K       0K        1         see MALLOC ZONE table below
STACK GUARD                       56.0M       0K       0K       0K       0K       0K       0K        3
Stack                             9232K      80K      80K       0K       0K       0K       0K        4
WebKit Malloc                        4K       4K       4K       0K       0K       0K       0K        1
__DATA                            15.9M    11.2M     756K       0K       0K       0K       0K      186
__FONT_DATA                          4K       0K       0K       0K       0K       0K       0K        1
__LINKEDIT                       228.9M    64.2M       0K       0K       0K       0K       0K        4
__TEXT                           126.9M    68.4M       0K       0K       0K       0K       0K      187
__UNICODE                          564K     492K       0K       0K       0K       0K       0K        1
mapped file                          4K       4K       0K       0K       0K       0K       0K        1
shared memory                       28K      28K      28K       0K       0K       0K       0K        5
===========                     ======= ========    =====  ======= ========   ======    =====  =======
TOTAL                              1.5G   145.4M    1884K       0K       0K       0K       0K      424

                                          VIRTUAL   RESIDENT      DIRTY    SWAPPED ALLOCATION      BYTES DIRTY+SWAP          REGION
MALLOC ZONE                                  SIZE       SIZE       SIZE       SIZE      COUNT  ALLOCATED  FRAG SIZE  % FRAG   COUNT
===========                               =======  =========  =========  =========  =========  =========  =========  ======  ======
DefaultMallocZone_0x10ab95000               29.0M       192K       192K         0K        865       109K        83K     44%       6
WebKit Using System Malloc_0x10abc5000      10.0M       488K       488K         0K       1537       561K         0K      0%       3
===========                               =======  =========  =========  =========  =========  =========  =========  ======  ======
TOTAL                                       39.0M       680K       680K         0K       2402       670K        10K      2%       9</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516102</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-13 12:36:44 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #2)
Note that this is number in macOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516204</commentid>
    <comment_count>4</comment_count>
      <attachid>364582</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-13 15:22:10 -0700</bug_when>
    <thetext>Created attachment 364582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516299</commentid>
    <comment_count>5</comment_count>
      <attachid>364582</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-03-13 17:58:03 -0700</bug_when>
    <thetext>Comment on attachment 364582
Patch

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

r=me

&gt; Source/bmalloc/ChangeLog:11
&gt; +        size if we keep in mind that the current fast malloc heap size is 488KB. Putting them into a __DATA, close to the other mutable data, can save this page.

/into a __DATA/into the __DATA section/
/, can save this page/, we can avoid allocating this page/

&gt; Source/bmalloc/ChangeLog:13
&gt; +        This patch revives SafePerProcess concept in r228107. We add &quot;StaticPerProcess&lt;T&gt;&quot;, which allocates underlying storage statically in __DATA section instead of

...revives the SafePerProcess...
... in the __DATA section ...

&gt; Source/bmalloc/bmalloc/Gigacage.cpp:67
&gt; +}

nit: Add // namespace bmalloc

&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:34
&gt; +// StaticPerProcess&lt;T&gt; behaves like PerProcess&lt;T&gt;, but we must need to explicitly define a storage for T with EXTERN.

/must need to/need to/ and /define a storage/define storage/

&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:35
&gt; +// In this way, we allocate a storage for a per-process object statically instead of allocating memory at runtime.

/allocate a storage/allocate storage/

&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:51
&gt; +// Object will be instantiated only once, even in the face of concurrency.

/the face of/the presence of/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516435</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-14 01:02:10 -0700</bug_when>
    <thetext>Committed r242938: &lt;https://trac.webkit.org/changeset/242938&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516439</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-14 01:10:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/48880249&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1516440</commentid>
    <comment_count>8</comment_count>
      <attachid>364582</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-03-14 01:19:44 -0700</bug_when>
    <thetext>Comment on attachment 364582
Patch

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

&gt;&gt; Source/bmalloc/ChangeLog:11
&gt;&gt; +        size if we keep in mind that the current fast malloc heap size is 488KB. Putting them into a __DATA, close to the other mutable data, can save this page.
&gt; 
&gt; /into a __DATA/into the __DATA section/
&gt; /, can save this page/, we can avoid allocating this page/

Fixed.

&gt;&gt; Source/bmalloc/ChangeLog:13
&gt;&gt; +        This patch revives SafePerProcess concept in r228107. We add &quot;StaticPerProcess&lt;T&gt;&quot;, which allocates underlying storage statically in __DATA section instead of
&gt; 
&gt; ...revives the SafePerProcess...
&gt; ... in the __DATA section ...

Fixed.

&gt;&gt; Source/bmalloc/bmalloc/Gigacage.cpp:67
&gt;&gt; +}
&gt; 
&gt; nit: Add // namespace bmalloc

Fixed.

&gt;&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:34
&gt;&gt; +// StaticPerProcess&lt;T&gt; behaves like PerProcess&lt;T&gt;, but we must need to explicitly define a storage for T with EXTERN.
&gt; 
&gt; /must need to/need to/ and /define a storage/define storage/

Fixed.

&gt;&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:35
&gt;&gt; +// In this way, we allocate a storage for a per-process object statically instead of allocating memory at runtime.
&gt; 
&gt; /allocate a storage/allocate storage/

Fixed.

&gt;&gt; Source/bmalloc/bmalloc/StaticPerProcess.h:51
&gt;&gt; +// Object will be instantiated only once, even in the face of concurrency.
&gt; 
&gt; /the face of/the presence of/

Fixed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>364582</attachid>
            <date>2019-03-13 15:22:10 -0700</date>
            <delta_ts>2019-03-13 17:58:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-195691-20190313152209.patch</filename>
            <type>text/plain</type>
            <size>38595</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQyOTA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggMzBmNTRlOWZkMjEyMGE5
MTg5MjUxZDFkN2YxNzZhNzdiOGRkYmI4NS4uYzc4N2UyYjQzZDUzYWMwZDM5MWMyNjMwNzY5MDdi
YjRjY2YwOTExNiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDE5LTAzLTEzICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CisKKyAgICAgICAgW2JtYWxsb2NdIEFkZCBT
dGF0aWNQZXJQcm9jZXNzIGZvciBrbm93biB0eXBlcyB0byBzYXZlIHBhZ2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTU2OTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBcyBpbml0aWFsIG1lbW9yeSBm
b290cHJpbnQgb2YgVk0gKyBKU0dsb2JhbE9iamVjdCBiZWNvbWVzIDQ4OEtCIGRpcnR5IHNpemUg
aW4gZmFzdCBtYWxsb2MgbWVtb3J5ICh3LyBKU0NfdXNlSklUPTAgYW5kIE1hbGxvYz0xKSwgcGFn
ZXMgZm9yIFBlclByb2Nlc3MgaXMgY29zdGx5LgorICAgICAgICBGb3IgZXhhbXBsZSwgdW5kZXIg
TWFsbG9jPTEgbW9kZSwgd2Ugc3RpbGwgbmVlZCB0byBhbGxvY2F0ZSBQZXJQcm9jZXNzPERlYnVn
SGVhcD4gYW5kIFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+LiBBbmQgc2l6ZW9mKEVudmlyb25tZW50
KSBpcyBvbmx5IDEgKGJvb2wgZmxhZyksIGFuZAorICAgICAgICBzaXplb2YoRGVidWdIZWFwKSBp
cyAxMjAuIEJ1dCB3ZSBhcmUgYWxsb2NhdGluZyAxIHBhZ2VzIGZvciB0aGVtLiBTaW5jZSBwYWdl
IHNpemUgaW4gaU9TIGlzIDE2S0IsIHRoaXMgMTIxQiBjb25zdW1lcyAxNktCIGRpcnR5IG1lbW9y
eSwgYW5kIGl0IGlzIG5vdCBuZWdsaWdpYmxlCisgICAgICAgIHNpemUgaWYgd2Uga2VlcCBpbiBt
aW5kIHRoYXQgdGhlIGN1cnJlbnQgZmFzdCBtYWxsb2MgaGVhcCBzaXplIGlzIDQ4OEtCLiBQdXR0
aW5nIHRoZW0gaW50byBhIF9fREFUQSwgY2xvc2UgdG8gdGhlIG90aGVyIG11dGFibGUgZGF0YSwg
Y2FuIHNhdmUgdGhpcyBwYWdlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggcmV2aXZlcyBTYWZlUGVy
UHJvY2VzcyBjb25jZXB0IGluIHIyMjgxMDcuIFdlIGFkZCAiU3RhdGljUGVyUHJvY2VzczxUPiIs
IHdoaWNoIGFsbG9jYXRlcyB1bmRlcmx5aW5nIHN0b3JhZ2Ugc3RhdGljYWxseSBpbiBfX0RBVEEg
c2VjdGlvbiBpbnN0ZWFkIG9mCisgICAgICAgIGFsbG9jYXRpbmcgaXQgYXQgcnVudGltZS4gQW5k
IHdlIHVzZSB0aGlzIFN0YXRpY1BlclByb2Nlc3M8VD4gZm9yIHR5cGVzIHdoZXJlICgxKSBUIGlz
IGtub3duIGEgcHJpb3JpLCBhbmQgKDIpIHNpemVvZihUKSBpcyBub3QgaHVnZS4KKworICAgICAg
ICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBibWFsbG9j
L0FsbElzb0hlYXBzLmNwcDoKKyAgICAgICAgKiBibWFsbG9jL0FsbElzb0hlYXBzLmg6CisgICAg
ICAgICogYm1hbGxvYy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9y
OjpBbGxvY2F0b3IpOgorICAgICAgICAqIGJtYWxsb2MvQ2FjaGUuY3BwOgorICAgICAgICAoYm1h
bGxvYzo6Q2FjaGU6OkNhY2hlKToKKyAgICAgICAgKiBibWFsbG9jL0NyeXB0b1JhbmRvbS5jcHA6
CisgICAgICAgIChibWFsbG9jOjpjcnlwdG9SYW5kb20pOgorICAgICAgICAqIGJtYWxsb2MvRGVh
bGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OkRlYWxsb2NhdG9y
KToKKyAgICAgICAgKiBibWFsbG9jL0RlYnVnSGVhcC5jcHA6CisgICAgICAgICogYm1hbGxvYy9E
ZWJ1Z0hlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OkRlYnVnSGVhcDo6dHJ5R2V0KToKKyAgICAg
ICAgKiBibWFsbG9jL0Vudmlyb25tZW50LmNwcDoKKyAgICAgICAgKiBibWFsbG9jL0Vudmlyb25t
ZW50Lmg6CisgICAgICAgICogYm1hbGxvYy9HaWdhY2FnZS5jcHA6CisgICAgICAgIChHaWdhY2Fn
ZTo6Q2FsbGJhY2s6OkNhbGxiYWNrKToKKyAgICAgICAgKEdpZ2FjYWdlOjpDYWxsYmFjazo6ZnVu
Y3Rpb24pOgorICAgICAgICAoYm1hbGxvYzo6UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6UHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrcyk6CisgICAgICAgIChHaWdhY2FnZTo6ZGlzYWJsZVByaW1p
dGl2ZUdpZ2FjYWdlKToKKyAgICAgICAgKEdpZ2FjYWdlOjphZGRQcmltaXRpdmVEaXNhYmxlQ2Fs
bGJhY2spOgorICAgICAgICAoR2lnYWNhZ2U6OnJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFj
ayk6CisgICAgICAgIChHaWdhY2FnZTo6c2hvdWxkQmVFbmFibGVkKToKKyAgICAgICAgKEdpZ2Fj
YWdlOjpibWFsbG9jOjpDYWxsYmFjazo6Q2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAoR2ln
YWNhZ2U6OmJtYWxsb2M6OkNhbGxiYWNrOjpmdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChH
aWdhY2FnZTo6Ym1hbGxvYzo6UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6UHJpbWl0aXZlRGlz
YWJsZUNhbGxiYWNrcyk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9IZWFwLmNwcDoKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OkhlYXApOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgICogYm1hbGxvYy9Jc29EaXJlY3RvcnlJbmxpbmVzLmg6
CisgICAgICAgIChibWFsbG9jOjpwYXNzZWROdW1QYWdlcz46OnRha2VGaXJzdEVsaWdpYmxlKToK
KyAgICAgICAgKGJtYWxsb2M6OnBhc3NlZE51bVBhZ2VzPjo6ZGlkQmVjb21lKToKKyAgICAgICAg
KiBibWFsbG9jL0lzb0hlYXBJbXBsLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb0hlYXBJbXBs
QmFzZTo6YWRkVG9BbGxJc29IZWFwcyk6CisgICAgICAgICogYm1hbGxvYy9Jc29QYWdlLmNwcDoK
KyAgICAgICAgKGJtYWxsb2M6Oklzb1BhZ2VCYXNlOjphbGxvY2F0ZVBhZ2VNZW1vcnkpOgorICAg
ICAgICAqIGJtYWxsb2MvSXNvVExTLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6SXNv
VExTKToKKyAgICAgICAgKGJtYWxsb2M6Oklzb1RMUzo6ZW5zdXJlRW50cmllcyk6CisgICAgICAg
IChibWFsbG9jOjpJc29UTFM6OmZvckVhY2hFbnRyeSk6CisgICAgICAgICogYm1hbGxvYy9Jc29U
TFNFbnRyeS5jcHA6CisgICAgICAgIChibWFsbG9jOjpJc29UTFNFbnRyeTo6SXNvVExTRW50cnkp
OgorICAgICAgICAqIGJtYWxsb2MvSXNvVExTSW5saW5lcy5oOgorICAgICAgICAoYm1hbGxvYzo6
SXNvVExTOjphbGxvY2F0ZVNsb3cpOgorICAgICAgICAoYm1hbGxvYzo6SXNvVExTOjpkZWFsbG9j
YXRlU2xvdyk6CisgICAgICAgICogYm1hbGxvYy9Jc29UTFNMYXlvdXQuY3BwOgorICAgICAgICAq
IGJtYWxsb2MvSXNvVExTTGF5b3V0Lmg6CisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuY3Bw
OgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpTY2F2ZW5nZXIpOgorICAgICAgICAoYm1h
bGxvYzo6ZHVtcFN0YXRzKToKKyAgICAgICAgKGJtYWxsb2M6OlNjYXZlbmdlcjo6c2NhdmVuZ2Up
OgorICAgICAgICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpwYXJ0aWFsU2NhdmVuZ2UpOgorICAgICAg
ICAoYm1hbGxvYzo6U2NhdmVuZ2VyOjpmcmVlYWJsZU1lbW9yeSk6CisgICAgICAgIChibWFsbG9j
OjpTY2F2ZW5nZXI6OmZvb3RwcmludCk6CisgICAgICAgICogYm1hbGxvYy9TY2F2ZW5nZXIuaDoK
KyAgICAgICAgKiBibWFsbG9jL1N0YXRpY1BlclByb2Nlc3MuaDogQWRkZWQuCisgICAgICAgICog
Ym1hbGxvYy9WTUhlYXAuY3BwOgorICAgICAgICAqIGJtYWxsb2MvVk1IZWFwLmg6CisgICAgICAg
ICogYm1hbGxvYy9ab25lLmg6CisgICAgICAgICogYm1hbGxvYy9ibWFsbG9jLmNwcDoKKyAgICAg
ICAgKGJtYWxsb2M6OmFwaTo6c2NhdmVuZ2UpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjppc0Vu
YWJsZWQpOgorICAgICAgICAoYm1hbGxvYzo6YXBpOjpzZXRTY2F2ZW5nZXJUaHJlYWRRT1NDbGFz
cyk6CisgICAgICAgIChibWFsbG9jOjphcGk6OmVuYWJsZU1pbmlNb2RlKToKKyAgICAgICAgKiB0
ZXN0L3Rlc3RibWFsbG9jLmNwcDoKKyAgICAgICAgKGFzc2VydEVtcHR5UG9pbnRlclNldCk6Cisg
ICAgICAgIChhc3NlcnRIYXNPYmplY3RzKToKKyAgICAgICAgKGFzc2VydEhhc09ubHlPYmplY3Rz
KToKKyAgICAgICAgKGFzc2VydENsZWFuKToKKwogMjAxOS0wMy0xMyAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0ZXN0Ym1hbGxvYyBidWlsZApkaWZmIC0tZ2l0
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDE0YzU5
M2NkYzM4MjU2ZTM3M2U2OWYzMzUyZmViOTg1NWQzMTYwNWUuLjU4NDBmNTMyYzk2OGQ4ZDA0Y2Zl
NjQ2YjM1ZDlmYzUyOTAzMjgzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0Myw2ICsxNDMsNyBAQAogCQlBRDE0QUQyOTIw
MjUyOUM0MDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDE0QUQyNzIwMjUyOUE2MDA4OTBFM0IgLyogUHJvY2Vz
c0NoZWNrLmggKi87IH07CiAJCUFEMTRBRDJBMjAyNTI5QzcwMDg5MEUzQiAvKiBQcm9jZXNzQ2hl
Y2subW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDE0
QUQyODIwMjUyOUIwMDA4OTBFM0IgLyogUHJvY2Vzc0NoZWNrLm1tICovOyB9OwogCQlERThCMTNC
MzIxQ0M1RDlGMDBBNjNGQ0QgLyogQlZNVGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gREU4QjEzQjIyMUNDNUQ5RjAwQTYzRkNEIC8qIEJWTVRhZ3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzFF
NzQ4MDIyMzhDQTVDMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMxRTc0N0YyMjM4Q0E1QjAwNUQwODRB
IC8qIFN0YXRpY1BlclByb2Nlc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogLyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2lu
IFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCkBAIC0zMDksNiArMzEwLDcgQEAKIAkJ
QUQxNEFEMjcyMDI1MjlBNjAwODkwRTNCIC8qIFByb2Nlc3NDaGVjay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9jZXNzQ2hlY2suaDsgcGF0aCA9IGJtYWxsb2MvUHJvY2Vz
c0NoZWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUFEMTRBRDI4MjAyNTI5QjAw
MDg5MEUzQiAvKiBQcm9jZXNzQ2hlY2subW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBQcm9jZXNzQ2hlY2subW07IHBhdGggPSBibWFsbG9jL1Byb2Nlc3NDaGVjay5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREU4QjEzQjIyMUNDNUQ5RjAwQTYzRkNE
IC8qIEJWTVRhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQlZNVGFncy5oOyBwYXRoID0gYm1hbGxvYy9C
Vk1UYWdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMUU3NDdGMjIzOENBNUIw
MDVEMDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFN0YXRpY1BlclByb2Nlc3MuaDsgcGF0aCA9IGJtYWxsb2MvU3RhdGljUGVyUHJvY2Vz
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ug
c2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICov
CkBAIC01NTIsNiArNTU0LDcgQEAKIAkJCQkxNDQ0NjlGRDE3QTYxRjFGMDBGOUVBMUQgLyogUGVy
VGhyZWFkLmggKi8sCiAJCQkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8qIFJhbmdlLmggKi8s
CiAJCQkJMTQ4RUZBRTYxRDZCOTUzQjAwOEU3MjFFIC8qIFNjb3BlRXhpdC5oICovLAorCQkJCUUz
MUU3NDdGMjIzOENBNUIwMDVEMDg0QSAvKiBTdGF0aWNQZXJQcm9jZXNzLmggKi8sCiAJCQkJN0M1
NzFGMDAyMjM4OEI4NDAwNzdBM0M3IC8qIFN0ZExpYkV4dHJhcy5oICovLAogCQkJCTE0MTdGNjRG
MThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8sCiAJCQkJMTQ3OUUyMTIxN0ExQTI1NTAw
NkQ0RTlEIC8qIFZlY3Rvci5oICovLApAQCAtNjY1LDYgKzY2OCw3IEBACiAJCQkJMTRERDc4OTAx
OEY0OENFQjAwOTUwNzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCQzE4
RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhC
RDE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxQYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMzFF
NzQ4MDIyMzhDQTVDMDA1RDA4NEEgLyogU3RhdGljUGVyUHJvY2Vzcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0M1NzFGMDEyMjM4OEI4NDAwNzdBM0M3IC8qIFN0ZExpYkV4dHJhcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRERDc4Q0UxOEY0OEQ3NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3OENGMThGNDhENzUwMDk1MDcwMiAvKiBWZWN0b3IuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxJc29IZWFwcy5j
cHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbElzb0hlYXBzLmNwcAppbmRleCBhMDcwOWM4
NDliMGUwZmFmODQ2ODNiY2ZhMDhkY2Y0MzYyNmFkMjQ2Li5mZmYwZTQwZDc1NjA4ZWNhNjk0NDMw
MzhhODI1NGUwNmNkMDg5ZjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bElzb0hlYXBzLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbElzb0hlYXBzLmNw
cApAQCAtMjcsNiArMjcsOCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK0RFRklORV9TVEFU
SUNfUEVSX1BST0NFU1NfU1RPUkFHRShBbGxJc29IZWFwcyk7CisKIEFsbElzb0hlYXBzOjpBbGxJ
c29IZWFwcyhjb25zdCBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsSXNvSGVhcHMuaCBiL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvQWxsSXNvSGVhcHMuaAppbmRleCA3OGVhZTM0M2Y2Y2I3MDk2N2E1MjNmMTk2MTc4OWZk
ZmMwYWUxMzI3Li5hMGZjZWViNjlkZjQzZDkxNzE1ODIyN2ZiNDU4M2VkNjQyMTAxYzhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbElzb0hlYXBzLmgKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9BbGxJc29IZWFwcy5oCkBAIC0yNiwxMSArMjYsMTIgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiSXNvSGVhcEltcGwuaCIKKyNpbmNsdWRlICJTdGF0aWNQZXJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAot
Y2xhc3MgQWxsSXNvSGVhcHMgeworY2xhc3MgQWxsSXNvSGVhcHMgOiBwdWJsaWMgU3RhdGljUGVy
UHJvY2VzczxBbGxJc29IZWFwcz4gewogcHVibGljOgogICAgIEFsbElzb0hlYXBzKGNvbnN0IHN0
ZDo6bG9ja19ndWFyZDxNdXRleD4mKTsKICAgICAKQEAgLTQ0LDYgKzQ1LDcgQEAgY2xhc3MgQWxs
SXNvSGVhcHMgewogICAgIE11dGV4IG1fbG9jazsKICAgICBJc29IZWFwSW1wbEJhc2UqIG1faGVh
ZCB7IG51bGxwdHIgfTsKIH07CitERUNMQVJFX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKEFs
bElzb0hlYXBzKTsKIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0FsbG9jYXRvci5jcHAKaW5kZXggNDA5MTQwZWIwZTc4NDY2Mjk1NDJhMmM1OTEyOWQxYTk3NDA3
M2JlMy4uZDA4NmQyMmIxNTlkMmZmOTEwMjE4OWY5OTI0ZjNmZTU1ZDQzYmQ5YiAxMDA2NDQKLS0t
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcApAQCAtNDAsNyArNDAsNyBAQCBBbGxvY2F0b3I6OkFs
bG9jYXRvcihIZWFwJiBoZWFwLCBEZWFsbG9jYXRvciYgZGVhbGxvY2F0b3IpCiAgICAgOiBtX2hl
YXAoaGVhcCkKICAgICAsIG1fZGVhbGxvY2F0b3IoZGVhbGxvY2F0b3IpCiB7Ci0gICAgQkFTU0VS
VCghUGVyUHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7
CisgICAgQkFTU0VSVCghRW52aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7
CiAgICAgZm9yIChzaXplX3Qgc2l6ZUNsYXNzID0gMDsgc2l6ZUNsYXNzIDwgc2l6ZUNsYXNzQ291
bnQ7ICsrc2l6ZUNsYXNzKQogICAgICAgICBtX2J1bXBBbGxvY2F0b3JzW3NpemVDbGFzc10uaW5p
dChvYmplY3RTaXplKHNpemVDbGFzcykpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DYWNoZS5jcHAgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcAppbmRl
eCBmOTdkNDVlMTRiNzNiY2EzODU3YTdiMzFhZmJkOWZkNWU0N2ZhZThlLi4wZDFmYTlkNDI1NDNl
NTRiZDYyYmNiODM1YmQ3NGZhNTIxMDE0NDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NhY2hlLmNwcApA
QCAtNDgsNyArNDgsNyBAQCBDYWNoZTo6Q2FjaGUoSGVhcEtpbmQgaGVhcEtpbmQpCiAgICAgOiBt
X2RlYWxsb2NhdG9yKFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaGVh
cEtpbmQpKQogICAgICwgbV9hbGxvY2F0b3IoUGVyUHJvY2VzczxQZXJIZWFwS2luZDxIZWFwPj46
OmdldCgpLT5hdChoZWFwS2luZCksIG1fZGVhbGxvY2F0b3IpCiB7Ci0gICAgQkFTU0VSVCghUGVy
UHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CisgICAg
QkFTU0VSVCghRW52aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CiB9CiAK
IEJOT19JTkxJTkUgdm9pZCogQ2FjaGU6OnRyeUFsbG9jYXRlU2xvd0Nhc2VOdWxsQ2FjaGUoSGVh
cEtpbmQgaGVhcEtpbmQsIHNpemVfdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9DcnlwdG9SYW5kb20uY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DcnlwdG9S
YW5kb20uY3BwCmluZGV4IDhjNDE1ZWVjZGEzODQ4ZDZkNWNmYjQ0Y2E1OTFlNGRhN2ZlMDEwYjMu
LjYzZGQ5ZDQ5YmYyOTFhNzU2YTBkZGFiMmU0Y2QwMmQxNTMyZmEwZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQ3J5cHRvUmFuZG9tLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0NyeXB0b1JhbmRvbS5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKICNpbmNsdWRlICJC
QXNzZXJ0LmgiCiAjaW5jbHVkZSAiQlBsYXRmb3JtLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKLSNp
bmNsdWRlICJQZXJQcm9jZXNzLmgiCisjaW5jbHVkZSAiU3RhdGljUGVyUHJvY2Vzcy5oIgogI2lu
Y2x1ZGUgIlZNQWxsb2NhdGUuaCIKICNpbmNsdWRlIDxtdXRleD4KIApAQCAtNTksNyArNTksNyBA
QCBjbGFzcyBBUkM0U3RyZWFtIHsKICAgICB1aW50OF90IHNbMjU2XTsKIH07CiAKLWNsYXNzIEFS
QzRSYW5kb21OdW1iZXJHZW5lcmF0b3IgeworY2xhc3MgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRv
ciA6IHB1YmxpYyBTdGF0aWNQZXJQcm9jZXNzPEFSQzRSYW5kb21OdW1iZXJHZW5lcmF0b3I+IHsK
IHB1YmxpYzoKICAgICBBUkM0UmFuZG9tTnVtYmVyR2VuZXJhdG9yKGNvbnN0IHN0ZDo6bG9ja19n
dWFyZDxNdXRleD4mKTsKIApAQCAtNzYsNiArNzYsOCBAQCBjbGFzcyBBUkM0UmFuZG9tTnVtYmVy
R2VuZXJhdG9yIHsKICAgICBpbnQgbV9jb3VudDsKICAgICBNdXRleCBtX211dGV4OwogfTsKK0RF
Q0xBUkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQVJDNFJhbmRvbU51bWJlckdlbmVyYXRv
cik7CitERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoQVJDNFJhbmRvbU51bWJlckdl
bmVyYXRvcik7CiAKIEFSQzRTdHJlYW06OkFSQzRTdHJlYW0oKQogewpAQCAtMTc2LDcgKzE3OCw3
IEBAIHZvaWQgQVJDNFJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmFuZG9tVmFsdWVzKHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGxlbmd0aCkKIAogdm9pZCBjcnlwdG9SYW5kb20odm9pZCogYnVmZmVyLCBz
aXplX3QgbGVuZ3RoKQogewotICAgIFBlclByb2Nlc3M8QVJDNFJhbmRvbU51bWJlckdlbmVyYXRv
cj46OmdldCgpLT5yYW5kb21WYWx1ZXMoYnVmZmVyLCBsZW5ndGgpOworICAgIEFSQzRSYW5kb21O
dW1iZXJHZW5lcmF0b3I6OmdldCgpLT5yYW5kb21WYWx1ZXMoYnVmZmVyLCBsZW5ndGgpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3Iu
Y3BwCmluZGV4IDU4Y2UzYTZhOTEwZjA1MzBlYzBkMTFhZThlZTM3YWI3OTM1MTMwM2UuLjM3NzIy
NzBhNDBmMzU3MGNiZGNhMWFlYjRhZjBmZWJhOWM5NzQ1M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsK
IERlYWxsb2NhdG9yOjpEZWFsbG9jYXRvcihIZWFwJiBoZWFwKQogICAgIDogbV9oZWFwKGhlYXAp
CiB7Ci0gICAgQkFTU0VSVCghUGVyUHJvY2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVn
SGVhcEVuYWJsZWQoKSk7CisgICAgQkFTU0VSVCghRW52aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVn
SGVhcEVuYWJsZWQoKSk7CiB9CiAKIERlYWxsb2NhdG9yOjp+RGVhbGxvY2F0b3IoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuY3BwIGIvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9EZWJ1Z0hlYXAuY3BwCmluZGV4IGNkNTYwOWU1NjAyYTcyZDFlZmNjM2Q3N2Nj
NDVmYzE1YzczMmRiNDEuLjBiMGZkYjU0YzAyYmM0NGY3MTZmNWUyNDU1YTMzMDM4NTU3Nzk4YTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFwLmNwcAorKysgYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYnVnSGVhcC5jcHAKQEAgLTM2LDYgKzM2LDggQEAgbmFt
ZXNwYWNlIGJtYWxsb2MgewogCiBEZWJ1Z0hlYXAqIGRlYnVnSGVhcENhY2hlIHsgbnVsbHB0ciB9
OwogICAgIAorREVGSU5FX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKERlYnVnSGVhcCk7CisK
ICNpZiBCT1MoREFSV0lOKQogCiBEZWJ1Z0hlYXA6OkRlYnVnSGVhcChzdGQ6OmxvY2tfZ3VhcmQ8
TXV0ZXg+JikKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFwLmgg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYnVnSGVhcC5oCmluZGV4IDc3YTI2NTg2NzI3NzIx
NmIyZmI1YzY5Njg0ODc2YjExYmYzZTUwZjIuLjcwMzJiMDIwMTg1OGIyYjcxZWIzZTllODgzNGQ1
MGM4YmQzZGE2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdIZWFw
LmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuaApAQCAtMjcsNyArMjcs
NyBAQAogCiAjaW5jbHVkZSAiRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJNdXRleC5oIgotI2lu
Y2x1ZGUgIlBlclByb2Nlc3MuaCIKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCiAjaW5j
bHVkZSA8bXV0ZXg+CiAjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KIApAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAgICAgCi1jbGFzcyBEZWJ1Z0hlYXAgeworY2xhc3Mg
RGVidWdIZWFwIDogcHJpdmF0ZSBTdGF0aWNQZXJQcm9jZXNzPERlYnVnSGVhcD4gewogcHVibGlj
OgogICAgIERlYnVnSGVhcChzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+Jik7CiAgICAgCkBAIC02NCwx
NCArNjQsMTUgQEAgY2xhc3MgRGVidWdIZWFwIHsKICAgICBzdGQ6Om11dGV4IG1fbG9jazsKICAg
ICBzdGQ6OnVub3JkZXJlZF9tYXA8dm9pZCosIHNpemVfdD4gbV9zaXplTWFwOwogfTsKK0RFQ0xB
UkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoRGVidWdIZWFwKTsKIAogZXh0ZXJuIEJFWFBP
UlQgRGVidWdIZWFwKiBkZWJ1Z0hlYXBDYWNoZTsKIEJJTkxJTkUgRGVidWdIZWFwKiBEZWJ1Z0hl
YXA6OnRyeUdldCgpCiB7CiAgICAgaWYgKGRlYnVnSGVhcENhY2hlKQogICAgICAgICByZXR1cm4g
ZGVidWdIZWFwQ2FjaGU7Ci0gICAgaWYgKFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+
aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKLSAgICAgICAgZGVidWdIZWFwQ2FjaGUgPSBQZXJQcm9j
ZXNzPERlYnVnSGVhcD46OmdldCgpOworICAgIGlmIChFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVi
dWdIZWFwRW5hYmxlZCgpKSB7CisgICAgICAgIGRlYnVnSGVhcENhY2hlID0gRGVidWdIZWFwOjpn
ZXQoKTsKICAgICAgICAgcmV0dXJuIGRlYnVnSGVhcENhY2hlOwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQu
Y3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5jcHAKaW5kZXggODFmN2M3
MTI4NDYyYjcyNzBiNjMyY2ExNWYyMTk2NWZkNjQzOGNmZi4uODdjMDA1MDExMWRhMDI3YTU1MWY5
NWMyZDk2MDYyMzhiNmY1NzI1MSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9F
bnZpcm9ubWVudC5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVudC5j
cHAKQEAgLTEyNSw2ICsxMjUsOCBAQCBzdGF0aWMgYm9vbCBpc05hbm9NYWxsb2NFbmFibGVkKCkK
IH0KICNlbmRpZgogCitERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JBR0UoRW52aXJvbm1l
bnQpOworCiBFbnZpcm9ubWVudDo6RW52aXJvbm1lbnQoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYp
CiAgICAgOiBtX2lzRGVidWdIZWFwRW5hYmxlZChjb21wdXRlSXNEZWJ1Z0hlYXBFbmFibGVkKCkp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmggYi9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Vudmlyb25tZW50LmgKaW5kZXggOTE3YzZmM2UzMDFkMTA3
M2E0NTE4YmE2ZjA2YTNiY2U4MTA5ODQxNi4uYTU2MjU2ZWJjYThlOWQ0ZmNlOWRiNDM1MmRlMjBh
MjcyZjczNDk1YyAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9FbnZpcm9ubWVu
dC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW52aXJvbm1lbnQuaApAQCAtMjcsMTAg
KzI3LDExIEBACiAjZGVmaW5lIEVudmlyb25tZW50X2gKIAogI2luY2x1ZGUgIk11dGV4LmgiCisj
aW5jbHVkZSAiU3RhdGljUGVyUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLWNs
YXNzIEVudmlyb25tZW50IHsKK2NsYXNzIEVudmlyb25tZW50IDogcHVibGljIFN0YXRpY1BlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+IHsKIHB1YmxpYzoKICAgICBCRVhQT1JUIEVudmlyb25tZW50KHN0
ZDo6bG9ja19ndWFyZDxNdXRleD4mKTsKICAgICAKQEAgLTQxLDYgKzQyLDcgQEAgY2xhc3MgRW52
aXJvbm1lbnQgewogCiAgICAgYm9vbCBtX2lzRGVidWdIZWFwRW5hYmxlZDsKIH07CitERUNMQVJF
X1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKEVudmlyb25tZW50KTsKIAogfSAvLyBuYW1lc3Bh
Y2UgYm1hbGxvYwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdl
LmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCmluZGV4IDNhOWM3ZDIy
NTU3OWJhNmZlYWQyYzRmNTJlNGI3NjQxNzc0NGZiZjMuLmM4NWQxZjRjMzYxOWE4MWViYTc4MTRk
Mjk5ZGJmYjU2OGViNTQ5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2ln
YWNhZ2UuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCkBAIC0y
Nyw4ICsyNyw4IEBACiAKICNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKICNpbmNsdWRlICJFbnZp
cm9ubWVudC5oIgotI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJQcm9jZXNzQ2hl
Y2suaCIKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVk1BbGxvY2F0
ZS5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgImJtYWxsb2MuaCIKQEAgLTM5LDYg
KzM5LDM1IEBACiAKIG5hbWVzcGFjZSBHaWdhY2FnZSB7CiAKK3N0cnVjdCBDYWxsYmFjayB7Cisg
ICAgQ2FsbGJhY2soKSB7IH0KKyAgICAKKyAgICBDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZv
aWQqKSwgdm9pZCAqYXJndW1lbnQpCisgICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCisgICAg
ICAgICwgYXJndW1lbnQoYXJndW1lbnQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkICgq
ZnVuY3Rpb24pKHZvaWQqKSB7IG51bGxwdHIgfTsKKyAgICB2b2lkKiBhcmd1bWVudCB7IG51bGxw
dHIgfTsKK307CisKK30KKworbmFtZXNwYWNlIGJtYWxsb2MgeworCitzdHJ1Y3QgUHJpbWl0aXZl
RGlzYWJsZUNhbGxiYWNrcyA6IHB1YmxpYyBTdGF0aWNQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2Fi
bGVDYWxsYmFja3M+IHsKKyAgICBQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzKHN0ZDo6bG9ja19n
dWFyZDxNdXRleD4mKSB7IH0KKyAgICAKKyAgICBWZWN0b3I8R2lnYWNhZ2U6OkNhbGxiYWNrPiBj
YWxsYmFja3M7Cit9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShQcmltaXRp
dmVEaXNhYmxlQ2FsbGJhY2tzKTsKK0RFRklORV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShQ
cmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzKTsKKworfQorCituYW1lc3BhY2UgR2lnYWNhZ2Ugewor
CiAvLyBUaGlzIGlzIGV4YWN0bHkgMzJHQiBiZWNhdXNlIGluc2lkZSBKU0MsIGluZGV4ZWQgYWNj
ZXNzZXMgZm9yIGFycmF5cywgdHlwZWQgYXJyYXlzLCBldGMsCiAvLyB1c2UgdW5zaWduZWQgMzIt
Yml0IGludHMgYXMgaW5kaWNlcy4gVGhlIGl0ZW1zIHRob3NlIGluZGljZXMgYWNjZXNzIGFyZSA4
IGJ5dGVzIG9yIGxlc3MKIC8vIGluIHNpemUuIDJeMzIgKiA4ID0gMzJHQi4gVGhpcyBtZWFucyBp
ZiBhbiBhY2Nlc3Mgb24gYSBjYWdlZCB0eXBlIGhhcHBlbnMgdG8gZ28gb3V0IG9mCkBAIC04NCwy
NSArMTEzLDYgQEAgY2xhc3MgVW5wcm90ZWN0R2lnYWNhZ2VCYXNlUHRyc1Njb3BlIHsKICAgICB9
CiB9OwogCi1zdHJ1Y3QgQ2FsbGJhY2sgewotICAgIENhbGxiYWNrKCkgeyB9Ci0gICAgCi0gICAg
Q2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQgKmFyZ3VtZW50KQotICAgICAg
ICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQotICAgICAgICAsIGFyZ3VtZW50KGFyZ3VtZW50KQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCAoKmZ1bmN0aW9uKSh2b2lkKikgeyBudWxscHRyIH07
Ci0gICAgdm9pZCogYXJndW1lbnQgeyBudWxscHRyIH07Ci19OwotCi1zdHJ1Y3QgUHJpbWl0aXZl
RGlzYWJsZUNhbGxiYWNrcyB7Ci0gICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyhzdGQ6Omxv
Y2tfZ3VhcmQ8TXV0ZXg+JikgeyB9Ci0gICAgCi0gICAgVmVjdG9yPENhbGxiYWNrPiBjYWxsYmFj
a3M7Ci19OwotCiBzaXplX3QgcnVud2F5U2l6ZShLaW5kIGtpbmQpCiB7CiAgICAgc3dpdGNoIChr
aW5kKSB7CkBAIC0xOTksOCArMjA5LDggQEAgdm9pZCBkaXNhYmxlUHJpbWl0aXZlR2lnYWNhZ2Uo
KQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByaW1pdGl2ZURpc2FibGVDYWxs
YmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+
OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsb2NrKFBlclByb2Nlc3M8UHJp
bWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVD
YWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjpnZXQoKTsK
KyAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3M6Om11dGV4KCkpOwogICAgIGZvciAoQ2FsbGJhY2smIGNhbGxiYWNrIDogY2FsbGJhY2tzLmNh
bGxiYWNrcykKICAgICAgICAgY2FsbGJhY2suZnVuY3Rpb24oY2FsbGJhY2suYXJndW1lbnQpOwog
ICAgIGNhbGxiYWNrcy5jYWxsYmFja3Muc2hyaW5rKDApOwpAQCAtMjE3LDE1ICsyMjcsMTUgQEAg
dm9pZCBhZGRQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiks
IHZvaWQqIGFyZ3VtZW50KQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIFByaW1p
dGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9jZXNzPFByaW1pdGl2ZURp
c2FibGVDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsb2Nr
KFBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11dGV4KCkpOworICAgIFBy
aW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQcmltaXRpdmVEaXNhYmxlQ2Fs
bGJhY2tzOjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiBsb2NrKFByaW1pdGl2
ZURpc2FibGVDYWxsYmFja3M6Om11dGV4KCkpOwogICAgIGNhbGxiYWNrcy5jYWxsYmFja3MucHVz
aChDYWxsYmFjayhmdW5jdGlvbiwgYXJndW1lbnQpKTsKIH0KIAogdm9pZCByZW1vdmVQcmltaXRp
dmVEaXNhYmxlQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50
KQogewotICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQZXJQcm9j
ZXNzPFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M+OjpnZXQoKTsKLSAgICBzdGQ6OnVuaXF1ZV9s
b2NrPE11dGV4PiBsb2NrKFBlclByb2Nlc3M8UHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcz46Om11
dGV4KCkpOworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MmIGNhbGxiYWNrcyA9ICpQcmlt
aXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjpnZXQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4
PiBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6Om11dGV4KCkpOwogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmNhbGxiYWNrcy5zaXplKCk7ICsraSkgewogICAgICAg
ICBpZiAoY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5mdW5jdGlvbiA9PSBmdW5jdGlvbgogICAgICAg
ICAgICAgJiYgY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5hcmd1bWVudCA9PSBhcmd1bWVudCkgewpA
QCAtMjY3LDcgKzI3Nyw3IEBAIGJvb2wgc2hvdWxkQmVFbmFibGVkKCkKICAgICBzdGQ6OmNhbGxf
b25jZSgKICAgICAgICAgb25jZUZsYWcsCiAgICAgICAgIFtdIHsKLSAgICAgICAgICAgIGJvb2wg
ZGVidWdIZWFwRW5hYmxlZCA9IFBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1
Z0hlYXBFbmFibGVkKCk7CisgICAgICAgICAgICBib29sIGRlYnVnSGVhcEVuYWJsZWQgPSBFbnZp
cm9ubWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpOwogICAgICAgICAgICAgaWYgKGRl
YnVnSGVhcEVuYWJsZWQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9I
ZWFwLmNwcAppbmRleCAyNWEyOWFiNDRiN2E2M2FjZWJjNDhlNGNkZTIxZGJlNTk3YTk2YjdkLi5l
ZjAzZmQ0Y2MyMzdiZTg3M2E1ZDQyZjZiMDU2ZmQ0MDE2MWY0OTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SGVhcC5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgSGVhcDo6SGVhcChIZWFwS2luZCBraW5kLCBzdGQ6
OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKICAgICBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7CiAgICAg
aW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpOwogICAgIAotICAgIEJBU1NFUlQoIVBlclByb2Nlc3M8
RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOworICAgIEJBU1NFUlQo
IUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogCiAgICAgR2lnYWNh
Z2U6OmVuc3VyZUdpZ2FjYWdlKCk7CiAjaWYgR0lHQUNBR0VfRU5BQkxFRApAQCAtNjksNyArNjks
NyBAQCBIZWFwOjpIZWFwKEhlYXBLaW5kIGtpbmQsIHN0ZDo6bG9ja19ndWFyZDxNdXRleD4mKQog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIG1fc2NhdmVuZ2VyID0gUGVyUHJvY2VzczxTY2F2ZW5n
ZXI+OjpnZXQoKTsKKyAgICBtX3NjYXZlbmdlciA9IFNjYXZlbmdlcjo6Z2V0KCk7CiB9CiAKIGJv
b2wgSGVhcDo6dXNpbmdHaWdhY2FnZSgpCkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCogSGVhcDo6
dHJ5QWxsb2NhdGVMYXJnZShzdGQ6OnVuaXF1ZV9sb2NrPE11dGV4PiYgbG9jaywgc2l6ZV90IGFs
aWdubWVudCwgc2kKICAgICAgICAgaWYgKHVzaW5nR2lnYWNhZ2UoKSkKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgICAgIHJhbmdlID0gUGVyUHJvY2VzczxWTUhlYXA+OjpnZXQo
KS0+dHJ5QWxsb2NhdGVMYXJnZUNodW5rKGFsaWdubWVudCwgc2l6ZSk7CisgICAgICAgIHJhbmdl
ID0gVk1IZWFwOjpnZXQoKS0+dHJ5QWxsb2NhdGVMYXJnZUNodW5rKGFsaWdubWVudCwgc2l6ZSk7
CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0RpcmVjdG9yeUlubGlu
ZXMuaCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCmluZGV4
IDEyYTQ4ZTVjMzE2OWY1Yjc5MTUyMGE4MzE4ZTcwZTQwZjE0M2QxNmYuLmYzODhkZWQ4ZmQxZWVl
ZTRlYzY4ZTUwZDk4NWYzMjFiNWY5ZjkzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSXNvRGlyZWN0b3J5SW5saW5lcy5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SXNvRGlyZWN0b3J5SW5saW5lcy5oCkBAIC01Myw3ICs1Myw3IEBAIEVsaWdpYmlsaXR5UmVzdWx0
PENvbmZpZz4gSXNvRGlyZWN0b3J5PENvbmZpZywgcGFzc2VkTnVtUGFnZXM+Ojp0YWtlRmlyc3RF
bGlnaWJsCiAKICAgICBtX2hpZ2hXYXRlcm1hcmsgPSBzdGQ6Om1heChwYWdlSW5kZXgsIG1faGln
aFdhdGVybWFyayk7CiAgICAgCi0gICAgU2NhdmVuZ2VyJiBzY2F2ZW5nZXIgPSAqUGVyUHJvY2Vz
czxTY2F2ZW5nZXI+OjpnZXQoKTsKKyAgICBTY2F2ZW5nZXImIHNjYXZlbmdlciA9ICpTY2F2ZW5n
ZXI6OmdldCgpOwogICAgIHNjYXZlbmdlci5kaWRTdGFydEdyb3dpbmcoKTsKICAgICAKICAgICBJ
c29QYWdlPENvbmZpZz4qIHBhZ2UgPSBtX3BhZ2VzW3BhZ2VJbmRleF07CkBAIC0xMDgsNyArMTA4
LDcgQEAgdm9pZCBJc29EaXJlY3Rvcnk8Q29uZmlnLCBwYXNzZWROdW1QYWdlcz46OmRpZEJlY29t
ZShJc29QYWdlPENvbmZpZz4qIHBhZ2UsIElzb1AKICAgICAgICAgQkFTU0VSVCghIW1fY29tbWl0
dGVkW3BhZ2VJbmRleF0pOwogICAgICAgICB0aGlzLT5tX2hlYXAuaXNOb3dGcmVlYWJsZShwYWdl
LCBJc29QYWdlQmFzZTo6cGFnZVNpemUpOwogICAgICAgICBtX2VtcHR5W3BhZ2VJbmRleF0gPSB0
cnVlOwotICAgICAgICBQZXJQcm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5zY2hlZHVsZShJc29Q
YWdlQmFzZTo6cGFnZVNpemUpOworICAgICAgICBTY2F2ZW5nZXI6OmdldCgpLT5zY2hlZHVsZShJ
c29QYWdlQmFzZTo6cGFnZVNpemUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEJDUkFT
SCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29IZWFwSW1wbC5jcHAg
Yi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmNwcAppbmRleCA5ZjM5YTc1OWIz
NTI5NjI5ZmFhNzkxNjcxNmYxMzY2NTU4MjgzOWRmLi42OTZkMjJlNTdmNjIyM2Y5YjkyOTQyYWIy
ZjJlMGIwOWFhYmQ5YTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hl
YXBJbXBsLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb0hlYXBJbXBsLmNwcApA
QCAtNDEsNyArNDEsNyBAQCBJc29IZWFwSW1wbEJhc2U6On5Jc29IZWFwSW1wbEJhc2UoKQogCiB2
b2lkIElzb0hlYXBJbXBsQmFzZTo6YWRkVG9BbGxJc29IZWFwcygpCiB7Ci0gICAgUGVyUHJvY2Vz
czxBbGxJc29IZWFwcz46OmdldCgpLT5hZGQodGhpcyk7CisgICAgQWxsSXNvSGVhcHM6OmdldCgp
LT5hZGQodGhpcyk7CiB9CiAKIHZvaWQgSXNvSGVhcEltcGxCYXNlOjpzY2F2ZW5nZU5vdygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2UuY3BwIGIvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9Jc29QYWdlLmNwcAppbmRleCAyNTYwYzFkMWY1NjBhMThmMzVjZWVlZjBh
NmRkZDA2YTc3N2FjZmU1Li4yZGFjMGY0MmQ0NzBkMjllYTAyMmE3NzZlMzMxYzgzZGM1NTNlZWQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNw
YWNlIGJtYWxsb2MgewogCiB2b2lkKiBJc29QYWdlQmFzZTo6YWxsb2NhdGVQYWdlTWVtb3J5KCkK
IHsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxWTUhlYXA+OjpnZXQoKS0+dHJ5QWxsb2NhdGVMYXJn
ZUNodW5rKHBhZ2VTaXplLCBwYWdlU2l6ZSkuYmVnaW4oKTsKKyAgICByZXR1cm4gVk1IZWFwOjpn
ZXQoKS0+dHJ5QWxsb2NhdGVMYXJnZUNodW5rKHBhZ2VTaXplLCBwYWdlU2l6ZSkuYmVnaW4oKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9Jc29UTFMuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFMuY3BwCmlu
ZGV4IDI4ZTAwNWEzMWI3MDQ1MmViNjdhNGQxOWM0OWIyOThmOTFlZmQ0MDIuLmRiYzBlN2ViYTNh
MzBhZTEzODRmMDA5NWMwZDcxMjVmODQyN2ExNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvSXNvVExTLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMUy5j
cHAKQEAgLTU0LDcgKzU0LDcgQEAgdm9pZCBJc29UTFM6OnNjYXZlbmdlKCkKIAogSXNvVExTOjpJ
c29UTFMoKQogewotICAgIEJBU1NFUlQoIVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+
aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOworICAgIEJBU1NFUlQoIUVudmlyb25tZW50OjpnZXQoKS0+
aXNEZWJ1Z0hlYXBFbmFibGVkKCkpOwogfQogCiBJc29UTFMqIElzb1RMUzo6ZW5zdXJlRW50cmll
cyh1bnNpZ25lZCBvZmZzZXQpCkBAIC03Nyw3ICs3Nyw3IEBAIElzb1RMUyogSXNvVExTOjplbnN1
cmVFbnRyaWVzKHVuc2lnbmVkIG9mZnNldCkKICAgICAgICAgfSk7CiAgICAgCiAgICAgSXNvVExT
KiB0bHMgPSBnZXQoKTsKLSAgICBJc29UTFNMYXlvdXQmIGxheW91dCA9ICpQZXJQcm9jZXNzPElz
b1RMU0xheW91dD46OmdldCgpOworICAgIElzb1RMU0xheW91dCYgbGF5b3V0ID0gKklzb1RMU0xh
eW91dDo6Z2V0KCk7CiAKICAgICBJc29UTFNFbnRyeSogb2xkTGFzdEVudHJ5ID0gdGxzID8gdGxz
LT5tX2xhc3RFbnRyeSA6IG51bGxwdHI7CiAgICAgUkVMRUFTRV9CQVNTRVJUKCFvbGRMYXN0RW50
cnkgfHwgb2xkTGFzdEVudHJ5LT5vZmZzZXQoKSA8IG9mZnNldCk7CkBAIC0xNjcsNyArMTY3LDcg
QEAgdm9pZCBJc29UTFM6OmZvckVhY2hFbnRyeShjb25zdCBGdW5jJiBmdW5jKQogewogICAgIGlm
ICghbV9sYXN0RW50cnkpCiAgICAgICAgIHJldHVybjsKLSAgICBQZXJQcm9jZXNzPElzb1RMU0xh
eW91dD46OmdldCgpLT5oZWFkKCktPndhbGtVcFRvSW5jbHVzaXZlKAorICAgIElzb1RMU0xheW91
dDo6Z2V0KCktPmhlYWQoKS0+d2Fsa1VwVG9JbmNsdXNpdmUoCiAgICAgICAgIG1fbGFzdEVudHJ5
LAogICAgICAgICBbJl0gKElzb1RMU0VudHJ5KiBlbnRyeSkgewogICAgICAgICAgICAgZnVuYyhl
bnRyeSwgbV9kYXRhICsgZW50cnktPm9mZnNldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSXNvVExTRW50cnkuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29U
TFNFbnRyeS5jcHAKaW5kZXggYzc2OTYyYTg1MmY1NWM2YjQ4MGI4NzIzMTEyOTg2ZDljNzhmMWZi
MS4uN2Y2ZDc3NzAxYjhiMGJjNGQ5MmFiYWVkMzg0NDFlNzQ3MGZhOTg1YSAxMDA2NDQKLS0tIGEv
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNFbnRyeS5jcHAKKysrIGIvU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9Jc29UTFNFbnRyeS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgSXNvVExTRW50cnk6
Oklzb1RMU0VudHJ5KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogICAgICwgbV9hbGln
bm1lbnQoYWxpZ25tZW50KQogICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgUGVyUHJvY2VzczxJ
c29UTFNMYXlvdXQ+OjpnZXQoKS0+YWRkKHRoaXMpOworICAgIElzb1RMU0xheW91dDo6Z2V0KCkt
PmFkZCh0aGlzKTsKICAgICBSRUxFQVNFX0JBU1NFUlQobV9vZmZzZXQgIT0gVUlOVF9NQVgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0lubGluZXMuaCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTSW5saW5lcy5oCmluZGV4IDdkODY2YTNlNjBh
ZWU3NmNhMjExOTQ0MmFmOGNmYmVlNzkzODgxNzMuLjdlYzRmN2Y2ZGY2OTRjMTU3ZDc2NGY3NjUy
NTJhZGQwM2JhNzBmYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExT
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTSW5saW5lcy5oCkBA
IC05Niw3ICs5Niw3IEBAIEJOT19JTkxJTkUgdm9pZCogSXNvVExTOjphbGxvY2F0ZVNsb3coYXBp
OjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIGJvb2wgYWJvcnRPbkZhCiAgICAgfQogICAgIAogICAg
IC8vIElmIGRlYnVnIGhlYXAgaXMgZW5hYmxlZCwgc19tYWxsb2NGYWxsYmFja1N0YXRlIGJlY29t
ZXMgTWFsbG9jRmFsbGJhY2tTdGF0ZTo6RmFsbEJhY2tUb01hbGxvYy4KLSAgICBCQVNTRVJUKCFQ
ZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKKyAg
ICBCQVNTRVJUKCFFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKICAg
ICAKICAgICBJc29UTFMqIHRscyA9IGVuc3VyZUhlYXBBbmRFbnRyaWVzKGhhbmRsZSk7CiAgICAg
CkBAIC0xMzksNyArMTM5LDcgQEAgQk5PX0lOTElORSB2b2lkIElzb1RMUzo6ZGVhbGxvY2F0ZVNs
b3coYXBpOjpJc29IZWFwPFR5cGU+JiBoYW5kbGUsIHZvaWQqIHApCiAgICAgfQogICAgIAogICAg
IC8vIElmIGRlYnVnIGhlYXAgaXMgZW5hYmxlZCwgc19tYWxsb2NGYWxsYmFja1N0YXRlIGJlY29t
ZXMgTWFsbG9jRmFsbGJhY2tTdGF0ZTo6RmFsbEJhY2tUb01hbGxvYy4KLSAgICBCQVNTRVJUKCFQ
ZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKKyAg
ICBCQVNTRVJUKCFFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKICAg
ICAKICAgICBSRUxFQVNFX0JBU1NFUlQoaGFuZGxlLmlzSW5pdGlhbGl6ZWQoKSk7CiAgICAgCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0xheW91dC5jcHAgYi9Tb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0lzb1RMU0xheW91dC5jcHAKaW5kZXggZmRkOWExN2I2MWZkMWFi
NjlhNGVhMmJkZmQ2MTEzZGJhNjBmNWQ3YS4uNzZjMmRkMTgzN2ZmZmNjMDIwZGE1Y2Y5N2IwMjgz
YjI5MDlkY2JlYSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNMYXlv
dXQuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTTGF5b3V0LmNwcApAQCAt
MjksNiArMjksOCBAQAogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKK0RFRklORV9TVEFUSUNfUEVS
X1BST0NFU1NfU1RPUkFHRShJc29UTFNMYXlvdXQpOworCiBJc29UTFNMYXlvdXQ6Oklzb1RMU0xh
eW91dChjb25zdCBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+JikKIHsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTTGF5b3V0LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0lzb1RMU0xheW91dC5oCmluZGV4IGNlYmFhMjkxYzA1YWJkOWMxMWNhNTMwMWEyZmZmMWJl
NmRlYzVkNzQuLjcwNDY1YmE2OTQzYzU1OTFiYjM1MDAxYzIxM2RmMThlOWJmZjg1MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvVExTTGF5b3V0LmgKKysrIGIvU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9Jc29UTFNMYXlvdXQuaApAQCAtMjYsMTMgKzI2LDE0IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIk11dGV4LmgiCisjaW5jbHVkZSAiU3RhdGljUGVyUHJvY2Vz
cy5oIgogI2luY2x1ZGUgPG11dGV4PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIElz
b1RMU0VudHJ5OwogCi1jbGFzcyBJc29UTFNMYXlvdXQgeworY2xhc3MgSXNvVExTTGF5b3V0IDog
cHVibGljIFN0YXRpY1BlclByb2Nlc3M8SXNvVExTTGF5b3V0PiB7CiBwdWJsaWM6CiAgICAgSXNv
VExTTGF5b3V0KGNvbnN0IHN0ZDo6bG9ja19ndWFyZDxNdXRleD4mKTsKICAgICAKQEAgLTQ0LDYg
KzQ1LDcgQEAgY2xhc3MgSXNvVExTTGF5b3V0IHsKICAgICBJc29UTFNFbnRyeSogbV9oZWFkIHsg
bnVsbHB0ciB9OwogICAgIElzb1RMU0VudHJ5KiBtX3RhaWwgeyBudWxscHRyIH07CiB9OworREVD
TEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShJc29UTFNMYXlvdXQpOwogCiB9IC8vIG5h
bWVzcGFjZSBibWFsbG9jCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Nh
dmVuZ2VyLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2VyLmNwcAppbmRleCBm
OWVlOGMwZDlkNWNkNTRhNDg2NTRjY2JhNGViMDQzNGRkODE1NDAxLi5kNjY4ZmUwMzQ3Y2Y5YzFk
ZWNhYWQ1MGFlZTEwNDM0ZWU4N2Y4ZGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NjYXZlbmdlci5jcHAKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIu
Y3BwCkBAIC02NSw5ICs2NSwxMSBAQCBzdHJ1Y3QgUHJpbnRUaW1lIHsKICAgICBib29sIHByaW50
ZWQgeyBmYWxzZSB9OwogfTsKIAorREVGSU5FX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKFNj
YXZlbmdlcik7CisKIFNjYXZlbmdlcjo6U2NhdmVuZ2VyKHN0ZDo6bG9ja19ndWFyZDxNdXRleD4m
KQogewotICAgIEJBU1NFUlQoIVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1
Z0hlYXBFbmFibGVkKCkpOworICAgIEJBU1NFUlQoIUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1
Z0hlYXBFbmFibGVkKCkpOwogCiAjaWYgQk9TKERBUldJTikKICAgICBhdXRvIHF1ZXVlID0gZGlz
cGF0Y2hfcXVldWVfY3JlYXRlKCJXZWJLaXQgTWFsbG9jIE1lbW9yeSBQcmVzc3VyZSBIYW5kbGVy
IiwgRElTUEFUQ0hfUVVFVUVfU0VSSUFMKTsKQEAgLTE2NSw4ICsxNjcsOCBAQCBpbmxpbmUgdm9p
ZCBkdW1wU3RhdHMoKQogICAgIH0KICNlbmRpZgogCi0gICAgZHVtcCgiYm1hbGxvYy1mcmVlYWJs
ZSIsIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPmZyZWVhYmxlTWVtb3J5KCkpOwotICAg
IGR1bXAoImJtYWxsb2MtZm9vdHByaW50IiwgUGVyUHJvY2VzczxTY2F2ZW5nZXI+OjpnZXQoKS0+
Zm9vdHByaW50KCkpOworICAgIGR1bXAoImJtYWxsb2MtZnJlZWFibGUiLCBTY2F2ZW5nZXI6Omdl
dCgpLT5mcmVlYWJsZU1lbW9yeSgpKTsKKyAgICBkdW1wKCJibWFsbG9jLWZvb3RwcmludCIsIFNj
YXZlbmdlcjo6Z2V0KCktPmZvb3RwcmludCgpKTsKIH0KIAogc3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcyBTY2F2ZW5nZXI6OnRpbWVTaW5jZUxhc3RGdWxsU2NhdmVuZ2UoKQpAQCAtMjMwLDcgKzIz
Miw3IEBAIHZvaWQgU2NhdmVuZ2VyOjpzY2F2ZW5nZSgpCiAKICAgICB7CiAgICAgICAgIFJFTEVB
U0VfQkFTU0VSVCghbV9kZWZlcnJlZERlY29tbWl0cy5zaXplKCkpOwotICAgICAgICBQZXJQcm9j
ZXNzPEFsbElzb0hlYXBzPjo6Z2V0KCktPmZvckVhY2goCisgICAgICAgIEFsbElzb0hlYXBzOjpn
ZXQoKS0+Zm9yRWFjaCgKICAgICAgICAgICAgIFsmXSAoSXNvSGVhcEltcGxCYXNlJiBoZWFwKSB7
CiAgICAgICAgICAgICAgICAgaGVhcC5zY2F2ZW5nZShtX2RlZmVycmVkRGVjb21taXRzKTsKICAg
ICAgICAgICAgIH0pOwpAQCAtMjk3LDcgKzI5OSw3IEBAIHZvaWQgU2NhdmVuZ2VyOjpwYXJ0aWFs
U2NhdmVuZ2UoKQogCiAgICAgewogICAgICAgICBSRUxFQVNFX0JBU1NFUlQoIW1fZGVmZXJyZWRE
ZWNvbW1pdHMuc2l6ZSgpKTsKLSAgICAgICAgUGVyUHJvY2VzczxBbGxJc29IZWFwcz46OmdldCgp
LT5mb3JFYWNoKAorICAgICAgICBBbGxJc29IZWFwczo6Z2V0KCktPmZvckVhY2goCiAgICAgICAg
ICAgICBbJl0gKElzb0hlYXBJbXBsQmFzZSYgaGVhcCkgewogICAgICAgICAgICAgICAgIGhlYXAu
c2NhdmVuZ2VUb0hpZ2hXYXRlcm1hcmsobV9kZWZlcnJlZERlY29tbWl0cyk7CiAgICAgICAgICAg
ICB9KTsKQEAgLTMyOSw3ICszMzEsNyBAQCBzaXplX3QgU2NhdmVuZ2VyOjpmcmVlYWJsZU1lbW9y
eSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBQZXJQcm9jZXNzPEFsbElzb0hlYXBzPjo6Z2V0
KCktPmZvckVhY2goCisgICAgQWxsSXNvSGVhcHM6OmdldCgpLT5mb3JFYWNoKAogICAgICAgICBb
Jl0gKElzb0hlYXBJbXBsQmFzZSYgaGVhcCkgewogICAgICAgICAgICAgcmVzdWx0ICs9IGhlYXAu
ZnJlZWFibGVNZW1vcnkoKTsKICAgICAgICAgfSk7CkBAIC0zMzksNyArMzQxLDcgQEAgc2l6ZV90
IFNjYXZlbmdlcjo6ZnJlZWFibGVNZW1vcnkoKQogCiBzaXplX3QgU2NhdmVuZ2VyOjpmb290cHJp
bnQoKQogewotICAgIFJFTEVBU0VfQkFTU0VSVCghUGVyUHJvY2VzczxFbnZpcm9ubWVudD46Omdl
dCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSk7CisgICAgUkVMRUFTRV9CQVNTRVJUKCFFbnZpcm9u
bWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKTsKIAogICAgIHNpemVfdCByZXN1bHQg
PSAwOwogICAgIGZvciAodW5zaWduZWQgaSA9IG51bUhlYXBzOyBpLS07KSB7CkBAIC0zNDgsNyAr
MzUwLDcgQEAgc2l6ZV90IFNjYXZlbmdlcjo6Zm9vdHByaW50KCkKICAgICAgICAgcmVzdWx0ICs9
IFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVhcD4+OjpnZXQoKS0+YXQoaSkuZm9vdHByaW50KCk7
CiAgICAgfQogCi0gICAgUGVyUHJvY2VzczxBbGxJc29IZWFwcz46OmdldCgpLT5mb3JFYWNoKAor
ICAgIEFsbElzb0hlYXBzOjpnZXQoKS0+Zm9yRWFjaCgKICAgICAgICAgWyZdIChJc29IZWFwSW1w
bEJhc2UmIGhlYXApIHsKICAgICAgICAgICAgIHJlc3VsdCArPSBoZWFwLmZvb3RwcmludCgpOwog
ICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVuZ2Vy
LmggYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NjYXZlbmdlci5oCmluZGV4IDU5NjJmYzc0YWI3
OWI3ZjRjNTY2ZDZmZmRiODQ0NTA5MTk2ZjUxYTIuLmQ1MmEwZGVmM2Q5YzFmOTdhNzFkNWUzY2Yy
YThiZjVhYmRmMGM0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2NhdmVu
Z2VyLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TY2F2ZW5nZXIuaApAQCAtMjgsNyAr
MjgsNyBAQAogI2luY2x1ZGUgIkJQbGF0Zm9ybS5oIgogI2luY2x1ZGUgIkRlZmVycmVkRGVjb21t
aXQuaCIKICNpbmNsdWRlICJNdXRleC5oIgotI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKKyNpbmNs
dWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSA8
Y2hyb25vPgogI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KQEAgLTQwLDcgKzQwLDcgQEAK
IAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1jbGFzcyBTY2F2ZW5nZXIgeworY2xhc3MgU2NhdmVu
Z2VyIDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8U2NhdmVuZ2VyPiB7CiBwdWJsaWM6CiAgICAg
QkVYUE9SVCBTY2F2ZW5nZXIoc3RkOjpsb2NrX2d1YXJkPE11dGV4PiYpOwogICAgIApAQCAtMTEy
LDYgKzExMiw3IEBAIGNsYXNzIFNjYXZlbmdlciB7CiAgICAgCiAgICAgVmVjdG9yPERlZmVycmVk
RGVjb21taXQ+IG1fZGVmZXJyZWREZWNvbW1pdHM7CiB9OworREVDTEFSRV9TVEFUSUNfUEVSX1BS
T0NFU1NfU1RPUkFHRShTY2F2ZW5nZXIpOwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TdGF0aWNQZXJQcm9jZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjFiOTll
MDVhODI5YWEzOTk0YjdhMmJlMTgwYzZkMzY0ZmJlNTEyZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvU3RhdGljUGVyUHJvY2Vzcy5oCkBAIC0wLDAgKzEsMTA2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkJJbmxpbmUuaCIKKyNpbmNsdWRlICJNdXRleC5oIgorI2lu
Y2x1ZGUgIlNpemVzLmgiCisKK25hbWVzcGFjZSBibWFsbG9jIHsKKworLy8gU3RhdGljUGVyUHJv
Y2VzczxUPiBiZWhhdmVzIGxpa2UgUGVyUHJvY2VzczxUPiwgYnV0IHdlIG11c3QgbmVlZCB0byBl
eHBsaWNpdGx5IGRlZmluZSBhIHN0b3JhZ2UgZm9yIFQgd2l0aCBFWFRFUk4uCisvLyBJbiB0aGlz
IHdheSwgd2UgYWxsb2NhdGUgYSBzdG9yYWdlIGZvciBhIHBlci1wcm9jZXNzIG9iamVjdCBzdGF0
aWNhbGx5IGluc3RlYWQgb2YgYWxsb2NhdGluZyBtZW1vcnkgYXQgcnVudGltZS4KKy8vIFRvIGVu
Zm9yY2UgdGhpcywgd2UgaGF2ZSBERUNMQVJFIGFuZCBERUZJTkUgbWFjcm9zLiBJZiB5b3UgZG8g
bm90IGtub3cgYWJvdXQgVCBvZiBTdGF0aWNQZXJQcm9jZXNzPFQ+LCB5b3Ugc2hvdWxkIHVzZSBQ
ZXJQcm9jZXNzPFQ+IGluc3RlYWQuCisvLworLy8gVXNhZ2U6CisvLyAgICAgSW4gT2JqZWN0LmgK
Ky8vICAgICAgICAgY2xhc3MgT2JqZWN0IDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8T2JqZWN0
PiB7CisvLyAgICAgICAgICAgICAuLi4KKy8vICAgICAgICAgfTsKKy8vICAgICAgICAgREVDTEFS
RV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShPYmplY3QpOworLy8KKy8vICAgICBJbiBPYmpl
Y3QuY3BwCisvLyAgICAgICAgIERFRklORV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShPYmpl
Y3QpOworLy8KKy8vICAgICBPYmplY3QqIG9iamVjdCA9IE9iamVjdDo6Z2V0KCk7CisvLyAgICAg
eCA9IG9iamVjdC0+ZmllbGQtPmZpZWxkOworLy8KKy8vIE9iamVjdCB3aWxsIGJlIGluc3RhbnRp
YXRlZCBvbmx5IG9uY2UsIGV2ZW4gaW4gdGhlIGZhY2Ugb2YgY29uY3VycmVuY3kuCisvLwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFN0YXRpY1BlclByb2Nlc3NTdG9yYWdlVHJhaXRzOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQkVYUE9SVCBTdGF0aWNQZXJQcm9jZXNzIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgVCogZ2V0KCkKKyAgICB7CisgICAgICAgIFQqIG9iamVjdCA9
IGdldEZhc3RDYXNlKCk7CisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJu
IGdldFNsb3dDYXNlKCk7CisgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgfQorCisgICAgc3Rh
dGljIFQqIGdldEZhc3RDYXNlKCkKKyAgICB7CisgICAgICAgIHVzaW5nIFN0b3JhZ2UgPSB0eXBl
bmFtZSBTdGF0aWNQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUPjo6U3RvcmFnZTsKKyAgICAgICAg
cmV0dXJuIChTdG9yYWdlOjpzX29iamVjdCkubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVk
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgTXV0ZXgmIG11dGV4KCkKKyAgICB7CisgICAgICAgIHVz
aW5nIFN0b3JhZ2UgPSB0eXBlbmFtZSBTdGF0aWNQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUPjo6
U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFN0b3JhZ2U6OnNfbXV0ZXg7CisgICAgfQorCitwcml2
YXRlOgorICAgIEJOT19JTkxJTkUgc3RhdGljIFQqIGdldFNsb3dDYXNlKCkKKyAgICB7CisgICAg
ICAgIHVzaW5nIFN0b3JhZ2UgPSB0eXBlbmFtZSBTdGF0aWNQZXJQcm9jZXNzU3RvcmFnZVRyYWl0
czxUPjo6U3RvcmFnZTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJkPE11dGV4PiBsb2NrKFN0b3Jh
Z2U6OnNfbXV0ZXgpOworICAgICAgICBpZiAoIVN0b3JhZ2U6OnNfb2JqZWN0LmxvYWQoc3RkOjpt
ZW1vcnlfb3JkZXJfY29uc3VtZSkpIHsKKyAgICAgICAgICAgIFQqIHQgPSBuZXcgKCZTdG9yYWdl
OjpzX21lbW9yeSkgVChsb2NrKTsKKyAgICAgICAgICAgIFN0b3JhZ2U6OnNfb2JqZWN0LnN0b3Jl
KHQsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBTdG9yYWdlOjpzX29iamVjdC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2NvbnN1bWUpOworICAg
IH0KK307CisKKyNkZWZpbmUgREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShUeXBl
KSBcCit0ZW1wbGF0ZTw+IHN0cnVjdCBTdGF0aWNQZXJQcm9jZXNzU3RvcmFnZVRyYWl0czxUeXBl
PiB7IFwKKyAgICB1c2luZyBNZW1vcnkgPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxz
aXplb2YoVHlwZSksIHN0ZDo6YWxpZ25tZW50X29mPFR5cGU+Ojp2YWx1ZT46OnR5cGU7IFwKKyAg
ICBzdHJ1Y3QgQkVYUE9SVCBTdG9yYWdlIHsgXAorICAgICAgICBCRVhQT1JUIHN0YXRpYyBzdGQ6
OmF0b21pYzxUeXBlKj4gc19vYmplY3Q7IFwKKyAgICAgICAgQkVYUE9SVCBzdGF0aWMgTXV0ZXgg
c19tdXRleDsgXAorICAgICAgICBCRVhQT1JUIHN0YXRpYyBNZW1vcnkgc19tZW1vcnk7IFwKKyAg
ICB9OyBcCit9OworCisjZGVmaW5lIERFRklORV9TVEFUSUNfUEVSX1BST0NFU1NfU1RPUkFHRShU
eXBlKSBcCisgICAgc3RkOjphdG9taWM8VHlwZSo+IFN0YXRpY1BlclByb2Nlc3NTdG9yYWdlVHJh
aXRzPFR5cGU+OjpTdG9yYWdlOjpzX29iamVjdCB7IG51bGxwdHIgfTsgXAorICAgIE11dGV4IFN0
YXRpY1BlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpTdG9yYWdlOjpzX211dGV4IHsgfTsg
XAorICAgIFN0YXRpY1BlclByb2Nlc3NTdG9yYWdlVHJhaXRzPFR5cGU+OjpNZW1vcnkgU3RhdGlj
UGVyUHJvY2Vzc1N0b3JhZ2VUcmFpdHM8VHlwZT46OlN0b3JhZ2U6OnNfbWVtb3J5IHsgfTsKKwor
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9WTUhlYXAuY3BwIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCmluZGV4IGFm
OTY2YTZkMDBjNzRiZjg1NjQxMjliMjEwZjI2N2E2MTUzMzI2ZmEuLjVjOGUyOGEwNTA5MzFhMTQ1
M2IyZTNhOTkyY2YyZjgyOTVlYzlmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVk1IZWFwLmNwcAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAKQEAg
LTI5LDYgKzI5LDggQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCitERUZJTkVfU1RBVElDX1BF
Ul9QUk9DRVNTX1NUT1JBR0UoVk1IZWFwKTsKKwogVk1IZWFwOjpWTUhlYXAoc3RkOjpsb2NrX2d1
YXJkPE11dGV4PiYpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZN
SGVhcC5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAppbmRleCA0MWExNzNiYTYw
MzVlNGU4MmRmMDRjZWUzN2U2OTk1NDYxYmRjMzc1Li40N2ExMTNkYmYyNzM2NDExNDEyODhhYjZj
NGU1MDVlYWU1YmI1YzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVh
cC5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJIZWFwS2luZC5oIgogI2luY2x1ZGUgIkxhcmdlUmFuZ2UuaCIKICNpbmNs
dWRlICJNYXAuaCIKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVmVj
dG9yLmgiCiAjaWYgQk9TKERBUldJTikKICNpbmNsdWRlICJab25lLmgiCkBAIC00NCwxMiArNDUs
MTMgQEAgY2xhc3MgSGVhcDsKIAogdHlwZWRlZiBlbnVtIHsgU3luYywgQXN5bmMgfSBTY2F2ZW5n
ZU1vZGU7CiAKLWNsYXNzIFZNSGVhcCB7CitjbGFzcyBWTUhlYXAgOiBwdWJsaWMgU3RhdGljUGVy
UHJvY2VzczxWTUhlYXA+IHsKIHB1YmxpYzoKICAgICBWTUhlYXAoc3RkOjpsb2NrX2d1YXJkPE11
dGV4PiYpOwogICAgIAogICAgIExhcmdlUmFuZ2UgdHJ5QWxsb2NhdGVMYXJnZUNodW5rKHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCk7CiB9OworREVDTEFSRV9TVEFUSUNfUEVSX1BST0NFU1NfU1RP
UkFHRShWTUhlYXApOwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWm9uZS5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25l
LmgKaW5kZXggYjJmMGZhMWFmYmJlY2E3YTgxMTMzYzJlOGM5MmVmNGU0ZTA1ZDNkNi4uZTU0MWUw
ZjQzNWY4NjM0MGYwY2YwMzIzY2E4MzIxNzYxY2Y4MmRkMiAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9ab25lLmgKKysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9ab25lLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgogI2luY2x1ZGUgIk11
dGV4LmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgi
CiAjaW5jbHVkZSA8bWFsbG9jL21hbGxvYy5oPgogI2luY2x1ZGUgPG11dGV4PgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9ibWFsbG9jLmNwcAppbmRleCBjY2NiNTk0MTdhYTg2NWU3ZDgxMGMxZTRkYzZmNThj
NmI5ZjljMTk0Li41OWI2NjQyNjNmM2ZiYmE4OGQyMWU2ZjgxMmY3NjE3OWE2ZmJiNGU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL2JtYWxsb2MuY3BwCisrKyBiL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvYm1hbGxvYy5jcHAKQEAgLTk1LDEyICs5NSwxMiBAQCB2b2lkIHNjYXZl
bmdlKCkKICAgICBpZiAoRGVidWdIZWFwKiBkZWJ1Z0hlYXAgPSBEZWJ1Z0hlYXA6OnRyeUdldCgp
KQogICAgICAgICBkZWJ1Z0hlYXAtPnNjYXZlbmdlKCk7CiAgICAgZWxzZQotICAgICAgICBQZXJQ
cm9jZXNzPFNjYXZlbmdlcj46OmdldCgpLT5zY2F2ZW5nZSgpOworICAgICAgICBTY2F2ZW5nZXI6
OmdldCgpLT5zY2F2ZW5nZSgpOwogfQogCiBib29sIGlzRW5hYmxlZChIZWFwS2luZCkKIHsKLSAg
ICByZXR1cm4gIVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFi
bGVkKCk7CisgICAgcmV0dXJuICFFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxl
ZCgpOwogfQogCiAjaWYgQk9TKERBUldJTikKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIHNldFNj
YXZlbmdlclRocmVhZFFPU0NsYXNzKHFvc19jbGFzc190IG92ZXJyaWRlQ2xhc3MpCiAgICAgaWYg
KERlYnVnSGVhcDo6dHJ5R2V0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPE11dGV4PiBsb2NrKEhlYXA6Om11dGV4KCkpOwotICAgIFBlclByb2Nlc3M8U2NhdmVuZ2Vy
Pjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xhc3MpOworICAg
IFNjYXZlbmdlcjo6Z2V0KCktPnNldFNjYXZlbmdlclRocmVhZFFPU0NsYXNzKG92ZXJyaWRlQ2xh
c3MpOwogfQogI2VuZGlmCiAKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIGRlY29tbWl0QWxpZ25l
ZFBoeXNpY2FsKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUsIEhlYXBLaW5kIGtpbmQpCiB2b2lk
IGVuYWJsZU1pbmlNb2RlKCkKIHsKICAgICBpZiAoIURlYnVnSGVhcDo6dHJ5R2V0KCkpCi0gICAg
ICAgIFBlclByb2Nlc3M8U2NhdmVuZ2VyPjo6Z2V0KCktPmVuYWJsZU1pbmlNb2RlKCk7CisgICAg
ICAgIFNjYXZlbmdlcjo6Z2V0KCktPmVuYWJsZU1pbmlNb2RlKCk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYzo6YXBpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy90ZXN0L3Rlc3Ri
bWFsbG9jLmNwcCBiL1NvdXJjZS9ibWFsbG9jL3Rlc3QvdGVzdGJtYWxsb2MuY3BwCmluZGV4IGQ3
MWRjMWJjZTlmOGQxMDk1ODE4YjE4ZTUzZjVmMzQwYjFlMTBhODcuLjBiN2M3NDIwNzk0ODcxY2Jl
ZWE3ZjMwMGQ4MGUyZjQ2ZjY5N2U5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL3Rlc3Qv
dGVzdGJtYWxsb2MuY3BwCisrKyBiL1NvdXJjZS9ibWFsbG9jL3Rlc3QvdGVzdGJtYWxsb2MuY3Bw
CkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBzdGQ6OnNldDx2b2lkKj4gdG9wdHJzZXQoY29uc3Qg
c3RkOjp2ZWN0b3I8dm9pZCo+JiBwdHJzKQogCiBzdGF0aWMgdm9pZCBhc3NlcnRFbXB0eVBvaW50
ZXJTZXQoY29uc3Qgc3RkOjpzZXQ8dm9pZCo+JiBwb2ludGVycykKIHsKLSAgICBpZiAoUGVyUHJv
Y2VzczxFbnZpcm9ubWVudD46OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJsZWQoKSkgeworICAgIGlm
IChFbnZpcm9ubWVudDo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKSB7CiAgICAgICAgIHBy
aW50ZigiICAgIHNraXBwaW5nIGNoZWNrcyBiZWNhdXNlIERlYnVnSGVhcC5cbiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtOTAsNyArOTAsNyBAQCBzdGF0aWMgdm9pZCBhc3NlcnRFbXB0
eVBvaW50ZXJTZXQoY29uc3Qgc3RkOjpzZXQ8dm9pZCo+JiBwb2ludGVycykKIHRlbXBsYXRlPHR5
cGVuYW1lIGhlYXBUeXBlPgogc3RhdGljIHZvaWQgYXNzZXJ0SGFzT2JqZWN0cyhJc29IZWFwPGhl
YXBUeXBlPiYgaGVhcCwgc3RkOjpzZXQ8dm9pZCo+IHBvaW50ZXJzKQogewotICAgIGlmIChQZXJQ
cm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdIZWFwRW5hYmxlZCgpKSB7CisgICAg
aWYgKEVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKICAgICAgICAg
cHJpbnRmKCIgICAgc2tpcHBpbmcgY2hlY2tzIGJlY2F1c2UgRGVidWdIZWFwLlxuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIHZvaWQgYXNzZXJ0
SGFzT2JqZWN0cyhJc29IZWFwPGhlYXBUeXBlPiYgaGVhcCwgc3RkOjpzZXQ8dm9pZCo+IHBvaW50
ZXJzKQogdGVtcGxhdGU8dHlwZW5hbWUgaGVhcFR5cGU+CiBzdGF0aWMgdm9pZCBhc3NlcnRIYXNP
bmx5T2JqZWN0cyhJc29IZWFwPGhlYXBUeXBlPiYgaGVhcCwgc3RkOjpzZXQ8dm9pZCo+IHBvaW50
ZXJzKQogewotICAgIGlmIChQZXJQcm9jZXNzPEVudmlyb25tZW50Pjo6Z2V0KCktPmlzRGVidWdI
ZWFwRW5hYmxlZCgpKSB7CisgICAgaWYgKEVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBF
bmFibGVkKCkpIHsKICAgICAgICAgcHJpbnRmKCIgICAgc2tpcHBpbmcgY2hlY2tzIGJlY2F1c2Ug
RGVidWdIZWFwLlxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjMsNyArMTIzLDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgaGVhcFR5cGU+CiBzdGF0aWMgdm9pZCBhc3NlcnRDbGVhbihJ
c29IZWFwPGhlYXBUeXBlPiYgaGVhcCkKIHsKICAgICBzY2F2ZW5nZVRoaXNUaHJlYWQoKTsKLSAg
ICBpZiAoIVBlclByb2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVk
KCkpIHsKKyAgICBpZiAoIUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkp
IHsKICAgICAgICAgYXV0byYgaW1wbCA9IGhlYXAuaW1wbCgpOwogICAgICAgICB7CiAgICAgICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+IGxvY2tlcihpbXBsLmxvY2spOwpAQCAtMTMxLDcg
KzEzMSw3IEBAIHN0YXRpYyB2b2lkIGFzc2VydENsZWFuKElzb0hlYXA8aGVhcFR5cGU+JiBoZWFw
KQogICAgICAgICB9CiAgICAgfQogICAgIGhlYXAuc2NhdmVuZ2UoKTsKLSAgICBpZiAoIVBlclBy
b2Nlc3M8RW52aXJvbm1lbnQ+OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKKyAgICBp
ZiAoIUVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCkpIHsKICAgICAgICAg
YXV0byYgaW1wbCA9IGhlYXAuaW1wbCgpOwogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8TXV0ZXg+
IGxvY2tlcihpbXBsLmxvY2spOwogICAgICAgICBDSEVDSyghaW1wbC5udW1Db21taXR0ZWRQYWdl
cygpKTsK
</data>
<flag name="review"
          id="381105"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>